テレメトリー間の紐付け@Datadog¶
はじめに¶
本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。
01. タグ¶
タグの種類¶
タグ名 | 説明 |
---|---|
host |
メトリクス、ログ、分散トレースの送信元のホスト名を示す。テレメトリーが作成元とは別の場所から受信した場合に役立つ。 |
device |
|
source |
ログの作成元のベンダー名を示す。 |
service |
メトリクス、ログ、分散トレースの作成元のアプリケーション名を示す。 |
env |
メトリクス、ログ、分散トレースの作成元の実行環境名 (dev、stg、prd) を示す。 |
version |
メトリクス、ログ、分散トレースの作成元のリリースバージョンを示す。 |
統合タグ付け¶
統合タグ (service
、env
、version
) に同じ値を割り当てると、テレメトリー間を紐付けられる。
各コンソール画面での使い方¶
記入中...
01-02. 命名規則例¶
分散トレースのタグ¶
▼ セットアップ¶
分散トレースのクライアントパッケージを導入したコンテナの環境変数で値を設定する。
{
"environment":
[
{"name": "DD_ENV", "value": "prd"},
{"name": "DD_SERVICE_NAME", "value": "order"},
{"name": "DD_SERVICE_MAPPING", "value": "pdo:order-eloquent"},
{"name": "DD_VERSION", "value": "1.0.0"},
],
...,
}
▼ service¶
スパンの作成元のアプリケーション名を表す。
規則 | 例 |
---|---|
<マイクロサービス名>-<フレームワーク名/パッケージ名> |
・order-pdo ・ order-phpredis ・ order-eloquent ・ order-doctrine |
ただし、フレームワークのインテグレーション名は接尾辞を付けずに、単に『<マイクロサービス名>
』とする。
なぜ接尾辞を付けないかというと、分散トレースと他のテレメトリーを紐付ける時に、同じマイクロサービス名をタグに使用しなければならないためである。
〇:laravel
➡︎ order
、order-service
✕:laravel
➡︎ order-laravel
、order-service-laravel
フレームワーク以外のパッケージなどの分散トレースに関しては、紐付けられないことを許容している。
APMのservice名とAWS ECSタスク/ログのserviceタグは、名前の付け方が異なることに注意する。
service名はインテグレーション名が自動的に割り当てられるが、パッケージに環境変数を渡して変更もできる。
フレームワークのインテグレーション名は DD_SERVICE_NAME
から設定する一方で、それ以外のタグ名は DD_SERVICE_MAPPING
から設定する。
▼ env¶
スパンの作成元の実行環境名を表す。
envタグは、datadogコンテナの環境変数を使用してタグ付けする。
規則 | 例 |
---|---|
<実行環境名> |
・prd ・ stg ・ tes ・ dev |
▼ version¶
リリース時のタグのバージョンを表す。
ただし、リリースの度に変更することが面倒なため、1.0.0
で固定する。
規則 | 例 |
---|---|
<リリースタグのバージョン> |
1.0.0 |
AWS ECSコンテナのタグ¶
▼ セットアップ¶
Dockerラベルからタグ付けする。
▼ env¶
AWSの実行環境名を表す。
規則 | 例 |
---|---|
<実行環境名> |
・prd ・ stg ・ tes ・ dev |
▼ service¶
コンテナのアプリケーション名を表す。
規則 | 例 |
---|---|
<マイクロサービス名> |
・order-service ・ account-service |
▼ version¶
リリース時のタグのバージョンを表す。
ただし、リリースの度に変更することが面倒なため、1.0.0
で固定する。
規則 | 例 |
---|---|
<リリースタグのバージョン> |
1.0.0 |
ログのタグ¶
▼ セットアップ¶
FluentBitの設定ファイルからタグ付けする。
▼ env¶
ログの作成元の実行環境名 (dev、stg、prd) を表す。
規則 | 例 |
---|---|
<実行環境名> |
・prd ・ stg ・ tes ・ dev |
▼ service¶
ログの作成元のアプリケーション名を表す。
規則 | 例 |
---|---|
<マイクロサービス名> |
・order ・ order-service ・ account ・ account-service |
▼ source¶
ログの作成元のベンダー名を表す。
規則 | 例 |
---|---|
<ソース名> |
・laravel ・ nginx ・ apigateway |
タグの候補¶
▼ role¶
もし、web
やapp
といった役割名をタグとして付与したい場合は、role
タグを新たに作成すると良いかも。
02. 構造化ログと他テレメトリー間の紐付け¶
分散トレース全体との紐付け¶
スパンと構造化ログの統合タグ (service
、env
、version
) に同じ値を割り当てると、分散トレース全体と構造化ログ間を紐付けられる。
スパンとの紐付け¶
スパンと構造化ログに、同じトレースIDとスパンIDを割り当てると、スパンと構造化ログ間を紐付けられる。
これにより、その構造化ログが、いずれのマイクロサービスで、またどのタイミングで発生したものかを確認できる。
03. メトリクスと他テレメトリー間の紐付け¶
仮想環境のメトリクスとの紐付け¶
スパンとコンテナのDockerラベルの統合タグ (service
、env
、version
) に、同じ値を割り当てると、分散トレースと仮想環境のOSに関するメトリクスを紐付けられる。