Datadog Agent 6 以降は、コンテナからログを収集します。2 通りのインストレーション方法があります。
ログ収集の構成は、現在の環境によって異なります。開始するには、次のいずれかのインストールを選択してください。
ご使用の環境がすべてのログを stdout
/stderr
に書き込む場合は、コンテナ化された Agent のインストールに従ってください。
コンテナ化された Agent をデプロイできず、コンテナがすべてのログを stdout
/stderr
に書き込む場合は、ホスト Agent のインストールに従って、Agent コンフィギュレーションファイル内でコンテナ化されたログを有効にします。
コンテナがログをファイルに書き込む場合 (ログを stdout
/stderr
に部分的にのみ書き込み、ログをファイルに書き込むか、ログをファイルに完全に書き込む)、カスタムログ収集を使用するホスト Agent のインストールに従ってください。
Datadog Agent を埋め込みホストを監視する Docker コンテナ を実行するには、次のコマンドを使用します。
docker run -d --name datadog-agent \
-e DD_API_KEY="<DATADOG_API_KEY>" \
-e DD_LOGS_ENABLED=true \
-e DD_LOGS_CONFIG_CONTAINER_COLLECT_ALL=true \
-e DD_CONTAINER_EXCLUDE="name:datadog-agent" \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
-v /proc/:/host/proc/:ro \
-v /opt/datadog-agent/run:/opt/datadog-agent/run:rw \
-v /sys/fs/cgroup/:/host/sys/fs/cgroup:ro \
gcr.io/datadoghq/agent:latest
注: Windows システムでは、このコマンドをボリュームマウントなしで実行します。つまり以下のようになります。
docker run -d --name datadog-agent \
-e DD_API_KEY="<DATADOG_API_KEY>" \
-e DD_LOGS_ENABLED=true \
-e DD_LOGS_CONFIG_CONTAINER_COLLECT_ALL=true \
-e DD_CONTAINER_EXCLUDE="name:datadog-agent" \
-v \\.\pipe\docker_engine:\\.\pipe\docker_engine \
gcr.io/datadoghq/agent:latest
最新版の Datadog Agent の使用が推奨されます。GCR で利用できる Agent v6 のイメージリストを参照してください。
ログ収集に関連するコマンド:
コマンド | 説明 |
---|---|
-e DD_LOGS_ENABLED=true | true に設定すると、ログ収集が有効になります。Agent は構成ファイルのログ命令を探します。 |
-e DD_LOGS_CONFIG_CONTAINER_COLLECT_ALL=true | すべてのコンテナのログ収集を有効にするログコンフィギュレーションを追加します。 |
-v /opt/datadog-agent/run:/opt/datadog-agent/run:rw | 再起動の際やネットワークで問題が生じた際でもコンテナログを紛失しないよう、このディレクトリ内の各コンテナのために収集された最後のログ行は、ホストに保存されます。 |
-e DD_CONTAINER_EXCLUDE="name:datadog-agent" | Datadog Agent が自身のログやメトリクスを収集したり送信するのを防ぎます。Datadog Agent ログやメトリクスを収集したい場合は、このパラメータを削除します。このパラメーター値は正規表現をサポートしています。 |
-v /var/run/docker.sock:/var/run/docker.sock:ro | ログは Docker ソケットの stdout/stderr コンテナから収集されます。 |
最新バージョンの Agent をホストにインストールします。
デフォルトの状態では、Datadog Agent でのログ収集は 無効 になっています。有効にするには、datadog.yaml
構成ファイルに次の行を加えます。
logs_enabled: true
listeners:
- name: docker
config_providers:
- name: docker
polling: true
logs_config:
container_collect_all: true
Agent を再起動し、Datadog のすべてのコンテナログを確認します。
最新バージョンの Agent をホストにインストールします。
カスタムログ収集のドキュメントに従って、ログのファイルを調整します。
<PATH_LOG_FILE>/<LOG_FILE_NAME>.log
に保存されているログを <APP_NAME>
アプリケーションから収集するには、Agent のコンフィギュレーションディレクトリのルートに以下の内容の <APP_NAME>.d/conf.yaml
ファイルを作成します。
logs:
- type: file
path: "<PATH_LOG_FILE>/<LOG_FILE_NAME>.log"
service: "<APP_NAME>"
source: "<SOURCE>"
Agent を再起動し、Datadog のすべてのコンテナログを確認します。
重要:
コンテナメタデータはカスタムログ収集では取得されないため、Agent はコンテナタグをログに自動的に割り当てません。カスタムタグを使用してコンテナタグを作成します。
Datadog Agent 6.8 以降では、source
や service
の初期値は short_image
タグの値となります。下で説明するように、ソースやサービスの値はオートディスカバリーで上書きすることができます。source
値をインテグレーション名に設定すると、ログをパースして関連情報を抽出するインテグレーション Pipelines がインストールされます。
コンテナ Stderr
からのログは Error
の状態がデフォルトとなります。
Docker のデフォルトである json-file ログドライバーではなく journald ログドライバーを使用する場合は、コンテナ環境の設定に関するドキュメント journald インテグレーションをご覧ください。フィルタリング対象のパラメーターについての詳細は、journald フィルターユニットのドキュメントを参照してください。
Datadog Agent 6.8 以降では、source
や service
の初期値は short_image
タグの値となります。これにより、Datadog は各コンテナのログソースを特定でき、対応するインテグレーションを自動的にインストールできます。
コンテナのショートイメージ名とカスタムイメージのインテグレーション名が一致しない場合があります。アプリケーションにふさわしい名前に上書きするには、Datadog オートディスカバリーや Kubernetes ポッドアノテーションまたはコンテナラベルを使います。
オートディスカバリーは、ファイルの種類に応じてラベルが以下の形式となることを前提とします。
Dockerfile に以下のLABEL
を追加します:
LABEL "com.datadoghq.ad.logs"='[<ログコンフィギュレーション>]'
docker-compose.yaml
ファイルに以下のラベルを追加します:
labels:
com.datadoghq.ad.logs: '["<LOGS_CONFIG>"]'
実行コマンドとして次のラベルを追加します:
-l com.datadoghq.ad.logs='[<ログコンフィギュレーション>]'
<LOG_CONFIG>
がログ収集コンフィギュレーションの場合、インテグレーション構成ファイルにあります。詳細は、ログ収集コンフィギュレーションを参照してください。
注: Datadog では、Dockerラベルを使い service
値を設定する際のベストプラクティスとして、統合サービスタグ付けの使用をお勧めしています。統合サービスタグ付けは env
、service
、version
の 3 つの標準タグを使用して、ログを含むすべての Datadog テレメトリーと結合します。ご使用環境で統合タグ付けを構成する方法に関する詳細は、統合サービスタグ付けドキュメントをご参照ください。
次の Dockerfile は対応するコンテナにおける NGINX ログインテグレーションを有効にします (service
の値は変更できます):
LABEL "com.datadoghq.ad.logs"='[{"source": "nginx", "service": "webapp"}]'
メトリクスとログ、両 NGINX インテグレーションを有効にする方法
LABEL "com.datadoghq.ad.check_names"='["nginx"]'
LABEL "com.datadoghq.ad.init_configs"='[{}]'
LABEL "com.datadoghq.ad.instances"='[{"nginx_status_url": "http://%%host%%:%%port%%/nginx_status"}]'
LABEL "com.datadoghq.ad.logs"='[{"source": "nginx", "service": "webapp"}]'
スタックトレースのような複数行のログのため、Agent には複数の行を 1 行に集約する複数行の処理規則があります。
ログの一例 (Java スタックトレース):
2018-01-03T09:24:24.983Z UTC Exception in thread "main" java.lang.NullPointerException
at com.example.myproject.Book.getTitle(Book.java:16)
at com.example.myproject.Author.getBookTitles(Author.java:25)
at com.example.myproject.Bootstrap.main(Bootstrap.java:14)
下にあるように、コンテナで com.datadoghq.ad.logs
ラベルを使い、上記のログが正確に収集されているかを確かめます。
labels:
com.datadoghq.ad.logs: '[{"source": "java", "service": "myapp", "log_processing_rules": [{"type": "multi_line", "name": "log_start_with_date", "pattern" : "\\d{4}-(0?[1-9]|1[012])-(0?[1-9]|[12][0-9]|3[01])"}]}]'
複数行の処理規則には、他にもさまざまなパターンが記載されています。
注: オートディスカバリー機能は、DD_LOGS_CONFIG_CONTAINER_COLLECT_ALL
環境変数の有無にかかわらず使用できます。次のオプションの中から 1 つを選択してください。
source
値と service
値を上書きします。オートディスカバリーログラベルを使用し、高度なログ収集の処理ロジックを適用します。たとえば、
ログの収集元となるコンテナを管理することができます。これは、たとえば Datadog Agent のログを収集しないようにするのに役立ちます。詳細についてはコンテナのディスカバリー管理を参照してください。
Docker 環境では、Agent は Docker イベントによりコンテナのアップデートをリアルタイムに受け取ります。Agent は 1 秒ごとにコンテナラベル(オートディスカバリー)からコンフィギュレーションを抽出しアップデートします。
Agent v6.14 以降、Agent はすべてのコンテナ(実行中かは問わず)のログを収集します。つまり、直近の 1 秒間に開始し停止した存続期間の短いコンテナのログは、削除されるまで収集されます。
Kubernetes 環境には、Kubernetes 存続期間が短いコンテナのドキュメントを参照してください。
このページ