Datadog APM の Infrastructure が表示されないの何故
まずはDatadog APMダッシュボード(下図)を見て、APMダッシュボードのインフラ欄に[N/A]が表示されてサーバー・メトリックスを可視化できないのはちょっと寂しい。これは、DatadogエージェントとAPMのDatadogトレーサーのタグが一致していないことが原因。タグが一致していれば六角形のアイコンが表示される。インフラ側のタグ命名ルールとアプリ側のタグ命名ルールを決めておかないと、あとで困ることになる。
悩んだこと
Datadog APM の Infrastructure は3つの予約済みタグで関連付けすることができる。[service][env][version]の3つ。サーバー1台にアプリ1個の場合は3つのタグを全て一致させればサーバーのメトリックスが表示される。しかし、サーバー1台に2個以上のアプリを実行する場合はどうやってタグを一致させればよいのかわからなかった。いくつかのパターンを検証したので以下にコンフィグ例を記載する。
コンフィグ設定(1:1)
サーバー1台にアプリ1個のシンプルな構成の場合は図の通り。
▼ Datadogエージェントのコンフィグ例
tags:
- service:diary
- env:prod
- version:3.0
▼ Datadogトレーサーのコマンド例(node.js)
#!/bin/bash
export DD_SERVICE=diary
export DD_ENV=prod
export DD_VERSION=3.0
node -r dd-trace/init app.js
コンフィグ設定(1:N)
サーバー1台に複数アプリN個の場合は図の通り。Datadogエージェントのコンフィグに、複数のタグ名を追加してもいいんだという知見ノウハウ。タグ名は1回しか使えないのかと思ってた。けれど公式ドキュメントが見つかりません。
▼ Datadogエージェントのコンフィグ例
tags:
- service:diary
- service:requests
- service:minecraft
- env:prod
- version:3.0
▼ Datadogトレーサー1のコマンド例(node.js)
#!/bin/bash
export DD_SERVICE=diary
export DD_ENV=prod
export DD_VERSION=3.0
node -r dd-trace/init app.js
▼ Datadogトレーサー2のコマンド例(python)
export DD_SERVICE=requests
export DD_ENV=prod
export DD_VERSION=3.0
ddtrace-run python3 heatrun.py
▼ Datadogトレーサー3のコマンド例(java)
sudo java \
-Ddd.service=minecraft \
-Ddd.env=prod \
-Ddd.version=3.0 \
-javaagent:/home/kano/dd-java-agent.jar \
-Xmx2G -Xms1G -jar /opt/minecraft-server/server.jar nogui &
アプリのバージョンを変更する時
アプリをアップデートするとき、アプリを起動するDatadogトレーサーのタグを変更するだろうけど、このときDatadogエージェントのコンフィグを変更しないとどうなるのか検証した。それぞれの組み合わせの図とタグだけ記載し、説明やコンフィグ例は割愛する。
diaryアプリ ver.3をメジャーバージョンアップして、diary2 ver.4をリリースするシナリオを想定
▼ まずは失敗例から。service, versionタグが一致しない。
▼ これも失敗例。serviceタグを追加したが、versionタグが一致しない。
▼ 成功例。公式ドキュメントに見つからないけれど、タグ名が重複しても機能しているようだ。
以上