CloudWatch AgentによるLinuxプロセス監視

5月 31, 2022AWS,CloudWatch,EC2

概要

  • 今回は、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"
                                        ]
                                }
                        ]
                }
        }
}
Bash

 

  • 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
Bash

 

  • 現在、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
Bash

 

  • CloudWatch コンソールからカスタムメトリクスを確認します。設定が有効となり、カスタムメトリクスに、"CWAgent" が追加されました。

 

  • メトリクス procstat_lookup_pid_count として、プロセス数がグラフに表示されています。

 

  • 次に、アラートを設定します。今回は、Apache のプロセスがしきい値を上回った場合に通知を行います。

 

  • Apache のプロセス数(子プロセス含む)が6個に変わりました。
  • Apache のプロセスがしきい値を上回ったため、アラーム状態となりました。

 

  • アラームに設定した通り、メール通知が行われました。

 

  • この様にCloudWatch Agent だけで、コストを掛けずに簡易にプロセス監視が可能です。上記以外に、DatadogやNewRelic などの監視ツールを使用する方法や、CloudWatch アラームの部分を監視ツール側の検知で行う方法もあるかと思います。

 

AWS,CloudWatch,EC2

Posted by takaaki