基本の Agent オートディスカバリー
Dash が新機能を発表!インシデントマネジメント、Continuous Profiler など多数の機能が追加されました! Dash イベントで発表された新機能!

基本の Agent オートディスカバリー

概要

コンテナ化されたインフラストラクチャーを監視している場合に発生する課題として、コンテナがホストからホストに移動できることがあります。コンテナ化されたシステムの動的な性質により、手動での監視が困難になります。

この問題を解決するには、Datadog のオートディスカバリー機能を使用して、特定のコンテナで実行されているサービスを自動的に識別し、それらのサービスからデータを収集します。コンテナが起動するたびに、Datadog Agent はこの新しいコンテナで実行されているサービスを識別し、対応する監視構成を探して、メトリクスの収集を開始します。

オートディスカバリーを使用すると、Agent チェックの構成テンプレートを定義し、各チェックをどのコンテナに適用するかを指定できます。

Agent はコンテナの作成、廃棄、起動、停止などのイベントを監視します。次に Agent は、イベント発生時に静的チェック構成を有効化、無効化、または再生成します。Agent は、実行中のコンテナを調査する際に、ロードしたいずれかのテンプレートのいずれかのオートディスカバリーコンテナ識別子にそのコンテナが一致するかどうかをチェックします。一致が見つかると、Agent はそれぞれについて、一致したコンテナの特定の値をテンプレート変数に代入することにより、静的チェック構成を生成します。さらに、その静的構成を使用してチェックを有効にします。

オートディスカバリーの動作

上の図では、Redis ポッドと Agent ポッドを含む 3 つのポッドを持つホストノードがあります。コンテナをスケジュールする Kubelet は、このノードでバイナリとして実行され、エンドポイント /metrics/pods を公開します。10 秒ごとに、Agent は /pods をクエリし、Redis 仕様を見つけます。また、Redis ポッド自体に関する情報も表示できます。

この例の Redis 仕様には、次のアノテーションが含まれています。

labels:
  tags.datadoghq.com/redis.env: "prod"
  tags.datadoghq.com/redis.service: "my-redis"
  tags.datadoghq.com/redis.version: "6.0.3"
annotations:
  ad.datadoghq.com/redis.check_names: '["redisdb"]'
  ad.datadoghq.com/redis.init_configs: '[{}]'
  ad.datadoghq.com/redis.instances: |
    [
      {
        "host": "%%host%%",
        "port":"6379",
        "password":"%%env_REDIS_PASSWORD%%"
      }
    ]
  ad.datadoghq.com/redis.logs: '[{"source":"redis"}]'

上記の例では、tags.datadoghq.com ラベルは、Redis ポッドに発行されるすべてのログとメトリクスのタグとして envservice、さらには version を設定します。 これらの標準ラベルは、統合サービスタグ付けの一部です。ベストプラクティスとして、DatadogDatadog ではタグおよび環境変数の構成には統合サービスタグ付けを使用することをおすすめします。

check_names には実行するチェックの名前が含まれ、init_configs には最小収集間隔などの構成パラメーターが含まれます。instances の各項目は、チェックの 1 つのインスタンスに対して実行するコンフィギュレーションを表します。この例では、%%host%% はコンテナの IP が動的に入力されるテンプレート変数であることに注意してください。

これから、Agent は静的チェック構成を生成します。

セットアップ

インフラストラクチャーのオートディスカバリーを設定するには、次の 2 つの手順が必要です。

  1. Datadog Agent に対してオートディスカバリーを有効にします
  2. 監視するサービスごとにインテグレーション固有のコンフィギュレーションテンプレートを作成します。Datadog は、Apache や Redis を含むいくつかの一般的なコンテナ化されたサービスの自動コンフィギュレーションテンプレートを提供することに注意してください。

オートディスカバリーを有効にする

ホスト上の Agent で

datadog.yaml 構成ファイルに次の構成ブロックを追加します。

listeners:
  - name: docker
config_providers:
  - name: docker
    polling: true

datadog.yaml 構成ファイルに次の構成ブロックを追加します。

listeners:
  - name: kubelet
config_providers:
  - name: kubelet
    polling: true
  # 以前の Docker ラベル構成テンプレートをサポートするために必要
  - name: docker
    polling: true

ECS Fargate は、ホストでバイナリとして実行している Datadog Agent では監視できません。

コンテナとしての Agent で

Docker コンテナに対してオートディスカバリーを自動的に有効にするには、/var/run/docker.sock をコンテナ化 Agent にマウントします。Windows では、\\.\pipe\docker_engine をマウントします。

Kubernetes ではデフォルトでオートディスカバリーが有効になっています。

これを確認するには、次の環境変数が設定されていることを確認します。

KUBERNETES=yes

Kubernetes 内のコンテナに対してオートディスカバリーを有効にするには、コンテナ化 Agent を起動するときに次の環境変数を追加します。

ECS_FARGATE=true

インテグレーションテンプレート

オートディスカバリーが有効になると、Datadog Agent は、デフォルトのオートディスカバリーコンフィギュレーションファイルに基づいて、Apache や Redis を含む多くのサービスに対してオートディスカバリーを自動的に試行します。

インテグレーションテンプレートは、Kubernetes ポッドアノテーション、Docker ラベル、Agent 内にマウントされた構成ファイル、ConfigMap、および key-value ストアとして、複数の形式で定義できます。

次の例では、ポッドの envserviceversion データをタグ付けするために tags.datadoghq.com Kubernetes ラベルが使用されています。

Redis インテグレーションテンプレートは、Kubernetes ポッドアノテーションで定義されます。これには、カスタムの password パラメーターが含まれ、すべてのログに正しい source がタグ付けされます。

apiVersion: v1
kind: Pod
metadata:
  ## ポッドの名前
  name: my-redis
  labels:
    ## 統合サービスタグ付けに標準ラベルを設定
    tags.datadoghq.com/redis.env: prod
    tags.datadoghq.com/redis.service: my-redis
    tags.datadoghq.com/redis.version: "6.0.3"
  annotations:
    ## チェックの名前。integrations_core リポジトリの名前に一致
    ad.datadoghq.com/redis.check_names: '["redisdb"]'
    ## 最小収集間隔などのいくつかの構成
    ad.datadoghq.com/redis.init_configs: '[{}]'
    ad.datadoghq.com/redis.instances: |
      [
        ## チェックの 1 つのインスタンスに対して実行する構成
        {
          "host": "%%host%%",
          "port":"6379",
          "password":"%%env_REDIS_PASSWORD%%"
        }
      ]
    ## ログ収集のセットアップ
    ad.datadoghq.com/redis.logs: '[{"source":"redis"}]'
spec:
  containers:
    - name: redis
      image: httpd
      ports:
        - containerPort: 80

他のサービスでオートディスカバリーを使用するには、監視するサービスのテンプレートを定義します。詳細については、オートディスカバリーインテグレーションテンプレートのドキュメントを参照してください。

その他の参考資料