はじめに
Amazon Linux 2023(AL2023)で EC2 を構築し、
「/var/log配下の主なログをCloudWatchに転送したい」
——よくある要件だと思います。
ところが、いざ設定しようとすると 想定外の壁にぶつかりました。
/var/log/secure が無い
/var/log/messages も無い
その為CloudWatch Logs にロググループが作られない…
最初は「設定ミスかな?」と思いましたが、
これは Amazon Linux 2023 の仕様が原因でした。
Amazon Linux 2023 の落とし穴
Amazon Linux 2 までと違い、AL2023 ではログの管理方式が変更されています。
・旧来:rsyslog → /var/log/secure や /var/log/messages
・AL2023:systemd-journald(バイナリログ)
つまり、最初から secure / messages というテキストログは存在しません。
CloudWatch Agent にファイル監視を設定しても、
「監視対象のファイルが無い」ため何も起きない、というわけです。
解決策:rsyslog を導入してログをテキスト化
いくつか方法はありますが、
確実・シンプル・短時間で成功するのが rsyslog を使う方法でした。
rsyslog の導入
sudo dnf install -y rsyslog
sudo systemctl enable --now rsyslog
これだけで、
・/var/log/secure
・/var/log/messages
が自動生成され、従来どおりのログ形式に戻ります。
CloudWatch Agent でログを転送
あとは CloudWatch Agent の設定です。
/opt/aws/amazon-cloudwatch-agent/bin/config.json に以下を記載:
{
"logs": {
"logs_collected": {
"files": {
"collect_list": [
{
"file_path": "/var/log/secure",
"log_group_name": "/ec2/amazonlinux/secure",
"log_stream_name": "{instance_id}"
},
{
"file_path": "/var/log/messages",
"log_group_name": "/ec2/amazonlinux/messages",
"log_stream_name": "{instance_id}"
}
]
}
}
}
}
反映コマンドを実行:
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json -s
数分後、CloudWatch Logs に
/ec2/amazonlinux/secure が現れた瞬間は、正直ホッとしました。
おわりに
Amazon Linux 2023 はモダンで良い OS ですが、
「従来の知識がそのまま通用しない」ポイントが確実に存在します。
今回の学びはこの一言に尽きます。
「ログが無い」のではなく、 「ログの前提が変わっている」
同じところでハマる方の助けになれば幸いです。