🐶

EKS FargateからFirehose経由でDatadogにログを転送する

2021/10/13に公開

流れ

  1. Fargateに内蔵されたFluentBitからKinesis Data FirehoseのDelivery Streamに向けてログを出力
    • ここでservice:hogehogeなど、ログエクスプローラーでファセットとして利用したいフィールドを追加(Datadog的には「属性」)
  2. Delivery Streamの宛先にDatadogを設定
    • ここを通って転送されていくログすべてに固定で付与したいDatadogタグを追加

Fluent Bitの設定(aws-logging ConfigMap)

  filters.conf: |
    [FILTER]
        Name record_modifier
        Match *[Pod名末尾ランダム文字列抜き]*
        Record service [serviceとして検索等で使いたい任意の文字列]

  output.conf: |
    [OUTPUT]
        Name  kinesis_firehose
        Match *
        region ap-northeast-1
        delivery_stream eks-fargate-container-logs-to-datadog

Record Modifierフィルタープラグインによってログエントリに任意のフィールドを追加できるので、一例としてserviceというフィールドを追加する。
JSONのフィールドは自動的にDatadogによって属性として認識される。

Match条件について

        Match *[Pod名末尾ランダム文字列抜き]*

EKS FargateではFluent Bitのタグが以下のような形になっているので

kube.var.log.containers.[Pod名]_[Namespace名]_[コンテナ名]-[コンテナID].log

service属性を追加したい単位でタグを絞り込む条件の例としてPod名を指定する。
Deploymentなどから生まれたPodの名前は[Deployment名]-lkapmwkxd-qaw2qのような形式のため末尾のランダム文字列は抜く。

Delivery Streamの設定

  • Source: Direct PUT
  • Destination: Datadog
  • Data transformation: Disabled
  • Parameters: ログに追加したいDatadogタグがあれば追加

Parametersに何も設定しなくても以下のタグは勝手に付く。

  • region:[Delivery Streamのリージョン]
  • service:aws
    • Fluent Bit設定でログに追加したservice属性と衝突しているが、この場合ログエクスプローラーでの検索時にはこちらのタグではなくさっきの属性が優先される(service:awsで検索してもヒットしなかった)。
  • source:aws
  • sourcecategory:aws

リンク

直接Datadogに出力できるようになればFirehoseを経由する必要はないが、まだできない。

Discussion