■1〜3回の内容を再設計した記事を書きました。
[ FireLens/fluentbit構成の見直しと改修] (https://qiita.com/antennix/items/ebad3bcb33cbd168923d)
はじめに
ここ最近、FireLensの機能選定を行っており
fluentbitのカスタムイメージを作成し、FireLensに接続するまでの機能調査を行いました。
1回目の記事です。
2回目 ローカルで、datadog/S3へデータを転送できるdockerイメージを作成する
3回目 Firelensで、datadog/S3へデータを転送できるdockerイメージを作成する
FireLens実装サンプル
概要
VPC内で稼働しているwebアプリケーションのEC2インスタンスを、fargate化したいという話がありました。
改修に伴い、fargateコンテナをステートレスにする為、ログの管理方法が話題に上がりました。
また、監視業務を内製化したいという要望もあった為、ログの検知システムも検討しました。
構成図
- A:アクセスログ、B:エラーログ、C:アプリケーションログの三種類をS3に保存します。
- B,Cのみログ監視を行い、特定の要件を満たした場合、slackにアラートを発報します。
- 突然のコンテナの破棄に対して、ログが失われないように設計します(ステートレス)
検討した内容
Firelens,FluentBit,datadogを組み合わせて検討する事になりました。
FireLens
FireLensは、ECSのコンテナの標準出力を、fluentd/fluentbitにお手軽に転送できる機能です。
- 簡単な転送なら、JSONの設定だけで、自動でfluentdのコンテナを起動し、転送してくれます。
- 複雑な設定も、専用の設定ファイルを作成すれば可能です。
- 標準の追加プラグインを使いたい場合は、カスタムしたfluentd/fluentbitのコンテナを作成すると、可能です。
Fluent Bit
Firelensの記事は、Amazon Kinesis Data Firehoseや、Amazon CloudWatch Logsとの
連携記事が多く見られますが、
bigqueryやazure等、組み込みoutput pluginへの出力も可能です。
Amazon / aws-for-fluent-bit (fluentbit v1.3.2)
https://hub.docker.com/r/amazon/aws-for-fluent-bit/tags
fluentbit output plugin
https://docs.fluentbit.io/manual/output
v1.2.0からサポートされている、datadogを使用する事にしました。
なお、fluentdでも同様の機能は実装可能ですが
コンテナ費用の事を考え、軽量なfluentbitを選択しました。
datadog
https://app.datadoghq.com
クラウド監視ツールですが、機能の一つとしてログ監視機能(datadog logs)があります。
元々使用経験もあり、ログの整形機能(pipeline)や、リアルタイムアラート機能
S3へのアップロード機能もあり、要件を満たせそうでした。
S3へのアップロード
datadogにはS3へのアップロード機能があり、ログを全種まとめてdatadogで管理する案もありましたが
アクセスログのレコード数が非常に多く、datadogを経由すると膨大なコストが掛かる可能性があり
アクセスログだけはdatadogの監視を通さず、fluentbitからs3に直接アップロードすることにしました。
実現可能なプラグインは存在しましたが、標準のfluentbitコンテナには搭載されていないので
カスタムのfluentbitのコンテナを作成する必要が出てきました。
https://github.com/cosmo0920/fluent-bit-go-s3
実装手順
- ローカルで、datadog/s3へデータを転送できるdockerイメージを作成する
- 作成したdockerイメージを元に、firelensで動作するように調整する
あと2回ほど記事を書いてまとめようと思うので、時間が出来次第更新致します。