タダです.
CloudWatch Agent は EC2 から CPU,メモリなどのメトリクスをとったり,CloudWatch Logs にログを出力できますし,AWS Compute Optimizer を有効活用するためにも役立てることができます.今回は,procstat プラグインを使って Nginx のプロセス監視できるように CloudWatch メトリクスに送る検証をしました.多くの方が CloudWatch Agent でのプロセス監視設定を記事にされているのですが,自分も試してみたため記事にします.
CloudWatch Agent の導入
予め CloudWatchAgentServerPolicy
をアタッチした IAM ロールを適用した Amazon Linux 2 の環境に CloudWatch Agent を導入します.
sudo yum install amazon-cloudwatch-agent
プロセス数を設定ファイルを編集する
手動で設定ファイルを定義し,CloudWatch メトリクスをおくります.
/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
を編集してきます.
{ "metrics": { "metrics_collected": { "procstat": [ { "exe": "nginx", "measurement": [ "pid_count" ], "metrics_collection_interval": 60 } ] } } }
編集後,CloudWatch Agent に設定ファイルを読み込ませます./opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml
に inputs.procstat
セクションが追加されていて,CloudWatch Agent が起動できていれば CloudWatch メトリクスに送れているはずなので確認してきます.
$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json -s /opt/aws/amazon-cloudwatch-agent/bin/config-downloader --output-dir /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d --download-source file:/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json --mode ec2 --config /opt/aws/amazon-cloudwatch-agent/etc/common-config.toml --multi-config default Successfully fetched the config and saved in /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/file_amazon-cloudwatch-agent.json.tmp Start configuration validation... /opt/aws/amazon-cloudwatch-agent/bin/config-translator --input /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json --input-dir /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d --output /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml --mode ec2 --config /opt/aws/amazon-cloudwatch-agent/etc/common-config.toml --multi-config default 2020/11/26 23:02:31 Reading json config file path: /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/file_amazon-cloudwatch-agent.json.tmp ... Valid Json input schema. I! Detecting runasuser... No csm configuration found. No log configuration found. Configuration validation first phase succeeded /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent -schematest -config /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml Configuration validation second phase succeeded Configuration validation succeeded Redirecting to /bin/systemctl stop amazon-cloudwatch-agent.service Redirecting to /bin/systemctl restart amazon-cloudwatch-agent.service $ cat /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml ~中略~ [inputs] [[inputs.procstat]] exe = "nginx" fieldpass = ["pid_count"] interval = "60s" pid_finder = "native" tagexclude = ["user", "result"] [inputs.procstat.tags] metricPath = "metrics" ~中略~ $ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a status { "status": "running", "starttime": "2020-11-26T23:02:31+0000", "version": "1.247345.35" }
CloudWatch メトリクスにプロセスが取れているかの確認
CWAgent
に exe,host,pid_finder
というメトリクス(プロセスに関連付けられたプロセス ID の数)が追加されてました.意図的に nginx を停止,再度起動してグラフが上がっていくのを確認できました.
まとめ
CloudWatch Agent の procstat プラグインでのプロセス監視できるよう設定を行いました.設定は簡単にできたので別サーバーへの横展開していく時にも活用していきたいと思います.