🐶
EKS FargateからFirehose経由でDatadogにログを転送する
流れ
- Fargateに内蔵されたFluentBitからKinesis Data FirehoseのDelivery Streamに向けてログを出力
- ここで
service:hogehoge
など、ログエクスプローラーでファセットとして利用したいフィールドを追加(Datadog的には「属性」)
- ここで
- 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
で検索してもヒットしなかった)。
- Fluent Bit設定でログに追加した
source:aws
sourcecategory:aws
リンク
-
Fargate logging - Amazon EKS
- Fluent Bitの設定に関して、「使用できるプラグインの種類」「環境変数利用不可」といったEKS Fargate特有の制限事項がある。
- Record Modifier - Fluent Bit: Official Manual
- Datadog Kinesis Firehose Destination を使用して AWS サービスログを送信する
- 属性とエイリアス設定
- ログファセット
直接Datadogに出力できるようになればFirehoseを経由する必要はないが、まだできない。
Discussion