🐶
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:awssourcecategory:aws
リンク
-
Fargate logging - Amazon EKS
- Fluent Bitの設定に関して、「使用できるプラグインの種類」「環境変数利用不可」といったEKS Fargate特有の制限事項がある。
- Record Modifier - Fluent Bit: Official Manual
- Datadog Kinesis Firehose Destination を使用して AWS サービスログを送信する
- 属性とエイリアス設定
- ログファセット
直接Datadogに出力できるようになればFirehoseを経由する必要はないが、まだできない。
Discussion