CloudWatch Logs エージェントをインストールすると CloudWatch Logs の画面でEC2インスタンスで実行されているアプリケーションのログがリアルタイムに閲覧できます。
IAMロール設定
まずは適切なロールが必要です。
下記のポリシーで新規ロールを作って、そのロールをEC2インスタンスに割り当てます。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents",
"logs:DescribeLogStreams"
],
"Resource": [
"*"
]
}
]
}
ロールが作成できたらEC2インスタンス一覧画面で、インスタンスを右クリックして、セキュリティーの中に IAMロール変更を選択すると簡単にロールを割り当てることができます。
CloudWatch Logs エージェント設定
まずはEC2にアクセスして、sudo apt-get update
を実行
インストールするコマンド:
curl https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.py -O
sudo python ./awslogs-agent-setup.py --region ap-northeast-1
python
コマンドで実行失敗だったらpython2
もしくはpython3
で試してください。
インストールに5つのステップがあります。
ステップ3では何も入力せずエンターを押して進めていいです。
ステップ4では閲覧したいログファイルのパスを入力してから CloudWatch Logs のロググループ名を指定できます。
それから Stream名やタイムスタンプなど設定します。
それでは CloudWatch Logs エージェントのインストールと設定が完了です。問題なければ CloudWatch Logsのロググループメニューからログを閲覧できるようになります。
CloudWatch Logsエージェント自体のログを確認したい場合
tail -f /var/log/awslogs.log
Regionなど変更したい場合
[plugins]
cwlogs = cwlogs
[default]
region = ap-northeast-1
ログファイルやロググループ名なの変更したい場合
[crontab]
file = /deploy/apps/sample_app/shared/log/crontab.log
buffer_duration = 5000
log_stream_name = crontab
initial_position = start_of_file
log_group_name = prd-log
[production]
file = /deploy/apps/sample_app/shared/log/production.log
buffer_duration = 5000
log_stream_name = production
initial_position = start_of_file
log_group_name = prd-log
[puma_access]
file = /deploy/apps/sample_app/shared/log/puma_access.log
buffer_duration = 5000
log_stream_name = puma_access
initial_position = start_of_file
log_group_name = prd-log
[puma_error]
file = /deploy/apps/sample_app/shared/log/puma_error.log
buffer_duration = 5000
log_stream_name = puma_error
initial_position = start_of_file
log_group_name = prd-log
[nginx_access]
file = /deploy/apps/sample_app/shared/log/nginx.access.log
buffer_duration = 5000
log_stream_name = nginx_access
initial_position = start_of_file
log_group_name = prd-log
[nginx_error]
file = /deploy/apps/sample_app/shared/log/nginx.error.log
buffer_duration = 5000
log_stream_name = nginx_error
initial_position = start_of_file
log_group_name = prd-log
変更してから awslogs を再起動すると反映されます。
sudo service awslogs restart
インストールして設定しても CloudWatch Logs に反映しない場合の調査
まずは tail -f /var/log/awslogs.log
コマンドでエージェント自体のログを確認してください。もしかしたら /var/awslogs/etc/awslogs.conf
で設定したタイムスタンプのフォーマットはログファイルのと違う可能性があります。
実は datetime_format
という設定が不要みたいなので、/var/awslogs/etc/awslogs.conf
で datetime_format
の設定を削除して、 awslogs
を再起動すれば動くかもしれません。