概要
EC2やコンテナ内をステートレスに保つため、ログファイルをCloudWatch Logsに出力することがよくあると思います。
出力させる手順は公式・非公式問わずたくさんありますが、
最新のCloudWatchエージェントにおいて、実際OSがハングアップしたらどこまでログが残るのか、どの程度の間隔でフラッシュされているのか知りたかったので調べてみました。
私は ”最新のCloudWatchエージェント” について知りたかったです。(大事なこと)
結論
CloudWatchエージェント設定ファイル内のlogsセッション 「force_flush_interval」 に 秒単位 で設定する。デフォルトは5秒。
また、この設定にかかわらずバッファ内のログサイズが1MBに達するとフラッシュされる。
詳細は、こちらの公式ドキュメントを参照。
実験
結論は出ていますが、念の為「force_flush_interval」を1秒に設定して実験しました。
実験方法としては、あるインスタンスのあるログファイルをCloudWatch Logsで収集するよう設定し、
このログファイルに0.1秒ごとに現在時刻を出力するシェルスクリプトを作成しました。
シェルスクリプト実行中に、該当インスタンスを強制的にシャットダウンさせ、
インスタンスのターミナルに表示された最終実行時刻と、CloudWatch Logs内の最終収集時刻を見比べることでその差を調査しました。
結果
(実験用スクリプトが雑なので)おおむね1秒以内に出力されていますね。(アンダースコア以降はミリ秒)
絶対安心とは言えませんが、5秒よりはマシなので気になる方は変更してみるとよいかもしれません。
その他
旧版のCloudWatch Logsエージェントではバッファサイズを変更できました。(公式ドキュメント)
「buffer_duration」がフラッシュするまでの時間(デフォルト5秒)
「batch_size」がバッファサイズ(デフォルト10MB)
「batch_count」がバッファに入れるイベント数(デフォルト1万件)
しかし、新版では上記の通り時間しか変更できないようです。
あと、これはただの愚痴なんですが、投稿日現在だとCloudWatchエージェントが新旧2種併存しているため、
公式ドキュメントを探しても非常にややこしかったです。
下位互換のために旧版があるのは理解できますが、もう少しわかりやすい名前にしてほしいです…