fargateのログはclowdwatchを経由してdatadogへ送る方法がありますが、
datadogが推奨しているfirelensを使って直接datadogへ送る方法についてメモです。
といってもやることは単純でアプリケーション用のコンテナにsidecar構成でfluentbitのコンテナを起動させるだけです。
コンテナ定義のサンプル
{ "family": "foo", "taskRoleArn": "arn:aws:iam::XXXXXXXXXXXX:role/foo_ecs_task_iam_role", "executionRoleArn": "arn:aws:iam::XXXXXXXXXXXX:role/foo_ecs_task_execution_role", "containerDefinitions": [ { "essential": true, "image": "amazon/aws-for-fluent-bit:latest", "name": "log-router", "firelensConfiguration":{ "type":"fluentbit", "options":{ "enable-ecs-log-metadata":"true" } }, "memoryReservation": 50 }, { "essential": true, "image": "XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/foo-application:latest", "name": "app", "logConfiguration": { "logDriver":"awsfirelens", "options": { "Name": "datadog", "Host": "http-intake.logs.datadoghq.com", "TLS": "on", "dd_service": "foo-service", "dd_source": "foo-middleware", "dd_tags": "foo:foo-value,bar:bar-value", "provider": "ecs" }, "secretOptions": [{ "name": "apikey", "valueFrom": "/DATADOG_API_KEY" }] }, "memoryReservation": 100 } ] }
1つ目のコンテナ定義がfluentbit用です。
こちらは基本的に固定で大丈夫です。
2つ目のコンテナ定義が自分のアプリケーション用です。
自分で設定するのは
- logConfiguration.opions.dd_service
- logConfiguration.opions.dd_source
- logConfiguration.opions.dd_tags
- logConfiguration.secretOptions.valueFrom
くらいだと思います。
logConfiguration.opions.dd_service
datadog上でserviceに値する項目です。
ご自身の環境で決めてよいかと思います。
特に入れるものがなければアプリケーション名など。
logConfiguration.opions.dd_source
datadog上でsourceに値する項目です。
ここはミドルウェアの名前を入れるのが一般的みたいです。
httpd,redis,mysqlなど
複数構成したコンテナであればwebなどでも良いかもしれません。
logConfiguration.opions.dd_tags
datadog上でタグとして展開されます。
コロン区切りでkeyとvalueを定義して、複数指定したいときはカンマで区切ります。
logConfiguration.secretOptions.valueFrom
datadogのapiキーを指定します。
logConfiguration.opions
側に定義しても良いのですが、それだとベタ書きになります。
上記では、 awsのパラメーターストアから取得する方法で記述しています。
まとめ
clowdwatch側には当然ログは流れなくなるのでログの確認はdatadogで行うことになります。
fluentbitのコンテナを追加で定義して
アプリケーション側のコンテナのlogConfigurationをちょっと修正するだけで
datdogにログを送れるようになるので便利です。
コンテナ監視と合わせて設定しておくとよいかと思います。