Nginx のアクセスログとエラーログを CloudWatch に送信する

AWS では Elastic Beanstalk でインスタンスを立ち上げている場合はデフォルトで Nginx のアクセスログとエラーログが CloudWatch に送信されます。

ですが、自分でインスタンスを立ち上げた時は CloudWatch にログが自動的には送信されないので今回は CloudWatch にログを送信できるようにしました。

IAM ロールにポリシーをアタッチする

EC2 から CloudWatch にログを送信できるようにしたいので、EC2 に設定している IAM ロールに CloudWatchAgentServerPolicy を追加します。

f:id:enomotodev:20181218223702p:plain

CloudWatch Logs エージェントのインストール

CloudWatch Logs を yum でインストールします。

$ sudo yum install awslogs

インストールできたら /etc/awslogs/awscli.conf でログの送信先のリージョンを Tokyo リージョンに変更します。

  • /etc/awslogs/awscli.conf
[plugins]
cwlogs = cwlogs
[default]
region = ap-northeast-1

/etc/awslogs/awslogs.conf には一番下に Nginx のアクセスログとエラーログの設定を追記します。

  • /etc/awslogs/awslogs.conf
[/var/log/nginx/access.log]
datetime_format = %d/%b/%Y:%H:%M:%S %z
file = /var/log/nginx/access.log
buffer_duration = 5000
log_stream_name = {instance_id}
initial_position = start_of_file
log_group_name = /var/log/nginx/access.log

[/var/log/nginx/error.log]
datetime_format = %Y/%m/%d %H:%M:%S
file = /var/log/nginx/error.log
buffer_duration = 5000
log_stream_name = {instance_id}
initial_position = start_of_file
log_group_name = /var/log/nginx/error.log

上記 2 つのファイルを設定できたら CloudWatch Logs エージェントを起動します。

$ sudo systemctl start awslogsd

ついでに自動起動も設定しておきます。

$ sudo systemctl enable awslogsd

Amazon Linux 2 以外では起動方法が上記とは違うようなので、こちらを参考にしてみてください。

起動できたらブラウザで EC2 にアクセスしてみましょう。

アクセスした後に CloudWatch に移動してログ一覧を表示すると /var/log/nginx/access.log/var/log/nginx/error.log が確認できると思います。

f:id:enomotodev:20181219213218p:plain

まとめ

Nginx のアクセスログとエラーログを CloudWatch に送信できるようにしました。

CloudWatch に送ると Lambda や SNS と組み合わせることもできますし、無料利用枠もありますので、ぜひ CloudWatch を有効活用してみてください。

nginx実践ガイド (impress top gear)

nginx実践ガイド (impress top gear)

nginx実践入門 (WEB+DB PRESS plus)

nginx実践入門 (WEB+DB PRESS plus)