kikukawa's diary

都内で活動するシステムエンジニアが書いてます。 興味を持った技術やハマったポイント、自分用メモをつけてます。 最近はweb中心

fargateのログをdatadogへ送る

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にログを送れるようになるので便利です。

コンテナ監視と合わせて設定しておくとよいかと思います。

kkkw.hatenablog.jp

参考