まさかの journald 対応!CloudWatch エージェントが systemd ログをそのまま読めるようになったよ!
おつかれさま、しぃちゃんだよ!今日は地味だけど「あ、それ地味に困ってたやつ!」ってなる発表を見つけたから、さっそく紹介するね!
AWS What's Newなにが発表されたの?
AWS の What's New で、Amazon CloudWatch エージェントが systemd ジャーナル(journald)ログの収集に対応したことが発表されたよ。Linux インスタンス上の systemd journal から直接ログエントリを読み取って、Amazon CloudWatch Logs に送れるようになったの。しかも、いったんディスク上のファイルに書き出す必要がないのがポイントだよ。
今までどうだったの?
Amazon Linux 2023 をはじめとする最近の Linux ディストリビューションは、journald をメインのログの仕組みとして使うようになっていて、/var/log/messages みたいな従来のテキストログファイルをデフォルトでは作らなくなってきているんだよね。
でも、これまでの CloudWatch エージェントで journald のログを集めようとすると、journal の中身をいったんファイルにエクスポートする追加設定が必要だったの。せっかく journald が構造化された便利な情報を持っているのに、ファイル化する過程でその恩恵を活かしにくい、というちょっともどかしい状態だったんだ。
これで何が変わるの?
今回のアップデートで、CloudWatch エージェントが journald のエントリをネイティブに読み込めるようになったから、ファイルへの書き出しという回り道が不要になったよ。しかも、journald が記録している systemd ユニット・プライオリティ・プロセス情報といった構造化メタデータを保持したまま CloudWatch Logs に送れるの。
Amazon Linux 2023 のような journald ベースの環境を CloudWatch で監視している人にとっては、「ログをファイル化する運用」自体をやめられるようになるのが嬉しいところだね。ログの出どころ(どの systemd ユニットから来たログか)が分かりやすくなるので、調査や監視ルールづくりも楽になりそうだよ。
深く潜ってみよう
フィルタリングまわりも充実していて、CloudWatch Logs に送る前に次の条件でログを絞り込めるよ。
- systemd ユニット単位でのフィルタ
- journal のプライオリティレベルによる絞り込み
- journal フィールドのマッチによる条件指定
- 正規表現フィルタ
これを使えば、大量に流れてくる journald のログからノイズを削って、ログ量とコストをコントロールしやすくなるよ。
対応リージョンは、全ての AWS Commercial Regions と GovCloud(US) リージョンだよ。料金面では新しい課金体系が追加されるわけではなくて、取り込んだログには通常の Amazon CloudWatch Logs の料金がそのまま適用されるとのことなの。
まとめ
今日紹介したポイントをまとめるね。
- CloudWatch エージェントが journald ログをネイティブに読み取れるようになった
- ファイルへのエクスポートが不要になり、systemd ユニット・プライオリティ・プロセス情報などの構造化メタデータも保持される
- systemd ユニット・プライオリティレベル・journal フィールド・正規表現でフィルタリング可能
- 全 AWS Commercial Regions と GovCloud(US) で利用でき、料金は通常の CloudWatch Logs 課金のまま
Amazon Linux 2023 みたいな journald ベースの Linux インスタンスを CloudWatch で運用している人には、ログ収集の設定をすっきりさせるチャンスの発表だよ!