【AWS】LightsailでCloudWatch Logsを使う

既存の記事や公式ドキュメントを読みながら設定しましたが、
少しハマった部分があったので備忘録も兼ねて記事にしました。

前提

やりたいこと

Lightsail上で動いているNode.js(TypeScript)アプリケーションのログを
CloudWatch Logsで見たい。

アプリケーションのログについて

ログの収集・出力には log4js を使用。
/home/{user}/app/logs/app.log にログが出力されるように設定。

Lightsail詳細

・OS : Amazon Linux 2
・リージョン : ap-northeast-1(東京)

手順

1. ロググループとログストリームを作成
2. IAMユーザーを作成
3. aws configureでプロファイルを作成
4. CloudWatchAgentをインストール
5. CloudWatchAgentの設定ファイルを作成・編集
6. 設定ファイルの読み込み・起動・確認

1. ロググループとログストリームを作成

CloudWatchで、ログを表示するためのロググループとログストリームを作成します。
おそらく事前に作成しなくても勝手に作ってくれると思いますが、
命名など間違えたくなかったので念の為作成します。

公式ドキュメントは こちら

2. IAMユーザーを作成

Lightsailでは、EC2のようにIAMロールを割り当てる事ができないので、
Lightsailインスタンスをオンプレミスサーバーのような扱いで、
CloudWatchAgentの設定を行う必要があります。

CloudWatchAgentServerPolicy を割り当てたIAMユーザーを作成し、
アクセスキーとシークレットキーを入手します。

公式ドキュメントは こちら

3. aws configureでプロファイルを作成

LightsailインスタンスにSSHで接続し、aws configureコマンドでプロファイルを作成します。
プロファイル名は好きな名前をつけてください。
アクセスキー・シークレットキーは、手順2でIAMユーザーを作成したときの物を使用。
リージョンは ap-northeast-1 を入力。

$ sudo aws configure --profile AmazonCloudWatchAgent

公式ドキュメントは こちら

4. CloudWatchAgentをインストール

$ sudo yum install amazon-cloudwatch-agent

公式ドキュメントは こちら

5. CloudWatchAgentの設定ファイルを作成・編集

CloudWatchAgentに関係する設定ファイルを作成・編集していきます。

5 – 1. common-config.tomlの設定

LightsailインスタンスはCloudWatch側がEC2として認識してしまうので、
IAMロールでの認証ではなく、IAMユーザーを使うように変更します。

$ sudo vim /opt/aws/amazon-cloudwatch-agent/etc/common-config.toml

下記2行のコメントアウトを外し、手順3で作成したプロファイル名に変更します。
下記2行の下に shared_credential_file の項目がありますが、
こちらのコメントアウトは外さなくてOKです。

[credentials]
shared_credential_profile = "AmazonCloudWatchAgent"

5 – 2. config.jsonの設定

ログを収集するにあたり必要な設定ファイルを作成します。

$ sudo vim /opt/aws/amazon-cloudwatch-agent/bin/config.json

エージェント設定ファイルウィザードを使用してconfig.jsonを作成することも可能ですが、
ログ関連以外の設定も入ってきてしまうので、手動で作成したほうが早いと思います。

エージェント設定ファイルウィザードは下記コマンドで使用できます。
エージェント設定ファイルウィザードの公式ドキュメントは こちら

$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard

config.jsonの中身は下記の通り。
file_pathlog_group_namelog_stream_name の項目を書き換えてください。

{
  "agent": {
    "run_as_user": "root"
  },
  "logs": {
    "logs_collected": {
      "files": {
        "collect_list": [
          {
            "file_path": "/home/{user}/app/logs/app.log",
            "log_group_name": "{log_group_name}",
            "log_stream_name": "{log_stream_name}"
          }
        ]
      }
    }
  }
}

公式ドキュメントは こちら

6. 設定ファイルの読み込み・起動・確認

準備はすべて完了です。
下記コマンドで設定ファイルの読み込みを行いましょう。

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

動作確認

$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m onPremise -a status

ログストリームでログが確認できれば成功です。

さいごに

何か問題があれば、コメントやツイッターでご連絡いただけると幸いです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です