概要

  • 今回は、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のインストールを行います。
はじめに目的EC2インスタンス上のLinuxサーバーが個々に持つログを収集して、CloudWatch Logsに集約すること。CloudWatchを使って、各EC2インスタンスのカスタムメトリクスを監視すること。前提条件Linuxに、amazon-ssm-agentがインストールされていること。EC2イン...
  • 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 アラームの部分を監視ツール側の検知で行う方法もあるかと思います。

元記事はこちら

CloudWatch AgentによるLinuxプロセス監視
著者:新川貴章


アイレットなら、AWS で稼働するサーバーを対象とした監視・運用・保守における煩わしい作業をすべて一括して対応し、経験豊富なプロフェッショナルが最適なシステム環境を実現いたします。AWS プレミアコンサルティングパートナーであるアイレットに、ぜひお任せください。

AWS 運用・保守サービスページ

その他のサービスについてのお問合せ、お見積り依頼は下記フォームよりお気軽にご相談ください。
https://cloudpack.jp/contact/form/