No.483


【AmazonLinux2023】システムログのCloudWatch連携【AWS】

AL2023ではCloudWatch周りがいろいろ変わってる

 Amazon Linux 2(以下AL2)までは awslogs パッケージで CloudWatch との連携がサクッとできたのだが、Amazon Linx 2023(以下AL2023)では変更されている。
 パッケージ名や設定ファイルも変わっているので注意しよう。(正確には前から amazon-cloudwatch-agent パッケージはあったが)

 また、システムのログも標準では journald だけとなっており、 /var/log/ 以下にファイルが作成されなくなっている。
 こちらは rsyslog パッケージをインストールすればファイルとして出力されるようになる。CloudWatch との連携では必要になるのでインストールしておこう。


rsysylog と amazon-cloudwatch-agent パッケージ

CloudWatch エージェントをインストールする

 AL2023では amazon-cloudwatch-agent パッケージを利用する。あわせて使用する rsyslog パッケージも合わせてインストールしよう。

yum install rsyslog amazon-cloudwatch-agent
systemctl start rsyslog
systemctl enable rsyslog
systemctl start amazon-cloudwatch-agent
systemctl enable amazon-cloudwatch-agent

 amazon-cloudwatch-agent の設定はウィザードを使って作成する手順が紹介されいている。

ウィザードを使用して CloudWatch エージェント設定ファイルを作成する

 しかし、はっきり言って面倒くさい。
 ログの転送程度なら手動で書いた方が絶対早い。ファイル名は /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json 固定で、記述形式は json 形式だ。

 例えば /var/log/message を転送するなら下記のように書けば良い。保持期間は無期限(-1)にしてあるが、そこは適宜変更すること。

vi /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
{
  "logs": {
    "logs_collected": {
      "files": {
        "collect_list": [
          {
            "file_path": "/var/log/messages",
            "log_group_name": "/var/log/messages",
            "log_stream_name": "{instance_id}",
            "retention_in_days": -1
          }
        ]
      }
    }
  }
}

 ファイル作成後の再起動を忘れずに。

 なお、記述にミスがあると再起動が失敗してしまう。必ず起動したことを確認しよう。