Cloudwatch Logs Agentの設定方法


### 目的

この記事では、Cloudwatch　Agentを設定し、ソフトウェア（Logstash）が生成するログファイルをCloudwatchに送信する手順を纏めます。



### 前提

- Cloudwatch AgentをインストールするEC2には適切なIAMロールが割り当てられていること（以下URL参照）
- https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/create-iam-roles-for-cloudwatch-agent.html


### 手順

Cloudwatch Agentをインストールします。

```bash:cloudwatch-agentをインストール
sudo yum install amazon-cloudwatch-agent
```

Cloudwatch Agentは```/opt/aws/amazon-cloudwatch-agent/bin/ ```配下の```config.json ```を設定したファイルを読み込んで実行されます。この設定ファイルを手動で設定するのは大変ですので、Cloudwatch Agentの設定ウィザードを活用します。


```bash:設定ウィザードを実行
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
```

ウィザードに従い内容を入力します。Cloudwatch Logsだけを使うのであれば、StatDは2にしてもよかったかも。。
（追伸：AWSサポートの回答）
```CloudWatch Agent において、ログの転送のみ行う場合には StatsD や collectd の設定は不要です。
それぞれ StatsD や collectd を使用してメトリクスを収集する場合のみ有効化ください。```




```bash:設定ウィザードの入力
=============================================================
= Welcome to the AWS CloudWatch Agent Configuration Manager =
=============================================================
On which OS are you planning to use the agent?
1. linux
2. windows
default choice: [1]:
q
The value q is not valid to this question.
Please retry to answer:
On which OS are you planning to use the agent?
1. linux
2. windows
default choice: [1]:
1
Trying to fetch the default region based on ec2 metadata...
Are you using EC2 or On-Premises hosts?
1. EC2
2. On-Premises
default choice: [1]:
1
Which user are you planning to run the agent?
1. root
2. cwagent
3. others
default choice: [1]:
1
Do you want to turn on StatsD daemon?
1. yes
2. no
default choice: [1]:
1
Which port do you want StatsD daemon to listen to?
default choice: [8125]

What is the collect interval for StatsD daemon?
1. 10s
2. 30s
3. 60s
default choice: [1]:
3
What is the aggregation interval for metrics collected by StatsD daemon?
1. Do not aggregate
2. 10s
3. 30s
4. 60s
default choice: [4]:
4
Do you want to monitor metrics from CollectD?
1. yes
2. no
default choice: [1]:
2
Do you want to monitor any host metrics? e.g. CPU, memory, etc.
1. yes
2. no
default choice: [1]:
2
Do you have any existing CloudWatch Log Agent (http://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AgentReference.html) configuration file to import for migration?
1. yes
2. no
default choice: [2]:
2
Do you want to monitor any log files?
1. yes
2. no
default choice: [1]:
1
Log file path:
/var/log/logstash/logstash-plain.log
Log group name:
default choice: [logstash-plain.log]
logstash-logstash-plain.log
Log stream name:
default choice: [{instance_id}]

Do you want to specify any additional log files to monitor?
1. yes
2. no
default choice: [1]:
1
Log file path:
/var/log/logstash/logstash_slowlog-plain.log
Log group name:
default choice: [logstash_slowlog-plain.log]
logstash-logstash_slowlog-plain.log
Log stream name:
default choice: [{instance_id}]

Do you want to specify any additional log files to monitor?
1. yes
2. no
default choice: [1]:
2
Saved config file to /opt/aws/amazon-cloudwatch-agent/bin/config.json successfully.
Current config as follows:
{
        "agent": {
                "run_as_user": "root"
        },
        "logs": {
                "logs_collected": {
                        "files": {
                                "collect_list": [
                                        {
                                                "file_path": "/var/log/logstash/logstash-plain.log",
                                                "log_group_name": "logstash-logstash-plain.log",
                                                "log_stream_name": "{instance_id}"
                                        },
                                        {
                                                "file_path": "/var/log/logstash/logstash_slowlog-plain.log",
                                                "log_group_name": "logstash-logstash_slowlog-plain.log",
                                                "log_stream_name": "{instance_id}"
                                        }
                                ]
                        }
                }
        },
        "metrics": {
                "metrics_collected": {
                        "statsd": {
                                "metrics_aggregation_interval": 60,
                                "metrics_collection_interval": 60,
                                "service_address": ":8125"
                        }
                }
        }
}
```


そうすると以下のように設定ファイルが生成されます。

```bash:config.jsonを確認
pwd
/opt/aws/amazon-cloudwatch-agent/bin
 ls -ll | grep config.json
-rwxr-xr-x 1 root root      668 Mar 23 08:45 config.json
```

設定ファイルを作成したら、以下コマンドでコンフィグファイルを指定して実行します。


```bash:config.jsonを指定して実行
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json
```

その他基本コマンドは以下です。

```bash:config.jsonを指定して実行

## 停止コマンド
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a stop
## ステータスチェックコマンド
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a status
## 常時起動の設定
 sudo systemctl enable amazon-cloudwatch-agent

```


(追伸)設定ウィザードで作成したjsonファイルは、```/opt/aws/amazon-cloudwatch-agent/bin/config.json```に作成されるが、デフォルトでこの設定ファイルを設定したい場合は、```/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json```を設定する必要があるそうです（ｂｙAWS公式サポート）。


以上です。