EC2 Ubuntu インスタンスに CloudWatch Logsエージェントをインストールして設定する

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ロール変更を選択すると簡単にロールを割り当てることができます。

![スクリーンショット 0003-10-31 16.18.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35605/c00d156b-9889-38c3-e40d-f1f1dedf2b78.png)


# 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`で試してください。

インストールに５つのステップがあります。

ステップ３では何も入力せずエンターを押して進めていいです。

![スクリーンショット 0003-10-31 16.01.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35605/6d5fc4eb-84ed-7467-cc30-c08da9a39f10.png)

ステップ４では閲覧したいログファイルのパスを入力してから CloudWatch Logs のロググループ名を指定できます。
それから Stream名やタイムスタンプなど設定します。

![スクリーンショット 0003-10-31 16.02.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35605/33f5361e-1872-9a4f-31bf-0fab03cf1055.png)

それでは CloudWatch Logs エージェントのインストールと設定が完了です。問題なければ CloudWatch Logsのロググループメニューからログを閲覧できるようになります。

![スクリーンショット 0003-10-31 16.22.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35605/44558195-902a-0a91-dbc3-45486fffe966.png)


### CloudWatch Logsエージェント自体のログを確認したい場合

```
tail -f /var/log/awslogs.log
```


### Regionなど変更したい場合

```:/var/awslogs/etc/aws.conf
[plugins]
cwlogs = cwlogs
[default]
region = ap-northeast-1
```

### ログファイルやロググループ名なの変更したい場合

```:/var/awslogs/etc/awslogs.conf
[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
```

![スクリーンショット 0003-10-31 16.22.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35605/8087fffc-e50d-c9f7-b7ea-40b3370e4551.png)


# インストールして設定しても CloudWatch Logs に反映しない場合の調査

まずは `tail -f /var/log/awslogs.log` コマンドでエージェント自体のログを確認してください。もしかしたら `/var/awslogs/etc/awslogs.conf`で設定したタイムスタンプのフォーマットはログファイルのと違う可能性があります。

実は `datetime_format` という設定が不要みたいなので、`/var/awslogs/etc/awslogs.conf` で `datetime_format`の設定を削除して、 `awslogs` を再起動すれば動くかもしれません。