こんにちは。かっぺいです。
AWSでWordPressサイト構築、今回はClodudWatchAgentを使ったログおよびカスタムメトリクスのCloudWatch送信の設定を行います。
簡単に言えば、いちいちサーバにログインしなくてもアクセスログなどをCloudWatchで見れるようにしようということを行います。
CloudWatchAgentとは
EC2としてCPU利用率はインスタンス情報として取得することができますが、メモリやディスクの利用率はOSの情報のため、そのままではCloudWatchで見ることができません。
Agentをインストールすることにより、OS情報を見ることができるようになります。
また、syslogやhttpdのaccessログなどもCloudWatchに転送することができ、CloudWatch側で長期保存することにより、EC2側のEBSの圧迫を軽減することも可能です。
agentパッケージのインストール
yumでamazon-cloudwatch-agentをインストールします
# sudo yum install amazon-cloudwatch-agent
IAMロール設定
CloudWatchへアップロードする権限が必要です。EC2にアタッチしているロールに、CloudWatchAgentServerPolicyを追加します
agent起動
# sudo amazon-cloudwatch-agent-ctl -a start
初回起動なので、デフォルトのコンフィグ設定とサービス起動設定が作成されます
agent設定
/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.dに設定ファイルを置きます
初回起動で、defaultが出来上がっているので、編集します
{
"agent": {
"run_as_user": "root"
},
"metrics": {
"metrics_collected": {
"mem": {
"measurement": [
"mem_used_percent"
]
},
"disk": {
"measurement": [
"used_percent"
],
"resources": [
"*"
]
}
},
"append_dimensions": {
"ImageId": "${aws:ImageId}",
"InstanceId": "${aws:InstanceId}",
"InstanceType": "${aws:InstanceType}",
"AutoScalingGroupName": "${aws:AutoScalingGroupName}"
}
}
}
/var/log/のファイルを参照したいため、run_as_userをrootに変更します。
このデフォルト設定では、メモリ利用率とディスク利用率をカスタムメトリクスとしてCloudWatchに送信します。
agent設定(syslog送信)
vi /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/syslog.json
{
"agent": {
"metrics_collection_interval": 60
},
"logs": {
"logs_collected": {
"files": {
"collect_list": [
{
"file_path": "/var/log/messages",
"log_group_name": "messages",
"log_stream_name": "{local_hostname}"
},
{
"file_path": "/var/log/secure",
"log_group_name": "secure",
"log_stream_name": "{local_hostname}"
}
]
}
}
}
}
/var/log/messagesと/var/log/secureをロググループ名messages,secureでローカルホスト名をストリームネームとして60秒サイクルでチェックして送信する設定です。
CloudWatchのログ▶︎ロググループに、設定したロググループ名が表示され、その中にストリーム毎に表示されます。
agent設定(httpdログ送信)
vi /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/httpd.json
{
"logs": {
"logs_collected": {
"files": {
"collect_list": [
{
"file_path": "/var/log/httpd/access_log",
"log_group_name": "http_access_log",
"log_stream_name": "{local_hostname}"
},
{
"file_path": "/var/log/httpd/error_log",
"log_group_name": "http_error_log",
"log_stream_name": "{local_hostname}"
}
]
}
}
}
}
一つのJSONファイルにまとめてしまっても構いません。
小分けにしておけば、サーバー構成に応じてファイルの追加で対応できるので便利です。
サービスの再起動
設定が終了したら、agentを再起動しましょう。
# systemctl restart amazon-cloudwatch-agent.service
CloudWatchで確認
CloudWatchを見て、ロググループが追加されていることを確認しましょう

ちなみに、ロググループの保持を「失効しない」にしておくと、ログが保存され続けて、CloudWatchの料金が上がっていくので、適度な期間に変更しましょう。
カスタムメトリクスは、メトリクスのすべてのメトリクスから、CWAgentの項目で参照できます。
