コンテンツにスキップ

テレメトリー間の紐付け@Datadog

はじめに

本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。


01. タグ

タグの種類

タグ名 説明
host メトリクス、ログ、分散トレースの送信元のホスト名を示す。テレメトリーが作成元とは別の場所から受信した場合に役立つ。
device
source ログの作成元のベンダー名を示す。
service メトリクス、ログ、分散トレースの作成元のアプリケーション名を示す。
env メトリクス、ログ、分散トレースの作成元の実行環境名 (dev、stg、prd) を示す。
version メトリクス、ログ、分散トレースの作成元のリリースバージョンを示す。


統合タグ付け

統合タグ (serviceenvversion) に同じ値を割り当てると、テレメトリー間を紐付けられる。


各コンソール画面での使い方

記入中...


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 ➡︎ orderorder-service ✕:laravel ➡︎ order-laravelorder-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

もし、webappといった役割名をタグとして付与したい場合は、roleタグを新たに作成すると良いかも。


02. 構造化ログと他テレメトリー間の紐付け

分散トレース全体との紐付け

スパンと構造化ログの統合タグ (serviceenvversion) に同じ値を割り当てると、分散トレース全体と構造化ログ間を紐付けられる。


スパンとの紐付け

スパンと構造化ログに、同じトレースIDとスパンIDを割り当てると、スパンと構造化ログ間を紐付けられる。

これにより、その構造化ログが、いずれのマイクロサービスで、またどのタイミングで発生したものかを確認できる。

datadog_trace-viewer


03. メトリクスと他テレメトリー間の紐付け

仮想環境のメトリクスとの紐付け

スパンとコンテナのDockerラベルの統合タグ (serviceenvversion) に、同じ値を割り当てると、分散トレースと仮想環境のOSに関するメトリクスを紐付けられる。