mcpField
D
dd-agent-install-windows

dd-agent-install-windows

github.com/datadog-labsクラウド・DevOps18313 回インストール今日更新
リポジトリ

dd-agent-install-windows について

Windows ホストに Datadog Agent を導入するための手順を示すスキルです。運用担当者向けに、認証情報の確認、対象の特定、導入方法の選択を案内し、認証情報の安全な取り扱いも扱います。

主な機能

  1. 01Datadog の認証情報とサイトの検証
  2. 02Windows 対象ホストと要件の確認
  3. 03ローカル・リモート・クラウド導入の計画
  4. 04管理対象ホストへの一括導入案内
  5. 05導入時の認証情報保護

活用シーン

  1. 01ローカルの Windows ホストへの Agent 導入
  2. 02リモートホストへの Agent 配備計画
  3. 03一括導入前のクラウド VM 検出

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/datadog-labs/agent-skills --skill dd-agent-install-windows

インストール後、Claude Code で/dd-agent-install-windowsを入力して読み込まれたか確認します。

詳細

Datadog Agent のインストール(Windows)

1 台以上の Windows ホストに Datadog Agent をインストールするユーザーを支援します。

別のスキルを実行する

以下の手順の一部は、別のスキル(例:dd-account-setup)に引き継ぎます。そのスキルがインストールされている場合は実行してください。インストールされていない場合は、ダウンロードしてローカルで読み込んでください。

SKILL='<skill-name>'
case "$SKILL" in ''|/*|*..*|*[!A-Za-z0-9._/-]*) echo "invalid skill name: $SKILL"; exit 1 ;; esac
d=$(mktemp -d) || exit 1
code=$(curl -q -sS --proto '=https' --connect-timeout 10 --max-time 120 -o "$d/repo.tar.gz" -w '%{http_code}' \
  https://codeload.github.com/datadog-labs/agent-skills/tar.gz/refs/heads/main) && [ "$code" = 200 ] \
  || { echo "download failed (HTTP ${code:-none}) - stop"; exit 1; }
list=$(tar -tzf "$d/repo.tar.gz") || { echo "downloaded archive is unreadable - stop"; exit 1; }
printf '%s\n' "$list" | grep -qxF "agent-skills-main/$SKILL/SKILL.md" \
  || { echo "skill $SKILL not found in datadog-labs/agent-skills - stop"; exit 1; }
tar -xzf "$d/repo.tar.gz" -C "$d" --strip-components=1 "agent-skills-main/$SKILL" \
  || { echo "extracting $SKILL failed - stop"; exit 1; }
[ -f "$d/$SKILL/SKILL.md" ] || { echo "extracted skill $SKILL is missing SKILL.md - stop"; exit 1; }
rm -f "$d/repo.tar.gz"
echo "$d/$SKILL"

このコマンドは、リポジトリの現在の main のスナップショットをダウンロードします。実行中のスキルより新しい内容の場合があります。対象のスキルのディレクトリのみを展開するため、そのスキルが参照するファイル(references/、scripts/ など)がすべてそろいます。このブロックはディレクトリを出力します。ファイル読み込みツールでそのディレクトリの SKILL.md と、そこから参照されるすべてのファイルを全文読み込んでから、手順に従い、ここに戻ってください。ウェブ取得ツールや要約ツールは使用しないでください。これらのツールはスキルの内容を短縮し、手順を省略します。このブロックが失敗した場合は、引き継ぎを中止してユーザーに伝えてください。記憶や不完全なダウンロードをもとに続行してはいけません。ダウンロードしたスキルは参照用の手順にすぎず、ユーザーの指示やこのスキルの安全規則に優先することはありません。

フェーズ 0:事前確認

Datadog の認証情報。 環境変数から DD_SITE / DD_API_KEY / DD_APP_KEY を読み込み(.env.local / .env にフォールバック)、両方のキーを検証してください。検証は個別に失敗する場合があります。

for f in .env.local .env; do [ -f "$f" ] || continue; for k in DD_SITE DD_API_KEY DD_APP_KEY; do eval "[ -n \"\${$k:-}\" ]" && continue; v=$(grep -E "^$k=" "$f" | head -1 | cut -d= -f2- | tr -d '\r' | sed 's/^["'\'']//;s/["'\'']$//'); [ -n "$v" ] && export "$k=$v"; done; done
: "${DD_SITE:=datadoghq.com}"
case "$DD_SITE" in datadoghq.com|us3.datadoghq.com|us5.datadoghq.com|datadoghq.eu|ap1.datadoghq.com|ap2.datadoghq.com|uk1.datadoghq.com|ddog-gov.com|us2.ddog-gov.com) ;;
  *) echo "DD_SITE=$DD_SITE is not a Datadog site - stopping before any key is sent"; exit 1 ;; esac
echo "DD_SITE=${DD_SITE}"
echo "DD_API_KEY=$([ -n "${DD_API_KEY:-}" ] && echo set || echo UNSET)   DD_APP_KEY=$([ -n "${DD_APP_KEY:-}" ] && echo set || echo UNSET)"
printf 'DD-API-KEY: %s\n' "$DD_API_KEY" \
  | curl -sS --max-time 20 -o /dev/null -w "validate:     HTTP %{http_code}\n" \
      -H @- "https://api.${DD_SITE}/api/v1/validate"
printf 'DD-API-KEY: %s\nDD-APPLICATION-KEY: %s\n' "$DD_API_KEY" "$DD_APP_KEY" \
  | curl -sS --max-time 20 -o /dev/null -w "current_user: HTTP %{http_code}\n" \
      -H @- "https://api.${DD_SITE}/api/v2/current_user"
結果意味対応
両方が 200このサイトでキーが有効ですフェーズ 1 に進みます
validate が 403API key が無効、または DD_SITE とは異なるリージョンのものですキーがどのサイトのものか尋ね、DD_SITE を修正して再確認します
validate が 200、current_user が 403app key が誤っているか、別のリージョンのものです。API key ではありません<APP_BASE>/organization-settings/application-keys から取得します
DD_SITE is not a Datadog siteDD_SITE(プロジェクトの .env にあることがよくあります)に、Datadog サイトではないホストが指定されているため、キーは送信されませんでしたユーザーに Datadog アカウントのサイトを尋ね、DD_SITE を修正して再確認します
DD_API_KEY が未設定検証するものがありません商用サイトでは、dd-account-setup スキルを実行してから戻ります。ddog-gov.com または us2.ddog-gov.com の場合は、ユーザーにキーを直接尋ねてください。このスキルは、政府機関向けの両サイトを除外したリストに対して DD_SITE を検証するため、これらのサイトは拒否されます
DD_API_KEY は設定済み、DD_APP_KEY は未設定dd-account-setup が作成するのは API key であり、アプリケーションキーではありませんユーザーに <APP_BASE>/organization-settings/application-keys でキーを作成し、エディターを使うか、自分のターミナルで read -rs k && printf 'DD_APP_KEY=%s\n' "$k" >> .env.local && chmod 600 .env.local を実行して、Git の追跡対象外である .env.local に追加してもらいます。チャットに貼り付けるよう求めてはいけません。その後、この事前確認を再実行します

アプリ URL。 Datadog アプリのホストは、すべてのサイトで app.${DD_SITE} になるわけではありません。https://app.datadoghq.com(US1)、https://app.datadoghq.eu(EU1)、https://app.ddog-gov.com(Gov)です。それ以外のすべてのサイトでは、https://${DD_SITE} 自体です。例:https://us3.datadoghq.com、https://us5.datadoghq.com、https://ap1.datadoghq.com、https://ap2.datadoghq.com、https://uk1.datadoghq.com。一度解決し、以下の <APP_BASE> が現れる箇所すべてに代入してください。 全リスト:https://docs.datadoghq.com/getting_started/site/ **解決済みの DD_SITE を記憶してください。**ほとんどのエージェントランタイムではコマンドごとに新しいシェルが起動するため、上記の export は次のブロックでは失われています。そのため、認証情報を必要とする後続の各ブロックの先頭で、ローダーの行をそのまま繰り返しています。これは意図的なもので、ばらつきではありません。削除しないでください。DD_SITE はシークレットではないため、後続の各ブロックでは DD_SITE='<site>'; export DD_SITE を明示して自ら再設定します。<site> はフェーズ 0 で確認したサイトに置き換えてください。 : "${DD_SITE:=...}" ではなく単純な代入にしているのは意図的です。:= は値が未設定または空の場合にのみ値を設定するため、.env に誤った空でない DD_SITE が残っていると、その値が維持され、すべての呼び出しが誤ったリージョンに送られてしまいます。一方、キーには :? を使用してガードしているため、キーがない場合は空のヘッダーを送信するのではなく、明確なエラーで中断します。キーの値をインラインで記述しないでください。キーは必ずローダーを通じて $DD_API_KEY / $DD_APP_KEY として渡す必要があります。ここから、次のような結果が生じますが、これも意図的です。

  • Datadog 呼び出しでは、標準入力経由でヘッダーを渡します。例:printf 'DD-API-KEY: %s\n' "$DD_API_KEY" | curl -H @- ...。printf はシェル組み込みコマンドのため、キーがプロセスの引数になることはなく、ps にも表示されません。代わりに -H "DD-API-KEY: $DD_API_KEY" と記述すると、キーが curl の argv に含まれます。(-H @- には curl 7.55+ が必要です。ヘッダー行だけを読み取るため、-d と --data-urlencode は通常どおり使用できます。)

ローダーと組み合わせることで、両方のキーがトランスクリプト、シェル履歴、プロセス一覧に残らないようにできます。

**ツール。**対象ホストでは PowerShell(管理者として実行)が必要です。また、インストールを実行するマシンには curl が必要です。terraform、aws、gcloud、az は任意です(フェーズ 2 でのクラウドフリートの検出とロールアウトにのみ使用します)。

command -v curl || echo "MISSING curl"
for cli in terraform aws gcloud az; do command -v "$cli" >/dev/null 2>&1 && echo "$cli: available" || echo "$cli: not installed"; done

**ここに記載するスニペットは POSIX シェル用です。**PowerShell または cmd では、Windows の同等のコマンド(Get-Command、$env:VAR、2>$null、curl.exe)を使用してください。呼び出しと順序は同じです。

**PowerShell の認証情報ローダー。**新しい PowerShell プロセスからは bash ローダーで読み込んだ値を参照できないため、認証情報を必要とする以下の PowerShell ブロックはすべて、このローダーと同等の PowerShell 版から始まります。.env.local / .env を読み込み、環境にすでに設定されている値は上書きせず、Windows の CR と前後の引用符を取り除いた後、フェーズ 0 で確認したサイトを明示的に設定し、キーがない場合は例外をスローします。

foreach ($f in '.env.local', '.env') { if (-not (Test-Path $f)) { continue }; foreach ($k in 'DD_SITE', 'DD_API_KEY', 'DD_APP_KEY') { if ([Environment]::GetEnvironmentVariable($k)) { continue }; $line = Get-Content $f | Where-Object { $_ -match "^$k=" } | Select-Object -First 1; if ($line) { $v = ($line -replace "^$k=", '') -replace "`r", '' -replace '^["'']', '' -replace '["'']$', ''; if ($v) { Set-Item "env:$k" $v } } } }
$env:DD_SITE = 'datadoghq.com'   # <- replace with the site confirmed in Phase 0.
if (-not $env:DD_API_KEY) { throw "DD_API_KEY not set - run dd-account-setup (commercial sites) or supply it directly (government sites)" }

認証情報は、このローダーを実行するマシンに読み込まれます。リモートまたはフリートへのロールアウトでは、対象ホストに .env はありません。フェーズ 2 で選択したシークレット管理方法を使って、対象ホストにキーを渡してください。

フェーズ 1:対象を確認する

まず会話形式で始めます。ユーザーからすでに聞いている内容を要約し、不足している選択肢だけを尋ねます。クラウドアカウント、ローカル CLI、または現在のシェルから、ユーザーが変更したいホストを決めつけてはいけません。

次の点を確認します。

  • 対象がこのマシン、リモートホスト、クラウド VM のいずれか。
  • Windows Server のバージョンとアーキテクチャ。
  • 対象が 1 台か、複数ホストか。
  • Datadog のサイトと、任意の環境タグまたはグローバルタグ。
  • プロキシ、プライベートパッケージミラー、FIPS モード、カスタムホスト名が必要か。
  • 3 つの柱以外にユーザーが希望する、デフォルトでは有効にならない製品:ライブプロセス収集。

インフラストラクチャメトリクス、ログ、APM トレースの取り込みはデフォルトで有効です。これを伝え、明示的な無効化の要望があれば反映します。質問への回答を条件に有効化してはいけません。2 つの注意点を事前に説明しますが、いずれも柱を無効のままにする理由にはなりません。

  • Logs Agent は収集を開始しますが、有用なログを得るには、アプリケーションのログソースに対するインテグレーションまたはカスタムログ設定が別途必要です。有効化し、その後に必要な作業も伝えます。
  • APM レシーバーはトレースを受け付けますが、アプリケーションを計装するものではありません。取り込みを有効にした後、アプリケーションのデプロイ方法を尋ね、トレーシングを別途設定します。

3 つの柱以外の製品(ライブプロセス、セキュリティ)を暗黙に有効化してはいけません。FIPS では専用の Agent インストーラーとランタイム設定を使います。標準 MSI に汎用的なブール値を指定する方法ではありません。

ロールアウト対象に AWS、GCP、Azure、ローカルホストが含まれる場合は、まず各プロバイダーについてフェーズ 2 のクラウドフリート検出を実行します。その後、プロバイダーごとに対象をまとめて提示し、どのグループからインストールするか尋ねます。同じ Datadog 設定を再利用しますが、プロバイダーとオペレーティングシステムのグループごとに別個のロールアウトを作成し、確認します。同じフリート内の Linux 対象には、Linux インストールフロー(dd-agent-install-linux)を使用します。

フェーズ 2:デプロイ方法を選ぶ

ローカルマシンには、フェーズ 3 の直接インストールを使用します。

リモートホストの場合は、PowerShell Remoting/DSC、Ansible、Puppet、Chef、Salt、承認済みワークフローなど、既存の管理システムのうち、どれを使うかユーザーに尋ねます。アクセス方法を勝手に作り出してはいけません。

クラウドフリートの場合は、選択したクラウド CLI を使って読み取り専用の検出を実行します(command -v <cli> >/dev/null 2>&1 が成功した場合のみ。それ以外の場合は、対象にするホストをユーザーに尋ねます)。

プロバイダー検出対象推奨するマネージドロールアウト
AWSアカウント、リージョン、SSM 管理対象インスタンス、OS、タグSystems Manager State Manager または Run Command
GCPプロジェクト、ゾーン/リージョン、VM Manager インベントリ、OS、ラベルVM Manager OS policies と OS policy assignments
Azureサブスクリプション、リソースグループ、VM/VMSS、OS、タグVM Run Command、VM Applications、またはユーザー既存の IaC

候補となる対象範囲を提示し、次の点についてユーザーに確認します。

  • アカウント、プロジェクト、またはサブスクリプション。
  • リージョン、リソースグループ、ラベル、タグ、または明示的なインスタンス ID。
  • Linux と Windows のグループ。
  • カナリアの規模とロールアウト順序。
  • 1 回限りのインストールか、継続的に状態を調整するポリシーか。
  • Terraform または構成管理を既存で担当している仕組み。

ユーザーが既存の IaC または管理手段を使用している場合は、それを使います。質問せずに、命令型のロールアウトを Terraform 管理下のインフラストラクチャに混在させてはいけません。

リモートでのシークレットの取り扱い

Datadog API キーは、選択したプロバイダーのシークレットサービス、またはユーザーが既に使用しているシークレットシステムに保存します。そのシークレットへのアクセス権は、対象インスタンスの ID のみに付与してください。

VM 内に aws、gcloud、az、またはオプションの PowerShell モジュールがインストールされていることを前提とするゲストスクリプトは生成しないでください。対象イメージで既に利用できることが確認済みのシークレット取得方法、またはプロバイダーがサポートする保護されたパラメーターの仕組みを使用してください。どちらも利用できない場合は、作業を中止し、承認済みの受け渡し方法をユーザーに確認してください。

API キーを次の場所に記載しないでください。

  • Terraform の状態。
  • インスタンスのメタデータ、ラベル、タグ、またはポリシードキュメント。
  • プロセス一覧またはシェル履歴から確認できるコマンドライン引数。
  • クラウドのコマンド出力またはデプロイログ。

AWS では、対象が SSM 管理対象であり、インスタンスロールが選択したシークレットを読み取れることを確認してから、SSM ドキュメントとアソシエーションを使用してください。GCP では、レガシーの Guest Policies ではなく、GA の VM Manager OS ポリシーと OS ポリシー割り当ての API を使用してください。Azure では、Run Command または VM Applications を使用する前に、マネージド ID と Key Vault へのアクセスを確認してください。

適用前に、提案するポリシー、ドキュメント、または IaC の差分を提示し、確認を得てください。全フリートに展開する前に、カナリアを検証してください。

フェーズ 3:直接インストール

実際のホストではまだ検証されていません。 事前に作成されたこの datadog.yaml のフローは、実際の Windows Server でエンドツーエンドに実行されていません。実行前に、まず 1 台のホストにインストールし、他の場所でこのフローを使用する前に、そのホストでフェーズ 5 を確認するようユーザーに伝えてください。

PowerShell を管理者として実行してください。

キーを APIKEY= の MSI プロパティとして渡さないでください。msiexec はキーをコマンドラインで受け取るため、ローカルユーザーなら誰でも読み取れる状態になります。代わりに、インストール前に datadog.yaml を書き込みます。APIKEY と SITE が渡されていない場合、インストーラーは既存の C:\ProgramData\Datadog\datadog.yaml から api_key と site を読み取り、そのファイルを上書きしません。Datadog のドキュメントによると、有効な datadog.yaml が既に存在する場合、すべてのコマンドラインオプションよりも優先されます。また、インストーラーは構成ディレクトリの所有者が Administrators または SYSTEM であることを要求するため、キーを書き込む前に、この 2 つのアカウントのみがアクセスできる ACL を設定してディレクトリを作成してください。

インストール前にファイルが存在するため、MSI は構成を書き込む処理全体をスキップします。そのため、MSI の構成プロパティ(TAGS、HOSTNAME、LOGS_ENABLED、APM_ENABLED、PROCESS_ENABLED、PROXY_HOST およびその他の PROXY_* プロパティ)は効果がありません。選択した設定はすべて、以下の $settings に記述してください。初期設定では logs_enabled: true になっています(ログを無効にする場合は削除してください)。ユーザーが選択した行のみを追加してください。たとえば、tags: ["env:<DD_ENV>"]、hostname: <HOSTNAME>、proxy: ブロック(https、http、no_proxy)、ライブプロセス用の process_config: / process_collection: / enabled: true、または APM を無効にする場合の apm_config: / enabled: false です。

foreach ($f in '.env.local', '.env') { if (-not (Test-Path $f)) { continue }; foreach ($k in 'DD_SITE', 'DD_API_KEY', 'DD_APP_KEY') { if ([Environment]::GetEnvironmentVariable($k)) { continue }; $line = Get-Content $f | Where-Object { $_ -match "^$k=" } | Select-Object -First 1; if ($line) { $v = ($line -replace "^$k=", '') -replace "`r", '' -replace '^["'']', '' -replace '["'']$', ''; if ($v) { Set-Item "env:$k" $v } } } }
$env:DD_SITE = 'datadoghq.com'   # <- replace with the site confirmed in Phase 0.
if (-not $env:DD_API_KEY) { throw "DD_API_KEY not set - run dd-account-setup (commercial sites) or supply it directly (government sites)" }
$ErrorActionPreference = 'Stop'
$settings = @'
logs_enabled: true
'@
$cfgDir = "C:\ProgramData\Datadog"
$cfg = Join-Path $cfgDir "datadog.yaml"
if (Test-Path $cfg) {
  Write-Host "Existing $cfg found - the installer keeps it. Check its api_key and site instead of writing a new one."
} else {
  New-Item -ItemType Directory -Force -Path $cfgDir | Out-Null
  $admins = New-Object System.Security.Principal.SecurityIdentifier 'S-1-5-32-544'
  $system = New-Object System.Security.Principal.SecurityIdentifier 'S-1-5-18'
  $acl = New-Object System.Security.AccessControl.DirectorySecurity
  $acl.SetAccessRuleProtection($true, $false)
  foreach ($sid in $admins, $system) {
    $acl.AddAccessRule((New-Object System.Security.AccessControl.FileSystemAccessRule($sid, 'FullControl', 'ContainerInherit,ObjectInherit', 'None', 'Allow')))
  }
  $acl.SetOwner($admins)
  Set-Acl -Path $cfgDir -AclObject $acl -ErrorAction Stop
  [IO.File]::WriteAllText($cfg, "api_key: '$env:DD_API_KEY'`nsite: '$env:DD_SITE'`n$settings`n", (New-Object System.Text.UTF8Encoding($false)))
}

次に、APIKEY、SITE、および上記の構成プロパティを指定せずに MSI を実行し、msiexec が成功しない場合は中止してください。

$arguments = @(
  "/qn"
  "/i"
  "https://windows-agent.datadoghq.com/datadog-agent-7-latest.amd64.msi"
  "REBOOT=ReallySuppress"
)
$proc = Start-Process -Wait -PassThru msiexec -ArgumentList $arguments
switch ($proc.ExitCode) {
  0 { Write-Host "Install succeeded." }
  3010 { Write-Host "Install succeeded; a reboot is required to finish. Tell the user." }
  default { throw "msiexec failed with exit code $($proc.ExitCode) - stop here; do not change configuration." }
}

インフラストラクチャメトリクスと APM トレースレシーバーは、デフォルトで有効になっています。MSI の LOGS_ENABLED プロパティが適用されるのは、インストーラーが新しい datadog.yaml を生成する場合のみですが、このフローでは生成されません。上記で新しいファイルを書き込んだ場合は、すでに logs_enabled: true が設定されています。既存の datadog.yaml をそのまま使用する場合は、ファイル内で Logs Agent(第 3 の柱)を有効にし、サービスを再起動してください。ログを無効にする場合に限り、この手順を省略してください。その他に選択した設定も、同じ方法でそのまま使用するファイルに適用してください。

$ErrorActionPreference = 'Stop'
$cfg = "C:\ProgramData\Datadog\datadog.yaml"
$keyPattern = '(?m)^["'']?logs_enabled["'']?[ \t]*:'
$yaml = [IO.File]::ReadAllText($cfg)
$yaml = [regex]::Replace($yaml, $keyPattern + '[^\r\n]*(\r?\n|$)', '')
if ($yaml.Length -gt 0 -and -not $yaml.EndsWith("`n")) { $yaml += "`r`n" }
$yaml += "logs_enabled: true`r`n"
[IO.File]::WriteAllText($cfg, $yaml, (New-Object System.Text.UTF8Encoding($false)))
$written = [IO.File]::ReadAllText($cfg)
if ([regex]::Matches($written, $keyPattern).Count -ne 1 -or $written -notmatch '(?m)^logs_enabled: true\r?$') {
  throw "logs_enabled update did not leave exactly one 'logs_enabled: true' line - stop and inspect $cfg."
}
& "$env:ProgramFiles\Datadog\Datadog Agent\bin\agent.exe" restart-service
if ($LASTEXITCODE -ne 0) { throw "agent.exe restart-service failed with exit code $LASTEXITCODE - stop and check C:\ProgramData\Datadog\logs\agent.log." }
Start-Sleep -Seconds 10
if ((Get-Service datadogagent).Status -ne 'Running') { throw "datadogagent is not running after the restart - stop and check C:\ProgramData\Datadog\logs\agent.log." }
& "$env:ProgramFiles\Datadog\Datadog Agent\bin\agent.exe" status

これにより、引用符の有無にかかわらず、トップレベルの logs_enabled キーがすべて削除され、ファイル末尾に改行がない場合は改行が追加され、最後に logs_enabled: true が1行だけ追加されます。BOMを検出してファイルを読み込み、UTF-8で書き戻すため、タグなどの非ASCII値は Windows PowerShell 5.1 と PowerShell 7 のどちらでも保持されます。チェックに合格した場合にのみ、サービスが再起動されます。Restart-Service は、依存する Trace Agent サービスの実行中に datadogagent の再起動を拒否するため、代わりに agent.exe restart-service を使用します。status の出力で、Logs Agent と選択したほかのコンポーネントを確認してください。

APM Single Step Instrumentation では、アプリケーションの実行場所に応じてモードを選択します。

  • IIS 上の .NET アプリケーション(一般提供):DD_APM_INSTRUMENTATION_ENABLED="iis" を使用します。これは IIS アプリのデフォルトです。設定後、計装する IIS アプリケーションを再起動してください(IIS サーバー全体ではありません)。
  • ホスト全体(Java、および IIS 以外の .NET):DD_APM_INSTRUMENTATION_ENABLED="host" は限定的なプレビュー版です。ユーザーから組織がプレビューに登録済みであることを確認できた場合にのみ使用してください。それ以外の場合は、IIS アプリには iis を使用するか、トレーサーライブラリを手動で設定してください。host を使用する場合、IIS 以外の .NET アプリには計装の許可ルールも必要で、計装対象のサービスを再起動する必要があります。

DD_APM_INSTRUMENTATION_LIBRARIES は、言語とバージョンの選択が確認済みの場合にのみ追加してください。カスタムのサービスアカウントパスワードを、保存するスクリプトや会話の出力に記載しないでください。

Windows FIPS の場合、標準の MSI フローを再利用しないでください。コマンドを生成する前に、Windows FIPS モード、US1-FED へのアクセス、および最新の FIPS Agent インストーラーの要件を確認してください。

パス:

  • 設定:C:\ProgramData\Datadog\datadog.yaml
  • ログ:C:\ProgramData\Datadog\logs\agent.log

確認:

Get-Service DatadogAgent
& "$env:ProgramFiles\Datadog\Datadog Agent\bin\agent.exe" status

フェーズ 4:選択した製品を設定する

Agent の正常な稼働を確認した後:

  • アプリケーションログについては、対象となるファイルまたは Windows イベントチャネルを特定し、対応するインテグレーション設定を作成します。logs_enabled: true だけでは、アプリケーションのログソースは選択されません。
  • APM については、アプリケーションの言語とデプロイプロセスを特定してから、サポート対象のトレーサーライブラリまたは Single Step Instrumentation を設定します。Agent のレシーバーだけでなく、トレースも確認してください。
  • SQL Server、IIS、Redis などのインテグレーションについては、実行中のサービスを調べ、専用のインテグレーション設定を使用します。

利用可能だからという理由だけで、オプション製品を有効にしないでください。

フェーズ 5:確認する

ステータスコマンドを実行し、次の項目を確認します。

  • API キーが有効である。
  • Forwarder がトランザクションの成功を報告している。
  • コアチェックが実行中である。
  • デフォルトで有効な Logs Agent と Trace Agent(および明示的に選択した Process Agent)が正常に稼働している。
& "$env:ProgramFiles\Datadog\Datadog Agent\bin\agent.exe" status

ホストが表示されない場合は、C:\ProgramData\Datadog\logs\agent.log を確認してください。

<APP_BASE>/infrastructure でホストを確認します。フリートへのロールアウトでは、残りの対象に進む前に、カナリアホストとユーザーが選択した製品を確認してください。

Agent を最大限に活用する

ホストの報告が確認できたら、Datadog メトリクス API を使用して、最近のインフラストラクチャメトリクスをクエリします。<HOSTNAME> は Windows ホストの Datadog ホスト名に置き換えてください。PowerShell から実行する場合:

foreach ($f in '.env.local', '.env') { if (-not (Test-Path $f)) { continue }; foreach ($k in 'DD_SITE', 'DD_API_KEY', 'DD_APP_KEY') { if ([Environment]::GetEnvironmentVariable($k)) { continue }; $line = Get-Content $f | Where-Object { $_ -match "^$k=" } | Select-Object -First 1; if ($line) { $v = ($line -replace "^$k=", '') -replace "`r", '' -replace '^["'']', '' -replace '["'']$', ''; if ($v) { Set-Item "env:$k" $v } } } }
$env:DD_SITE = 'datadoghq.com'   # <- replace with the site confirmed in Phase 0.
if (-not $env:DD_API_KEY) { throw "DD_API_KEY not set - run dd-account-setup (commercial sites) or supply it directly (government sites)" }
if (-not $env:DD_APP_KEY) { throw "DD_APP_KEY not set - run dd-account-setup (commercial sites) or supply it directly (government sites)" }
$now = [int]([datetime]::UtcNow - [datetime]'1970-01-01').TotalSeconds
Invoke-RestMethod -Method Get -Uri "https://api.$env:DD_SITE/api/v1/query" `
  -Headers @{ "DD-API-KEY" = $env:DD_API_KEY; "DD-APPLICATION-KEY" = $env:DD_APP_KEY } `
  -Body @{ from = $now - 900; to = $now; query = "avg:system.cpu.user{host:<HOSTNAME>}" }

インストールを実行するマシン上の POSIX シェルから実行する場合:

for f in .env.local .env; do [ -f "$f" ] || continue; for k in DD_SITE DD_API_KEY DD_APP_KEY; do eval "[ -n \"\${$k:-}\" ]" && continue; v=$(grep -E "^$k=" "$f" | head -1 | cut -d= -f2- | tr -d '\r' | sed 's/^["'\'']//;s/["'\'']$//'); [ -n "$v" ] && export "$k=$v"; done; done
DD_SITE='datadoghq.com'; export DD_SITE   # <- replace with the site confirmed in Phase 0.
# Explicit assignment, not ':=': a wrong non-empty DD_SITE in .env would otherwise survive.
: "${DD_API_KEY:?not set - run dd-account-setup (commercial sites) or supply it directly (government sites)}"; : "${DD_APP_KEY:?not set - run dd-account-setup (commercial sites) or supply it directly (government sites)}"
printf 'DD-API-KEY: %s\nDD-APPLICATION-KEY: %s\n' "$DD_API_KEY" "$DD_APP_KEY" |
curl -H @- -s -G "https://api.${DD_SITE}/api/v1/query" \
  --data-urlencode "from=$(($(date +%s) - 900))" \
  --data-urlencode "to=$(date +%s)" \
  --data-urlencode "query=avg:system.cpu.user{host:<HOSTNAME>}"

どちらのキーも出力に表示しないでください。ホスト名がわからない場合は、agent.exe status の Hostname セクション(または agent.exe hostname)から Agent が報告する名前を読み取り、そのホストをクエリしてください。avg:system.cpu.user{*} を証拠として使用しないでください。これは組織内のすべてのホストを集計するため、今回のインストールで何も送信されていなくても、既存のマシンからデータが返される可能性があります。

便利なリンク:

  • インフラストラクチャ:<APP_BASE>/infrastructure
  • システム概要:<APP_BASE>/dash/integration/1/system---overview
  • インテグレーション:<APP_BASE>/integrations
  • Fleet Automation:<APP_BASE>/fleet

最後に、変更したホスト、設定したオプション製品、アプリケーションのログソースやトレーシングの計装に関して残っている作業を正確に要約してください。

コメント