Amazon Linux 2023 のシステムログを CloudWatch Logs へ出力する方法

記事タイトルとURLをコピーする

こんにちは、マネージドサービス部テクニカルサポート課の坂口です。

今回は Amazon Linux 2023 のシステムログを CloudWatch Logs へ出力する方法をいくつか紹介いたします。

Amazon Linux 2023 のシステムログ

Amazon Linux 2 までのシステムログは /var/log/messages に出力されるため、CloudWatch エージェントを使用して CloudWatch Logs へ出力が可能でした。
しかし、Amaozn Linux 2023 から、rsyslog サービスがデフォルトでインストールされていないため、/var/log/messages 等のログが作成されなくなりました。
代わりに、 journalctl コマンドを使用することでログを確認することが可能です。
repost.aws

CloudWatch Logs へ出力する方法(従来の方法)

journald は /var/log/journal 配下にログを出力しますが、ログファイルはバイナリファイルなのでそのまま CloudWatch Logs へ出力すると文字化けしてしまいます。
そのため、以下の2通りの方法があります。
・rsyslog をインストールして CloudWatch エージェント経由でログを出力する方法(従来の方法)
・Fluent Bit をインストールして Fluent Bit 経由でログを出力する方法

rsyslog をインストールして CloudWatch エージェント経由でログを出力する方法

1.rsyslog をインストールおよび起動します。

sudo dnf install rsyslog
sudo systemctl enable rsyslog
sudo systemctl start rsyslog

rsyslog を起動した段階で、/var/log 配下に messages が作成されていることが確認できます。

$ ls -l /var/log
total 3640
lrwxrwxrwx. 1 root   root                 39 Dec 15 01:49 README -> ../../usr/share/doc/systemd/README.logs
drwxr-xr-x. 3 root   root                 48 Jan  5 05:56 amazon
drwx------. 2 root   root                 23 Jan  5 03:19 audit
-rw-rw----. 1 root   utmp                384 Jan  5 04:47 btmp
drwxr-x---. 2 chrony chrony               72 Jan  5 03:19 chrony
-rw-r-----. 1 root   adm                6278 Jan  5 04:41 cloud-init-output.log
-rw-r-----. 1 root   adm              264629 Jan  5 04:41 cloud-init.log
-rw-r--r--. 1 root   root             869047 Jan  5 05:56 dnf.librepo.log
-rw-r--r--. 1 root   root             293419 Jan  5 05:56 dnf.log
-rw-r--r--. 1 root   root              84474 Jan  5 05:56 dnf.rpm.log
-rw-r--r--. 1 root   root               3319 Jan  5 05:56 hawkey.log
drwxr-sr-x+ 3 root   systemd-journal      46 Jan  5 03:19 journal
-rw-rw-r--. 1 root   utmp             292292 Jan  5 06:07 lastlog
-rw-------. 1 root   root                  0 Jan  5 04:55 maillog
-rw-------. 1 root   root            1536524 Jan  5 08:27 messages
drwx------. 2 root   root                  6 Dec 15 01:49 private
drwxr-xr-x. 2 root   root                 18 Jan  5 03:19 sa
-rw-------. 1 root   root              73199 Jan  5 07:49 secure
-rw-------. 1 root   root                  0 Jan  5 04:55 spooler
drwxr-x---. 2 root   root                 73 Jan  5 03:19 sssd
-rw-------. 1 root   root                  0 Dec 15 01:49 tallylog
-rw-rw-r--. 1 root   utmp              11520 Jan  5 06:08 wtmp

2.CloudWatch エージェントをインストールします。

sudo dnf install amazon-cloudwatch-agent

3.ウィザードを使用して CloudWatch エージェント設定ファイルを作成するか、以下のように手動で作成してください。

{
  "logs": {
    "logs_collected": {
      "files": {
        "collect_list": [
          {
            "file_path": "/var/log/messages",
            "log_group_name": "messages",
            "log_stream_name": "{instance_id}",
            "retention_in_days": -1
           }
        ]
      }
    }
  }
}

docs.aws.amazon.com

4.CloudWatch エージェントを起動します。

sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json

※/opt/aws/amazon-cloudwatch-agent/bin/config.json は 作成した設定ファイルのパスに置き換えてください。

Fluent Bit をインストールして Fluent Bit 経由でログを出力する方法

1.Fluent Bit をインストールします。

curl https://raw.githubusercontent.com/fluent/fluent-bit/master/install.sh | sh

docs.fluentbit.io

2.Fluent Bit の設定ファイル(/etc/fluent-bit/fluent-bit.conf)にて、以下のように /var/log/journal を CloudWatch Logs へ出力するように設定します。

[SERVICE]
    Flush               1
    Daemon              off
    Log_Level           info
    Parsers_File        parsers.conf

[INPUT]
    Name                systemd
    Tag                 *
    Path                /var/log/journal

[OUTPUT]
    Name                cloudwatch_logs
    Match               *
    region              ap-northeast-1
    log_group_name      /ec2/logs
    log_stream_name     journal
    auto_create_group   true

設定ファイルの記述方法は Fluent Bit の公式ドキュメントを参照してください。
docs.fluentbit.io docs.fluentbit.io

3.Fluent Bit を起動します。

sudo systemctl enable fluent-bit
sudo systemctl start fluent-bit

まとめ

どちらも試した結果、個人的に rsyslog を使用する方が運用的にも今までと変わらず良いと思いました。 また、Fluent Bit では、インスタンスメタデータの取得が可能ではあるのですが、IMDSv2 には対応しておらず IMDSv1 が必須とのことで、使い辛い印象でした。
docs.fluentbit.io

坂口 大樹 (記事一覧)

マネージドサービス部テクニカルサポート課

2023年3月にサーバーワークス入社。

スパイスカレーが好きです。