Datadog Fundamentals 認定 / 03 / 06

ネットワークと Agent の設定

このドメインで学ぶこと

このドメインでは、Datadog Agent がどの向きに、どの宛先へ、どのポートで通信するかを理解し、制約のあるネットワークで Agent を確実に動かす知識を身につけます。前半は Agent から Datadog へ一方向に開始される SSL 通信、サイトごとの宛先ドメインと ip-ranges による許可リスト、443/TCP や 123/UDP などの外向きポート、8125/UDP などのホスト内ポート、プロキシ設定を扱います。後半は、コンテナが移動する環境で監視対象を自動で見つける Autodiscovery を扱い、テンプレートの置き方、ad_identifiers による絞り込み、テンプレート変数、包含 / 除外ルールを学びます。試験では「許可リストに何を登録するか」「どのポートを何のために開けるか」「テンプレートをどこに書くか」という実務判断の形で問われます。

公式ガイドの内容範囲

  • Datadog が使うポート
  • IP アドレス (許可リスト)
  • Autodiscovery

重要ポイント

  • Agent の通信は常に Agent 側から Datadog へ開始され、Datadog から Agent へセッションが開かれることは無い。全通信は SSL で送られる。
  • メトリクスの宛先は <VERSION>-app.agent.<サイト> の形なので、ファイアウォールには *.agent.<サイト> をワイルドカードで登録する。
  • 宛先ドメインは静的 IP 群への CNAME で、一覧は https://ip-ranges.<サイト> の JSON。一部しか使わなくても全範囲を許可リストに入れる。
  • 外向き通信の大半は 443/TCP。NTP の時刻同期は 123/UDP で、塞ぐと時刻ずれの警告やメトリクスのタイムスタンプの異常につながる。
  • ホスト内の既定ポートは DogStatsD 8125/UDP、APM 8126/TCP、IPC 5001/TCP、GUI 5002/TCP。datadog.yaml で変更可。
  • DogStatsD は既定で 127.0.0.1 のみ待ち受ける。別コンテナや別ホストから受けるには dogstatsd_non_local_traffic を true にする。
  • プロキシは datadog.yaml の proxy 節か DD_PROXY_HTTPS 等の環境変数で設定し、環境変数が優先。変更後は Agent を再起動する。
  • Autodiscovery はコンテナの起動 / 停止イベントを監視し、ad_identifiers が一致したコンテナにテンプレート変数を置換した静的設定を生成する。
  • テンプレートは pod アノテーション、Docker ラベル、マウントした conf.d のファイル、ConfigMap、key-value ストアのいずれにも置ける。
  • コンテナの除外 / 包含は DD_CONTAINER_EXCLUDE / INCLUDE に接頭辞付きの正規表現で書き、原則 include が exclude より優先される。

用語と概念

外向き通信の向きとポート

Agent の通信は必ず Agent 側から Datadog へ開始され、Datadog から Agent へ接続が開かれることは無いため、ファイアウォールでは外向きの許可だけを考えます。全トラフィックは SSL で、Agent 本体、APM、コンテナ、Live Process、メトリクスなど大半は 443/TCP を使います。加えて NTP の時刻同期に 123/UDP が使われ、塞ぐと時刻ずれの警告やタイムスタンプの異常につながります。ログの TCP 送信は配信保証が無く非推奨で、HTTP 経由が推奨です。宛先は契約サイト (US1 / EU など) で変わります。

宛先ドメインと許可リスト

宛先はデータ種別で異なります。メトリクス・サービスチェック・イベントは <VERSION>-app.agent.<サイト> (例 7-31-0-app.agent.<サイト>)、flare は <VERSION>-flare.agent.<サイト> へ送るため、ファイアウォールには *.agent.<サイト> をワイルドカードで登録します。APM は trace.agent.<サイト>、プロセスは process.<サイト>、API キーの有効性確認は api.<サイト> です。インストール時は install.datadoghq.com や apt / yum のリポジトリも許可します。

ip-ranges (静的 IP アドレスの公開)

宛先ドメインはすべて静的 IP 群を指す CNAME です。IP で許可リストを書く環境向けに、https://ip-ranges.<サイト> で JSON の一覧が公開されています。JSON は agents / api / apm / logs / process などのセクションに分かれ、IPv4 と IPv6 の CIDR を持ち、/apm.json のようにセクション単位でも取得できます。使うのは一部でも保守で入れ替わるため、全範囲を登録するのが公式の案内です。webhooks や synthetics は Datadog 側の送信元 IP で、Agent には不要です。

ホスト内ポート (Inbound) と変更方法

Agent はホスト内で複数のポートを待ち受けます。既定は DogStatsD 8125/UDP、APM レシーバー 8126/TCP、IPC API 5001/TCP、go_expvar 5000/TCP、ブラウザ GUI 5002/TCP で、衝突時は datadog.yaml の dogstatsd_port、receiver_port、cmd_port、expvar_port、GUI_port で変更します。GUI_port は -1 で無効化でき、Linux の既定は -1 です。DogStatsD や APM のポートを変えたら、送信側の設定も合わせる必要があります。

dogstatsd_non_local_traffic

DogStatsD の 8125/UDP は既定で IPv4 のローカルホスト 127.0.0.1 のみで待ち受けます。同じホストのアプリからは届きますが、別コンテナや別ホストから送るには datadog.yaml の dogstatsd_non_local_traffic を true にするか、環境変数 DD_DOGSTATSD_NON_LOCAL_TRAFFIC=true を設定します。コンテナ環境で「カスタムメトリクスが届かない」相談の多くはこれが原因です。同時に、信頼できないネットワークから Agent へ到達できないよう、アクセス元を制限することが公式に求められています。

プロキシ設定

外へ直接出られないホストでは Agent をプロキシ経由で送信させます。設定は datadog.yaml の proxy 節 (http / https / no_proxy) か環境変数 DD_PROXY_HTTPS などで行い、環境変数が優先されます。変更後は Agent の再起動が必要です。no_proxy は既定で完全一致のため、no_proxy_nonexact_match を true にするのが推奨です。プロキシは Squid が推奨で、HAProxy や NGINX はドメイン一覧の手動保守が要り非推奨です。

Autodiscovery の仕組み

コンテナはホスト間を移動し IP も変わるため、静的なチェック設定では監視が追いつきません。Autodiscovery は、チェックのテンプレートと適用先の識別子を事前に定義し、Agent がコンテナの作成・起動・停止・破棄のイベントを監視して、一致したコンテナごとにテンプレート変数を実値で置き換えた静的設定を生成・有効化・無効化する仕組みです。Agent は Docker や containerd、Kubernetes API のソケットを自動検出して有効化し、状況は agent status で確認できます。Apache や Redis には自動設定テンプレートが同梱されています。

インテグレーションテンプレートの置き方

Kubernetes では pod アノテーション ad.datadoghq.com/<コンテナ名>.checks に JSON でチェック設定をまとめて書き (7.36 以降の v2 形式)、ログは .logs に書きます。Docker では com.datadoghq.ad.checks ラベルを使います。ほかに、Agent にマウントした conf.d/<名前>.d/conf.yaml に ad_identifiers 付きで書く方法、ConfigMap、key-value ストアがあります。ファイル方式は変更のたびに Agent コンテナの再起動が必要です。

ad_identifiers とテンプレート変数

ad_identifiers は適用先コンテナの識別子で、既定ではイメージの短い名前 (例: httpd) と照合します。短い名前はレジストリやタグを区別せず、foo/httpd:latest と bar/httpd:v2 の両方に当たります。同じイメージに別設定を当てるには Docker ラベル com.datadoghq.ad.check.id 等でカスタム識別子を付け、これはイメージ名より優先されます。変数は %%host%% がコンテナの IP、%%port%% が公開ポートの数値昇順で最大、%%env_<変数名>%% が Agent から見た環境変数です。

コンテナの包含と除外

既定では全コンテナを監視します。範囲を絞るには環境変数 DD_CONTAINER_EXCLUDE / DD_CONTAINER_INCLUDE に name / image / kube_namespace の正規表現を書きます。include が exclude より優先されるため「image:.* で全除外し、必要なイメージだけ include」が定石です。ただし pod アノテーション ad.datadoghq.com/exclude: true は include より強く、グローバル除外は個別 include で戻せません。pause コンテナは既定で除外されます。

理解度チェック

学んだ内容を 5 問で確認します