FireLens(Fluent Bit)CloudWatch Logsの新プラグインを使ったログストリーム作成方法

2021.09.17

以前Fluent Bitで利用できるCloudWatch Logsの新旧プラグインの注意点を紹介しました。新プラグインではECSメタデータの利用した変数が使えないため、CloudWatch Logsのログストリームをタスクごとに個別作成できないのが課題でした。規定の変数を利用せず新プラグインでタスクごとのログストリーム作成の設定方法を紹介します。

まとめ

  • 新プラグイン(cloudwatch_logs)ではECSメタデータを利用した変数は使えないため修正必須
  • log_stream_prefixを設定することでタスクIDを付与したログストリームが作成可能
[OUTPUT]
    Name cloudwatch_logs # 新プラグイン指定
    Match webapp-firelens*
    region ap-northeast-1
    log_group_name /newplugin-cwlogs # オレンジ文字
    log_stream_prefix app- # 赤文字
    auto_create_group true

ログストリームの設定

なぜログストリームをタスクごとに作成したいのかは以下のリンクをご確認ください。

旧プラグインの設定おさらい

log_stream_nameにECSメタデータの変数($(ecs_task_id))を利用して、タスクごとのログストリームを指定していました。

extra.conf

[SERVICE]
    Flush 1
    Grace 30

[FILTER]
    Name grep
    Match webapp-firelens*
    Exclude log ^(?=.*ELB-HealthChecker\/2\.0).*$

[OUTPUT]
    Name   cloudwatch
    Match webapp-firelens*
    region ap-northeast-1
    log_group_name /ecs/logs/$(ecs_cluster)
    log_stream_name webapp-$(ecs_task_id)
    auto_create_group true

タスクIDを付与されたログストリーム名が作成されます。タスクごとの個別ログストリームへログを保存でき、CloudWatch Logsのログストリームのスロットリングエラー発生を緩和させていました。

新プラグインの設定

ポイント

  • log_stream_nameをやめてlog_stream_prefixで指定
  • log_group_nameにECSメタデータの変数を使っていた場合はあきらめて置き換える

Amazon CloudWatch - Fluent Bit: Official Manual

[SERVICE]
    Flush 1
    Grace 30

[FILTER]
    Name grep
    Match webapp-firelens*
    Exclude log ^(?=.*ELB-HealthChecker\/2\.0).*$

[OUTPUT]
    Name cloudwatch_logs
    Match webapp-firelens*
    region ap-northeast-1
    log_group_name /newplugin-cwlogs
    log_stream_prefix app-
    auto_create_group true

タスクIDの付与されたログストリームが作成されました。log_stream_prefixapp-の指定しかしていませんでしたが、以下の様にいい感じに個別の名前付けてログストリームを作成してくれることがわかりました。

スケールアウト・インしてタスク数に増減があってもタスクごとにログストリームが作成されます。

おわりに

既存の設定ファイルからCloudWatch Logsの新プラグインを使った設定にするには修正が必要になるかもしれません。新規に設定ファイルを作成する場合は設定方法さえ知っていれば新プラグインで不都合なさそうです。

新プラグイン(cloudwatch_logs)を使ってlog_stream_nameのままECSメタデータをタグを指定すると...

[OUTPUT]
    Name   cloudwatch_logs
    Match webapp-firelens*
    region ap-northeast-1
    log_group_name /newplugin-cwlogs
    log_stream_name webapp-$(ecs_task_id)
    auto_create_group true

なんとも言えないログストリーム名が作成されます。「ん?なんだこれ??」となった場合は、新・旧プラグイン(cloudwatch or cloudwatch_logs)の違いと、log_stream_nameとlog_stream_prefixの違いを見直してみてください。