m_shige1979のときどきITブログ

プログラムの勉強をしながら学習したことや経験したことをぼそぼそと書いていきます

Github(変なおっさんの顔でるので気をつけてね)

https://github.com/mshige1979

EC2で出力するログをcloudwatchlogsに連携する

やりたいこと

nginxやバックエンドのアプリログをcloudwatchlogsへ流す

参考にしたやつ

【AWS】Amazon CloudWatch Logs でログ収集をやってみた|コラム|クラウドソリューション|サービス|法人のお客さま|NTT東日本

クイックスタート: 実行中の EC2 Linux インスタンスに CloudWatch Logs エージェントをインストールして設定する - Amazon CloudWatch Logs

流れ

  1. EC2インスタンスを起動
  2. EC2インスタンスにnginxを入れてログの出力を確認する
  3. cloudwatchへの出力用ポリシーを作成する
  4. IAMロールを作成し、3で作成したポリシーを割り当て
  5. EC2にロールを設定する
  6. awslogsのインストール

1.EC2インスタンスを起動

こんな感じ f:id:m_shige1979:20211211232941p:plain

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.
$

ブラウザで確認

f:id:m_shige1979:20211211233741p:plain

ログファイルを確認

/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への出力用ポリシーを作成する

①ポリシーを作成を選択

f:id:m_shige1979:20211211234944p:plain

②cloudwatchlog用のアクションを選択

f:id:m_shige1979:20211211235411p:plain

タグをつける

f:id:m_shige1979:20211211235632p:plain

ポリシー名をつけて作成

f:id:m_shige1979:20211211235840p:plain

4. IAMロールを作成し、3で作成したポリシーを割り当て

f:id:m_shige1979:20211212000044p:plainf:id:m_shige1979:20211212000235p:plainf:id:m_shige1979:20211212000422p:plainf:id:m_shige1979:20211212000548p:plainf:id:m_shige1979:20211212000732p:plain

5. EC2にロールを設定する

f:id:m_shige1979:20211212001047p:plainf:id:m_shige1979:20211212001218p:plain

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

f:id:m_shige1979:20211212003329p:plain

できた

所感

手順はそんなに難しくない ec2のログを手間なく送信したい場合は使えると思われる。 そういえばローテートされたらどうなるのかな・・・