CloudWatch AgentによるLinuxプロセス監視
概要
- 今回は、CloudWatch Agent を使用して、手軽に Linuxプロセスを監視する方法を紹介します。プロセス監視には、CloudWatch Agent のprocstat を利用します。
- procstat のメトリクスには、cpu_time, cpu_usage, memory, pid_count などが収集できます。メトリクスの詳細は、こちらを参照。
- プロセス監視の目的としては、サーバーの動作およびサービス提供に必要となるプロセスのダウンを検知するケース(例: sshdのプロセスがダウンした)、サーバーが正常動作するためのプロセス数上限を監視するケース(例: アクセス増によりhttpdのプロセスが100個起動している)があるかと思います。
- プロセス監視の結果は、CloudWatch のカスタムメトリクスとしてグラフに表示します。
- CloudWatch のメトリクスにアラームが設定できます。例えば、プロセス数がしきい値を上回った or 下回った場合に通知を行います。本記事では、メール通知しています。
CloudWatch Agent のプロセス監視設定
- EC2インスタンスのroleには、CloudWatchFullAccessのポリシーがアタッチされています。
- 以下の記事を参考に、CloudWatch Agent のインストールを行います。
- CloudWatch Agent の設定ファイルを準備します。
- 以下の例では、監視するプロセスに “httpd" を指定しています。プロセスの指定方法は、pid_file, exe, patternの3種類があります。exe の場合、指定の文字列と一致する名前のプロセスをすべて監視します。その他のプロセス指定方法は、こちらを参照。
- メトリクスは、cpu_time, pid_cout を取得しています。cpu_time は、プロセスで CPU を使用する時間です。pid_cout は、プロセスに関連付けられたプロセス ID の数です。その他のメトリクスは、こちらを参照。
{
"metrics": {
"metrics_collected": {
"procstat": [
{
"exe": "httpd",
"measurement": [
"cpu_time",
"pid_count"
]
}
]
}
}
}
- CloudWatch Agent の設定ファイルを配置します。amazon-cloudwatch-agent.json に先ほどの設定ファイルを貼りつけます。
- amazon-cloudwatch-agent サービスを再起動し、設定を反映します。
$ cd /opt/aws/amazon-cloudwatch-agent/etc
$ sudo vi amazon-cloudwatch-agent.json
$ sudo systemctl restart amazon-cloudwatch-agent
$ sudo systemctl status amazon-cloudwatch-agent
- 現在、Apache のプロセス(子プロセス含む)は、5個起動しています。
$ ps -ef | grep httpd | grep -v grep
root 19209 1 0 13:27 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 19238 19209 0 13:27 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 19933 19209 0 13:28 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 20016 19209 0 13:28 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 20017 19209 0 13:28 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
- CloudWatch コンソールからカスタムメトリクスを確認します。設定が有効となり、カスタムメトリクスに、"CWAgent" が追加されました。
- メトリクス procstat_lookup_pid_count として、プロセス数がグラフに表示されています。
- 次に、アラートを設定します。今回は、Apache のプロセスがしきい値を上回った場合に通知を行います。
- Apache のプロセス数(子プロセス含む)が6個に変わりました。
- Apache のプロセスがしきい値を上回ったため、アラーム状態となりました。
- アラームに設定した通り、メール通知が行われました。
- この様にCloudWatch Agent だけで、コストを掛けずに簡易にプロセス監視が可能です。上記以外に、DatadogやNewRelic などの監視ツールを使用する方法や、CloudWatch アラームの部分を監視ツール側の検知で行う方法もあるかと思います。