Firelensで起動するコンテナの環境変数を利用して起動したリージョンのCloudWatch Logsにログ出力する
こんにちは、岩城です。
最近、Firelensに向き合っています。
複数の海外リージョンに展開するECSサービスがあり、ECSサービスを起動したリージョンのCloudWatch Logsに標準出力/標準エラー出力を出力させる必要がありました。
以下のように、Firelens(Fluent Bit)のconfigで出力先のリージョンをハードコーディングする方法もありますが、起動リージョンごとにFirelensのイメージを持つことを避けたかったのです。
[OUTPUT] Name cloudwatch_logs Match nginx** region ap-northeast-1 log_group_name /ecs/logs/test-ecs-service log_stream_prefix from- log_retention_days 30 auto_create_group true
やってみた
タイトルにあるとおり、Firelensコンテナの環境変数を利用することで対応可能です。
起動したFirelensコンテナで展開されている環境変数は以下のような感じです。
bash-4.2# env HOSTNAME=ip-10-0-19-65.ap-northeast-1.compute.internal TERM=xterm-256color AWS_CONTAINER_CREDENTIALS_RELATIVE_URI=/v2/credentials/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX AWS_EXECUTION_ENV=AWS_ECS_FARGATE PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin _=/usr/bin/env AWS_DEFAULT_REGION=ap-northeast-1 PWD=/ ECS_AGENT_URI=http://169.254.170.2/api/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX LANG=C.UTF-8 AWS_REGION=ap-northeast-1 HOME=/root SHLVL=2 ECS_CONTAINER_METADATA_URI=http://169.254.170.2/v3/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ECS_CONTAINER_METADATA_URI_V4=http://169.254.170.2/v4/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
AWS_REGION
を使えば、Firelensコンテナが起動しているリージョンを特定できるので、これを利用してCloudWatch Logsの出力先を設定します。
[OUTPUT] Name cloudwatch_logs Match nginx** region ${AWS_REGION} log_group_name /ecs/logs/test-ecs-${AWS_REGION} log_stream_prefix from- log_retention_days 30 auto_create_group true
東京リージョンと大阪リージョンで同じFirelensのイメージを使ってECSサービスでタスクを起動しました。実際に出力されたログは以下のような感じです。
東京リージョンであればap-northeast-1
、
大阪リージョンであればap-northeast-3
が指定されていることが分かります。
おわりに
本エントリがどなかたのお役に立てれば幸いです。