電通総研 テックブログ

電通総研が運営する技術ブログ

Datadog Logsにてホストタグが継承されない問題の原因と解決方法

こんにちは。X(クロス)イノベーション本部クラウドイノベーションセンターの柴田です。

本記事ではDatadog Logsにてホストタグが継承されない問題の原因と解決方法をご紹介します。

発生した問題

Amazon EKSクラスタ&マネージド型ノードグループを構築し、その上のPodのログをDatadog Logsで収集・管理していました。

あるとき一部のログに AWS Integration 関連のタグ( regionavailability-zoneautoscaling_group 、EC2インスタンスのタグなど)が付与されていないことがわかりました。

以下は期待通り先述のタグが付与されたログ(以降は正常なログと呼称)です。

{"msg":"structured log without host attribute"}

正常なログ

以下は期待に反して先述のタグが付与されなかったログ(以降は問題のあったログと呼称)です。
正常なログと比べてタグの件数が少ないことがわかります。

{"msg":"structured log with host attribute","host":"localhost"}

問題のあったログ

原因

先述の問題の原因は、問題のあったログの host 属性が誤って設定されたせいでした。

ログの host 属性について

Datadogの公式ドキュメント ではログの host 属性について以下のように説明しています。

メトリクスで定義された送信元ホストの名前。Datadog で一致したホストから、対応するホストタグが自動的に取得され、ログに適用されます。Agent では、この値が自動的に設定されます。

正常なログの場合

正常なログの host 属性の値はマネージド型ノードグループのEC2インスタンスインスタンスIDです。
そのため一致したホストのホストタグがログに適用されます。

正常なログ

ホスト

問題のあったログの場合

一方、問題のあったログの host 属性の値は localhost です。
Datadog上には localhost に一致するホストが存在しなかったため、ホストタグの継承が行われませんでした。

問題のあったログ

なぜログの host 属性の値はインスタンスIDではなく localhost だったのでしょうか?

Datadog Logsの PipelinePreprocessing for JSON logs は以下のとおり設定されています。
そのため、ログが

  • host
  • hostname
  • syslog.hostname

のいずれかの属性を含む構造化ログの場合、その値がログの host 属性として設定されます。

Preprocessing for JSON logs

問題のあったログは host 属性を含む構造化ログでした。
そのため、ログの host 属性の値がインスタンスIDから localhost へ上書きされていました。

解決方法

先述の問題はログの host 属性をDatadog上のホストと一致するように設定することで解決できます。

具体的には2つの方法が挙げられます。

  • PipelinePreprocessing for JSON logsHost attributes から問題となっている構造化ログの属性( host )を削除する。
  • ログから問題となっている構造化ログの属性( host )のキーをリネームまたは削除する。

前者の方法はDatadog Organization全体に影響を及ぼすため、今回は後者の方法を採用しました。

その結果、問題のあったログに対して、期待通りAWS Integration関連のタグが付与されるようになりました。

正常なログ

おわりに

本記事ではDatadog Logsにてホストタグが継承されない問題の原因と解決方法をご紹介しました。
最後までお読みいただき、ありがとうございました。

私たちは一緒に働いてくれる仲間を募集しています!

クラウドアーキテクト

執筆:@shibata.takao、レビュー:@yamada.y
Shodoで執筆されました