EC2で出力するログをcloudwatchlogsに連携する
やりたいこと
nginxやバックエンドのアプリログをcloudwatchlogsへ流す
参考にしたやつ
【AWS】Amazon CloudWatch Logs でログ収集をやってみた|コラム|クラウドソリューション|サービス|法人のお客さま|NTT東日本
クイックスタート: 実行中の EC2 Linux インスタンスに CloudWatch Logs エージェントをインストールして設定する - Amazon CloudWatch Logs
流れ
- EC2インスタンスを起動
- EC2インスタンスにnginxを入れてログの出力を確認する
- cloudwatchへの出力用ポリシーを作成する
- IAMロールを作成し、3で作成したポリシーを割り当て
- EC2にロールを設定する
- awslogsのインストール
1.EC2インスタンスを起動
こんな感じ
2. EC2インスタンスにnginxを入れてログの出力を確認する
nginxのインストール
$ sudo yum update -y $ sudo amazon-linux-extras install nginx1 -y $ nginx -v nginx version: nginx/1.20.0 $ sudo systemctl start nginx $ sudo systemctl enable nginx Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service. $
ブラウザで確認
ログファイルを確認
/etc/nginx/conf.d/default.conf
server { listen 80; listen [::]:80; server_name _; root /usr/share/nginx/html; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; error_page 404 /404.html; location = /404.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }
再起動
$ sudo systemctl restart nginx $
↓
$ sudo ls -la /var/log/nginx/ 合計 8 drwx------ 2 root root 41 12月 11 14:33 . drwxr-xr-x 8 root root 333 12月 11 14:32 .. -rw-r--r-- 1 root root 1075 12月 11 14:46 access.log -rw-r--r-- 1 root root 604 12月 11 14:45 error.log $
3. cloudwatchへの出力用ポリシーを作成する
①ポリシーを作成を選択
②cloudwatchlog用のアクションを選択
タグをつける
ポリシー名をつけて作成
4. IAMロールを作成し、3で作成したポリシーを割り当て
↓ ↓ ↓ ↓
5. EC2にロールを設定する
↓
6. awslogsのインストール
①yum install
$ sudo yum install awslogs -y
②backup
$ sudo cp -p /etc/awslogs/awscli.conf /etc/awslogs/awscli.conf.org $ sudo cp -p /etc/awslogs/awslogs.conf /etc/awslogs/awslogs.conf.org
③/etc/awslogs/awscli.confを編集
※東京リージョンに変更
[plugins] cwlogs = cwlogs [default] region = ap-northeast-1
④/etc/awslogs/awslogs.conf
※末尾に追加
[HttpdAccessLog] datetime_format = %d/%b/%Y:%H/%M/%S file = /var/log/nginx/access.log buffer_duration = 5000 log_stream_name = {instance_id} initial_position = start_of_file log_group_name = /HttpdAccessLog [HttpdErrorLog] datetime_format = %d/%b/%Y:%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 = /HttpdErrorLog
⑤awslogs起動、自動起動設定
sudo systemctl start awslogsd.service sudo systemctl enable awslogsd.service
↓
できた
所感
手順はそんなに難しくない ec2のログを手間なく送信したい場合は使えると思われる。 そういえばローテートされたらどうなるのかな・・・