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

概要

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

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

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

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

UDS の仕組み

オートディスカバリーの概要

上の図では、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.checks: |
    {
      "redisdb": {
        "init_config": {},
        "instances": [
          {
            "host": "%%host%%",
            "port":"6379",
            "password":"%%env_REDIS_PASSWORD%%"
          }
        ]
      }
    }    
  ad.datadoghq.com/redis.logs: '[{"source":"redis"}]'

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

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

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 は、到達可能なソケットや API エンドポイント (Docker、containerd、Kubernetes APIなど) を自動的に検出するだけでなく、オートディスカバリーを有効化することも可能です。

オートディスカバリーが機能しない場合、agent status を実行して検出された機能を確認します。

自動検出に失敗した場合や、自動検出した機能を無効にしたい場合は、datadog.yaml に以下の構成パラメーターを記述して、機能を含めたり外したりすることができます。

autoconfig_exclude_features:
- docker
autoconfig_include_features:
- containerd

自動的に検出された機能の完全なリストは datadog.yaml テンプレートで利用できます。

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

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

インテグレーションテンプレートは、Kubernetes ポッドアノテーション、Docker ラベル、Agent 内にマウントされた構成ファイル、ConfigMap、および key-value ストアとして、複数の形式で定義できます。詳しくは、オートディスカバリーインテグレーションテンプレートのドキュメントをご覧ください。

オートディスカバリーを使用していて、アプリケーションが新しいノードにデプロイされた場合、Datadog にメトリクスが表示されるのが遅れることがあります。新しいノードに切り替えると、Datadog Agent がアプリケーションからメタデータを収集するのに時間がかかります。

その他の参考資料