はじめに
Datadogのメトリクスやログは統合タグ付けを設定すると、関係するデータ間を自動的にリンクしてくれるのでとても使いやすいのですが、統合タグ付けが設定されていないデータもダッシュボードのContext Linkを設定することで行き来することができます。
今回はこの頃AWSで強化された下記のメトリクスをカスタムメトリクスとしてDatadogに連携したのち、作成したダッシュボードからCloudWatch Logsに連携するようにContext Linkを設定してみます。
オブザーバビリティーが強化されたContainer Insight
2024年12月に公開された改善で、EKSではすでに提供されていたコンテナレベルのメトリクスをECSでも利用できるようにした改善です。これまでもCloudWatch Logsに出力されたContainer Insightのログを集計すれば同様の情報は手に入ったのですが、メトリクスとして提供されることでECSのサービスに含まれるタスクやコンテナごとのメトリクスを簡単に視覚化することができるようになりました。
Datadogには似たような(ほぼ同じ)機能としてライブコンテナがあるのですが、こちらはFargateとのインテグレーションが設定されたサービスのみ表示されるのと、表示できる期間が36時間と短いので注意が必要です。
ContainerInsightで収集できるメトリクス
下のキャプチャはAWS側でオブザーバビリティーが強化されたContainer Insightを有効にしていないテナントと、有効にしたテナントで流れてきたメトリクスサマリーをContainer Insightという文字でフィルタした例です。
タスクごとやコンテナごとのCPU、メモリ、ネットワーク、ストレージアクセスなどの情報を取得できるようになったことがわかります。
下のグラフはecs.containerinsights.ContainerCpuUtilized
をサービス、タスク、コンテナごとのCPU利用率を表示した例です。
このメトリクスを使うと、Fargateとのインテグレーションを設定していないタスクについてもコンテナレベルのメトリクスをDatadogへ表示できるようになります。また、メトリクスとして取り込まれたデータはAPIクローラーが収集したデータとして15か月保存されるので、これまでよりもかなり長い期間表示することができます。
Context Menuを追加する
これだけでもだいぶうれしいのですが、せっかくDatadogを利用しているので、ダッシュボードにContext Linkを作成してグラフからCloudWatch Logs Insightのクエリへ移動できるようにしてみましょう。
ダッシュボードにコンテナごとのCPU利用率を表示する
コンテナごとのCPU利用率はecs.containerinsights.ContainerCpuUtilized
メトリクスで提供されるので、コンテナごとのCPU利用率をグラフに表示させたい場合次のようなグラフを作成します。
DatadogのダッシュボードからCloudWatch Logs Insightに連携する
DatadogのダッシュボードからDatadogにログの連携をしていないコンテナのログをCloudWatch Logs Insightで検索するには、次のようにグラフを設定します。
CloudWatch Logs Insightでログを検索するクエリとURLから確認していきます。
ECSではawslogsログドライバーでCloudWatch Logsにログを出力する場合、LogStream名はawslogs-stream-prefix
/コンテナの名前
/タスク ID
というルールで設定されます。
例えば、awslogs-stream-prefixを標準のecs
にした場合、特定のタスク(7ab9a90e0f6axxxxxxxxxxxxxxxxxxx)に含まれるapp
コンテナのログを検索するCWL Insightのクエリは次のようになります。
filter @logStream = 'ecs/app/7ab9a90e0f6axxxxxxxxxxxxxxxxxxx'
| fields @timestamp, @logStream, @message
ロググループMyApp
に対し直近60分間のログを対象に検索する場合、CWL InsightのURLは次のようになります(見やすくするため改行を追加していますが本来は1行のURLです)。
https://ap-northeast-1.console.aws.amazon.com/cloudwatch/home?region=ap-northeast-1
#logsV2:logs-insights$3F
queryDetail$3D~(end~0~start~-3600~timeType~'RELATIVE~tz~'LOCAL~unit~'seconds~
editorString~'
filter*20*40logStream*20*3d*20*27ecs*2fapp*2f7ab9a90e0f6axxxxxxxxxxxxxxxxxxx*27*0a*
7c*20fields*20*40timestamp*2c*20*40logStream*2c*20*40message
~source~(~'*2fecs*2fMyApp)~lang~'CWLI)
コンテナのタスクIDは{{taskid.value}}で参照できるので、コンテキストリンクのURLは次のようになります。
https://ap-northeast-1.console.aws.amazon.com/cloudwatch/home?region=ap-northeast-1
#logsV2:logs-insights$3F
queryDetail$3D~(end~0~start~-3600~timeType~'RELATIVE~tz~'LOCAL~unit~'seconds~
editorString~'
filter*20*40logStream*20*3d*20*27ecs*2fapp*2f{{taskid.value}}*27*0a*
7c*20fields*20*40timestamp*2c*20*40logStream*2c*20*40message
~source~(~'*2fecs*2fMyApp)~lang~'CWLI)
Context Linksの+ Add a Context Link
をクリックしメニューを追加します。
適当に名前を付け、URLにはCWL InsightのクエリURLを設定します。
メトリクスをクリックすると、設定した値でコンテキストリンクが表示されます。
クリックすると、CWL Insightに移動しそのまま検索できます。
おわりに
DatadogのダッシュボードでAWSのカスタムメトリクスを表示すると、関連するデータへのリンクを簡単に追加することができるようになります。最初はダッシュボードをカスタマイズするというと少し難しく感じますが設定してみると意外と簡単にできるのでぜひ試してみてください。