AWS EC2インスタンス CloudWatch Logs(awslogs)インストールとCloudWatch保存対象ログの追加

はじめに
===

EC2インスタンス(AmazonLinux)に対して、CloudWatch Logs(awslogs)をインストールして、CloudWatchに保存するログファイルとして/var/log/maillogや/var/log/unbound.logを追加する手順です。

使用したAMI
===

・Amazon Linux AMI 2014.09.1 (HVM) - ami-4985b048

CloudWatch Logs(awslogs)のインストール手順
===

・EC2インスタンス(AmazonLinux)にIAMロールを設定し、以下のようなIAMポリシーを設定します。

```
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "logs:*"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}
```

・EC2インスタンス(AmazonLinux)にCloudWatch Logs(awslogs)をインストールします。

```
$ sudo su -

# cd /usr/local/src
# pwd
/usr/local/src

# wget https://s3.amazonaws.com/aws-cloudwatch/downloads/awslogs-agent-setup-v1.0.py

# python ./awslogs-agent-setup-v1.0.py --region us-east-1
Launching interactive setup of CloudWatch Logs agent ...

Step 1 of 5: Installing pip ...DONE

Step 2 of 5: Downloading the latest CloudWatch Logs agent bits ... DONE

Step 3 of 5: Configuring AWS CLI ...
AWS Access Key ID [None]:
AWS Secret Access Key [None]:
Default region name [None]:
Default output format [None]:

Step 4 of 5: Configuring the CloudWatch Logs Agent ...
Path of log file to upload [/var/log/messages]:
Destination Log Group name [/var/log/messages]:

Choose Log Stream name:
  1. Use EC2 instance id.
  2. Use hostname.
  3. Custom.
Enter choice [1]: 1

Choose Log Event timestamp format:
  1. %b %d %H:%M:%S    (Dec 31 23:59:59)
  2. %d/%b/%Y:%H:%M:%S (10/Oct/2000:13:55:36)
  3. %Y-%m-%d %H:%M:%S (2008-09-08 11:52:54)
  4. Custom
Enter choice [1]: 3

Choose initial position of upload:
  1. From start of file.
  2. From end of file.
Enter choice [1]: 1
More log files to configure? [Y]: n

Step 5 of 5: Setting up agent as a daemon ...DONE


------------------------------------------------------
- Configuration file successfully saved at: /var/awslogs/etc/awslogs.conf
- You can begin accessing new log events after a few moments at https://console.aws.amazon.com/cloudwatch/home?region=us-east-1#logs:
- You can use 'sudo service awslogs start|stop|status|restart' to control the daemon.
- To see diagnostic information for the CloudWatch Logs Agent, see /var/log/awslogs.log
- You can rerun interactive setup using 'sudo ./awslogs-agent-setup.py --region us-east-1 --only-generate-config'
------------------------------------------------------
#
```

・/var/awslogs/etc/awslogs.confにCloudWatchに記録したいログファイルを追加します。

例えば、以下のログファイルをCloudWatchに記録したい場合、/var/awslogs/etc/awslogs.confに設定を追加します。

```
# ll /var/log/maillog
-rw------- 1 root root 1194 Jan 20 02:42 /var/log/maillog
#

# ll /var/log/unbound.log
-rw-r--r-- 1 unbound unbound 49131 Jan 20 02:55 /var/log/unbound.log
#
```

```
# cp -p /var/awslogs/etc/awslogs.conf /var/awslogs/etc/awslogs.conf.ORG
# diff /var/awslogs/etc/awslogs.conf /var/awslogs/etc/awslogs.conf.ORG
#

# vi /var/awslogs/etc/awslogs.conf
　(末尾に以下を追加する)

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

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

```

・awslogsプロセスを再起動して、awslogs.confに追加した設定を反映します。

```
# ps awux | grep -v grep | grep awslogs
root      2721  0.0  0.1 112916  1188 pts/0    S    02:50   0:00 /bin/sh /var/awslogs/bin/awslogs-agent-launcher.sh
root      2726  0.5  2.8 439252 29480 pts/0    SNl  02:50   0:01 /var/awslogs/bin/python26 /var/awslogs/bin/aws logs push --config-file /var/awslogs/etc/awslogs.conf
#

# /etc/init.d/awslogs stop
Stopping system awslogs daemon
#

# ps awux | grep -v grep | grep awslogs
#

# /etc/init.d/awslogs start
Starting system awslogs daemon
Starting awslogs daemon
#                          [  OK  ]
#

# ps awux | grep -v grep | grep awslogs
root      2799  0.0  0.1 112916  1184 pts/0    S    02:55   0:00 /bin/sh /var/awslogs/bin/awslogs-agent-launcher.sh
root      2801 17.0  2.4 730132 24544 pts/0    SNl  02:55   0:00 /var/awslogs/bin/python26 /var/awslogs/bin/aws logs push --config-file /var/awslogs/etc/awslogs.conf
#
```

・awslogsプロセスが自動起動するようにしておきます。

```
# chkconfig awslogs on
#
# chkconfig --list | grep awslogs
awslogs         0:off   1:off   2:on    3:on    4:on    5:on    6:off
#
```

CloudWatch上でのログファイル確認
===

・CloudWatchにログが記録されているか確認します。

AWS Management Consoleにログインします。
「CloudWatch」を選択します。リージョンは「US East (N. Virginia)」を選択します。

![WS000011.JPG](https://qiita-image-store.s3.amazonaws.com/0/63647/0b62121d-12ee-e0e1-98e1-23b782ed0633.jpeg)

「CloudWatch」を開いたら、画面左側の「Logs」をクリックします。Log Groupsにawslogs.confに設定したログファイル名が表示されていると思います。ログファイル名をクリックします。

![WS000008.JPG](https://qiita-image-store.s3.amazonaws.com/0/63647/1f14338a-162a-2981-586a-22338d342b50.jpeg)

Log StreamsにCloudWatch Logs経由でログを記録しているインスタンスIDが表示されます。ログを確認したいインスタンスIDをクリックします。

![WS000009.JPG](https://qiita-image-store.s3.amazonaws.com/0/63647/de153dcf-a46e-71e4-e2f8-bcb73f60b363.jpeg)

先ほどawslogs.confに設定したログファイルの内容がCloudWatch上に表示されている事を確認します。

![WS000012.JPG](https://qiita-image-store.s3.amazonaws.com/0/63647/c2e565f5-9ad0-8fc8-90fc-fb0a5e0d2641.jpeg)

CloudWatch上に記録したログファイルの保存期間設定
===

CloudWatch上に記録したログファイルのログデータ保存期間を設定する事も可能です。
例えば/var/log/messagesのログデータ保存期間を変更する場合、以下のように「Never Expire」の部分をクリックします。

![WS000013.JPG](https://qiita-image-store.s3.amazonaws.com/0/63647/f4de6143-eac4-ce29-cdb2-ace31223cc6b.jpeg)

「Retention」でログデータの保存期間を「Never Expire」から変更します。この例では「3 days」を選択しています。

ログファイル保存期間を変更すると、CloudWatchの対象ログファイルの保存期間以前のログデータが消えてしまいますので、それで問題なければOKをクリックして保存期間を変更します。

![WS000015.JPG](https://qiita-image-store.s3.amazonaws.com/0/63647/ce0413d7-1370-1428-9116-202f7797ee86.jpeg)

以上になります。