概要
Firelensのヘルスチェック方法がAWSドキュメントに無いので(もしかしたらあるかもしれないですが見つけられなかった)やり方を共有します。
前提として、下記条件での使用になります。
- Firelensの実装はFluent Bitを使用
- Firelensはサイドカーとして組み込む
- ECSで使用
Firelensとは
FirelensはAWSのコンテナサービスでログ収集を簡単に取り扱えるようにしたツールです。
Firelensの使用方法
サイドカーとして組み込んで使用します。
アプリケーションがログを標準出力するとそれを拾ってくれます。
下記の私の記事も読んでいただく良いかもしれません。
ecs-cli composeを使用してFireLensからDatadogへログを送信するYamlの記述方法
Firelensのヘルスチェック方法
下記ドキュメントが情報源になります。
ドキュメントによると、下記コマンドでヘルスチェックが可能になります。
echo '{"health": "check"}' | nc 127.0.0.1 8877 || exit 1
nc
コマンド入っているの?という心配は無用で、Firelens(FluentBit)コンテナイメージにはインストールされています。
これが分かればあとは簡単で、このコマンドをTaskDefinitionに組み込んでいきます。
Docker Composeの場合
ecs-params.yamlに記述します。
version: 1
task_definition:
services:
hoge:
#~省略~
log_router:
essential: true
healthcheck:
test: "echo '{\"health\": \"check\"}' | nc 127.0.0.1 8877 || exit 1"
interval: 3m
timeout: 30s
retries: 3
start_period: 3m
firelens_configuration:
#~省略~
Task Defintionsの場合
{
//~省略~
"healthCheck": {
"retries": 3,
"command": [
"CMD-SHELL",
"echo '{\"health\": \"check\"}' | nc 127.0.0.1 8877 || exit 1"
],
"timeout": 30,
"interval": 180,
"startPeriod": 180
},
//~省略~
}
補足:ヘルスチェックのログについて
このヘルスチェックのアクセスログはどうなるのかというと、先程のドキュメントにも書いてありますが、
[INPUT]
Name tcp
Tag firelens-healthcheck
Listen 127.0.0.1
Port 8877
入力処理で firelens-healthcheck
のタグが付けられて、
[OUTPUT]
Name null
Match firelens-healthcheck
firelens-healthcheck
タグが付いているログは出力処理で捨てられます。
上記設定はFirelensに予め仕込まれているため、ユーザー側で設定を入れる必要はありません。
ヘルスチェックできると何がうれしいか
ステータスが全部 HEALTHY
になるのも気持ち良いですが、下記が可能になります。
- Firelensが応答しなくなった場合、アプリケーションコンテナと共に自動的に破棄される
- DependsOnのconditionで
HEALTHY
が利用可能になる
GithubのREADMEが公式ドキュメントと言われたらそうなもしれないですが、こういうのはちゃんと本家AWSドキュメントの分かりやすいところに記載しておいてほしいですね。