CloudWatch Agentでちょっとハマった話
こんにちは、坂巻です。
CloudWatch Agentでちょっとハマった話です。
CloudWatch Agentは通常のEC2インスタンスのメトリクスに加えて、さらに多くのメトリクスを収集することができます。そんな、CloudWatch Agentをプライベートサブネットから利用した際に、メトリクスを送信することができず、少々ハマりました。。今回はそんな備忘エントリです。
やりたい事
プライベートサブネットからCloudWatch Agentでメトリクスを収集したい。
前提
CloudWatch Agentがインストールされていること。インストール方法については以下をご確認ください。
ハマって対応した事
メトリクスの収集対象であるEC2はプライベートサブネットに構築していますので、
CloudWatchのエンドポイントの対象として、com.amazonaws.ap-northeast-1.monitoring
を作成しました。
CloudWatchのエンドポイントは、インターフェイスエンドポイントになるため、ルートテーブル等は更新不要です。また、EC2にアタッチしてあるIAMロールにはCloudWatchAgentAdminPolicy
ポリシーを付与しており、CloudWatchへのメトリクスを送信する権限もある状態です。
この状態でメトリクスが収集できると思っていたのですが、時間をおいてもメトリクスが収集されることはありませんでした。
CloudWatch Agentの状態を確認しました。プロセスは起動しているようです。
$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a status { "status": "running", "starttime": "2018-11-20T07:21:00+0000", "version": "1.205751.0" }
エンドポイントの名前解決でも、想定どおりプライベートIPが返却されました。
$ dig monitoring.ap-northeast-1.amazonaws.com ; <<>> DiG 9.9.4-RedHat-9.9.4-61.amzn2.1.1 <<>> monitoring.ap-northeast-1.amazonaws.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2486 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;monitoring.ap-northeast-1.amazonaws.com. IN A ;; ANSWER SECTION: monitoring.ap-northeast-1.amazonaws.com. 60 IN A 192.168.3.31 monitoring.ap-northeast-1.amazonaws.com. 60 IN A 192.168.4.199 ;; Query time: 2 msec ;; SERVER: 192.168.0.2#53(192.168.0.2) ;; WHEN: Tue Nov 20 07:26:56 UTC 2018 ;; MSG SIZE rcvd: 100
CloudWatch Agentを停止/起動してみました。
$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a stop Redirecting to /bin/systemctl stop amazon-cloudwatch-agent.service $ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a start Redirecting to /bin/systemctl restart amazon-cloudwatch-agent.service
/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log
ログを確認しました。
2018-11-20T07:28:43Z I! cloudwatch: get unique roll up list [] 2018-11-20T07:28:43Z I! Starting AmazonCloudWatchAgent (version 1.205751.0) 2018-11-20T07:28:43Z I! Loaded outputs: cloudwatch cloudwatchlogs 2018-11-20T07:28:43Z I! Loaded inputs: disk diskio mem netstat swap tail cpu 2018-11-20T07:28:43Z I! Tags enabled: host=ip-192-168-4-127.ap-northeast-1.compute.internal 2018-11-20T07:28:43Z I! Agent Config: Interval:1m0s, Quiet:false, Hostname:"ip-192-168-4-127.ap-northeast-1.compute.internal", Flush Interval:1s 2018-11-20T07:28:43Z I! The state file /opt/aws/amazon-cloudwatch-agent/logs/state/_var_log_messages for /var/log/messages does not exist: stat /opt/aws/amazon-cloudwatch-agent/logs/state/_var_log_messages: no such file or directory 2018-11-20T07:28:43Z I! cloudwatch: publish with ForceFlushInterval: 1m0s, Publish Jitter: 37s
正常に起動しているようにみえました。。。が、数分すると、以下のメッセージが出力されました。
2018-11-20T07:30:43Z E! ec2tagger: Unable to initialize EC2 Instance Tags : +RequestError: send request failed caused by: Post https://ec2.ap-northeast-1.amazonaws.com/: dial tcp 54.239.96.159:443: i/o timeout 2018-11-20T07:30:44Z I! cloudwatch: get unique roll up list [] 2018-11-20T07:30:44Z I! Starting AmazonCloudWatchAgent (version 1.205751.0) 2018-11-20T07:30:44Z I! Loaded outputs: cloudwatch cloudwatchlogs 2018-11-20T07:30:44Z I! Loaded inputs: disk diskio mem netstat swap tail cpu 2018-11-20T07:30:44Z I! Tags enabled: host=ip-192-168-4-127.ap-northeast-1.compute.internal 2018-11-20T07:30:44Z I! Agent Config: Interval:1m0s, Quiet:false, Hostname:"ip-192-168-4-127.ap-northeast-1.compute.internal", Flush Interval:1s 2018-11-20T07:30:44Z I! The state file /opt/aws/amazon-cloudwatch-agent/logs/state/_var_log_messages for /var/log/messages does not exist: stat /opt/aws/amazon-cloudwatch-agent/logs/state/_var_log_messages: no such file or directory 2018-11-20T07:30:44Z I! cloudwatch: publish with ForceFlushInterval: 1m0s, Publish Jitter: 37s
初期化の際にhttps://ec2.ap-northeast-1.amazonaws.com
へのアクセスがあり、そこでタイムアウトが発生しているようです。
com.amazonaws.ap-northeast-1.ec2
エンドポイントを追加しました。
エンドポイントを追加すると、CloudWatch Agentのメトリクスが収集できました。
なお、CloudWatch Agentを使用して、CloudWatch Logsへのログを送信する際は、com.amazonaws.ap-northeast-1.logs
エンドポイントも必要になるので注意してください。
com.amazonaws.ap-northeast-1.logs
エンドポイントがない状態で、CloudWatch Logsへ送信すると、Agentログには以下のようなメッセージが出力されます。
2018-11-21T00:07:29Z E! CreateLogStream / CreateLogGroup with log group name /var/log/messages stream name i-0ae1466b42d3c0786 has errors. Will retry the request: RequestError: send request failed caused by: Post https://logs.ap-northeast-1.amazonaws.com/: dial tcp 54.239.96.219:443: i/o timeout 2018-11-21T00:07:29Z W! It is the 3 time, going to sleep 1.6s before retrying.
さいごに
プライベートサブネットからCloudWatch Agentを利用する場合は、以下のエンドポイントが必要でした。
com.amazonaws.ap-northeast-1.monitoring
com.amazonaws.ap-northeast-1.ec2
com.amazonaws.ap-northeast-1.logs
(CWLへのログを送信する場合)
構築後は意図した通り、メトリクス・ログが収集できているか、必ず確認するようにしましょう。CloudWatch Agentのログをみておけばより安心できると思います。