既存の記事や公式ドキュメントを読みながら設定しましたが、
少しハマった部分があったので備忘録も兼ねて記事にしました。
前提
やりたいこと
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_path・log_group_name・log_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
ログストリームでログが確認できれば成功です。
さいごに
何か問題があれば、コメントやツイッターでご連絡いただけると幸いです。