Datadog Agent でログを CloudPrem に送信する

This product is not supported for your selected Datadog site. ().
CloudPrem は Preview 版です

CloudPrem Preview に参加すると、新しいセルフ ホスト型のログ管理機能を利用できます。

Request Access

概要

このドキュメントでは、Datadog Agent を使って Datadog CloudPrem デプロイメントにログを送信するための設定手順を説明します。Datadog の SaaS プラットフォームとは異なり、CloudPrem では、必要なホスト レベルのタグをログに付与し、正しいエンドポイントに送信できるようにするため、Agent 側で特定の設定が必要です。このガイドでは、代表的なデプロイ方法ごとに、それらの設定方法を紹介します。

重要な要件

Datadog Agent から CloudPrem にログを送信するには、次の 2 つの環境変数を設定する必要があります:

DD_LOGS_CONFIG_LOGS_DD_URL
これを CloudPrem の indexer エンドポイントに設定します。通常は http://<RELEASE_NAME>-indexer.<NAMESPACE_NAME>.svc.cluster.local:7280 です。これにより、Agent にログの送信先を知らせます。
DD_LOGS_CONFIG_EXPECTED_TAGS_DURATION
(任意) 任意の設定ですが、強く推奨されます。“100000” (約 5 年) のような大きな値を設定してください。これにより、Agent は送信するすべてのログにホスト レベルのタグを付与します。Datadog の SaaS プラットフォームでは、これらのタグはログ取り込み後に自動で付与されますが、CloudPrem では Agent 側であらかじめ付与しておく必要があります。

プロキシ

Datadog Agent がプロキシを利用するよう設定されていて、CloudPrem が内部ネットワーク上に配置されている場合は、Agent がプロキシを経由せずに CloudPrem へ直接ログを送信できるよう、no_proxy を設定する必要があります。

# no_proxy セクションで、CloudPrem DNS を追加
no_proxy:
 - http://<RELEASE_NAME>-indexer.<NAMESPACE_NAME>.svc.cluster.local:7280

加えて、DD_NO_PROXY_NONEXACT_MATCH を true に設定する必要があります。詳しくは、Datadog Agent のプロキシ設定 を参照してください。

Datadog Operator で Kubernetes のログを送信する

Datadog Operator を使って Kubernetes に Agent をデプロイする場合は、Datadog Operator 入門 の手順に従ってください。手順 3 まで進んだら、ガイド内の例の代わりに次の datadog-agent.yaml 構成を使用します。

apiVersion: datadoghq.com/v2alpha1
kind: DatadogAgent
metadata:
  name: datadog
spec:
  global:
    clusterName: <CLUSTER_NAME>
    site: datadoghq.com
    credentials:
      apiSecret:
        secretName: datadog-secret
        keyName: api-key
    env:
      - name: DD_LOGS_CONFIG_LOGS_DD_URL
        value: http://<RELEASE_NAME>-indexer.<NAMESPACE_NAME>.svc.cluster.local:7280
      - name: DD_LOGS_CONFIG_EXPECTED_TAGS_DURATION
        value: "100000"

  features:
    logCollection:
      enabled: true
      containerCollectAll: true

    otlp:
      receiver:
        protocols:
          grpc:
            enabled: true
            endpoint: 0.0.0.0:4417

    prometheusScrape:
      enabled: true
      enableServiceEndpoints: true

設定オプション

エンドポイントの設定

Datadog Agent は、用途に応じて異なるエンドポイントを使って CloudPrem にログを送信するよう設定できます。

クラスター内で動作する Agent に推奨されます:

DD_LOGS_CONFIG_LOGS_DD_URL=http://<RELEASE_NAME>-indexer.<NAMESPACE_NAME>.svc.cluster.local:7280

クラスター外で動作する Agent 向け:

DD_LOGS_CONFIG_LOGS_DD_URL=https://cloudprem-internal.your-domain.com

追加の Agent 設定

必要に応じて、クラスターのメタ データを Datadog に送信するための追加機能も設定できます。

features:
  prometheusScrape:
    enabled: true
    enableServiceEndpoints: true

Agent のログを Datadog に送信するには:

features:
  otlp:
    receiver:
      protocols:
        grpc:
          enabled: true
          endpoint: 0.0.0.0:4417

別のデプロイ方法

Datadog Operator を使わない場合でも、次の一般的な方法で Agent をデプロイできます。

Helm チャートによるデプロイ

Helm チャートを使って Agent をデプロイするには、次のコマンドを実行します。ログ送信に必要な環境変数も、この場で直接設定します。

helm install datadog-agent datadog/datadog \
  --set datadog.apiKey=<YOUR_API_KEY> \
  --set datadog.logs.enabled=true \
  --set datadog.logs.containerCollectAll=true \
  --set datadog.logsConfigContainerCollectAll=true \
  --set agents.containers.agent.env[0].name=DD_LOGS_CONFIG_LOGS_DD_URL \
  --set agents.containers.agent.env[0].value=http://<RELEASE_NAME>-indexer.<NAMESPACE_NAME>.svc.cluster.local:7280

DaemonSet によるデプロイ

カスタム デプロイでは、DaemonSet に環境変数を設定します:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: datadog-agent
spec:
  template:
    spec:
      containers:
      - name: agent
        image: gcr.io/datadoghq/agent:latest
        env:
        - name: DD_API_KEY
          value: <YOUR_API_KEY>
        - name: DD_LOGS_ENABLED
          value: "true"
        - name: DD_LOGS_CONFIG_CONTAINER_COLLECT_ALL
          value: "true"
        - name: DD_LOGS_CONFIG_LOGS_DD_URL
          value: "http://<RELEASE_NAME>-indexer.<NAMESPACE_NAME>.svc.cluster.local:7280"

確認

Agent のデプロイ後、ログが正しく送信され、受信されていることを確認できます。

Agent の状態を確認する

kubectl exec を使って Agent の状態を確認し、ログ送信の設定が正しく反映されていることを確かめます。

# Agent の状態とログ設定を確認する
kubectl exec -it <datadog-agent-pod> -- agent status | grep -A 10 "Logs Agent"

# CloudPrem への接続に関する Agent ログを確認する
kubectl logs <datadog-agent-pod> | grep -i cloudprem

ログが CloudPrem でインデックス化されていることを確認する

次のコマンドを実行して CloudPrem の searcher にクエリを送り、JSON ログがインデックス化されていることを確認します。

kubectl exec -it <RELEASE_NAME>-searcher-0 -n <NAMESPACE_NAME> -- curl 'http://localhost:7280/api/v1/datadog/search?query='

トラブルシューティング

Agent がログを送信しない:

  • DD_LOGS_CONFIG_LOGS_DD_URL 環境変数が正しく設定されているか確認します
  • Agent Pod のログを確認します: kubectl logs <datadog-agent-pod>
  • ログ収集が有効になっていることを確認します: DD_LOGS_ENABLED=true

CloudPrem がログを受信しない:

  • CloudPrem の indexer ログを確認します: kubectl logs -n <NAMESPACE_NAME> -l app=<RELEASE_NAME>-indexer
  • Agent と CloudPrem indexer の間のネットワーク接続を確認します
  • CloudPrem のサービスが稼働していることを確認します: kubectl get pods -n <NAMESPACE_NAME>

参考資料