CloudWatch エージェントでプロセスの死活監視をする方法

procstat プラグインを使用し、pid_count を取得することで、プロセス数を取得することが可能です。
2023.12.13

この記事は アノテーション株式会社 AWS Technical Support Advent Calendar 2023 | Advent Calendar 2023 - Qiita 13日目の記事です。

困っていること

CloudWatch エージェントを使用しています。

プロセスの死活監視を行いたいのですが、どの指標を元に判断すれば良いでしょうか?

どう対応すればいいの?

procstat プラグイン1を使用し、pid_count を取得します。

CloudWatch エージェントの設定ファイルの設定例をご紹介します。

{
    "metrics": {
        "metrics_collected": {
            "procstat": [
                {
                    "exe": "<プロセス名>",
                    "measurement": [
                        "pid_count"
                    ],
                    "metrics_collection_interval": 60
                }
            ]
        }
    }
}

pid_count が 1 以上の場合、プロセスが稼働していると判断できます。

そのため、pid_count の値が 0 の時にアラームになるよう、CloudWatch アラームをご設定ください。

やってみた

Windows Server 2022 の AMI から EC2 を起動します。Systems Manager の Run Command が実行できるように、前提条件2を満たすように設定します。

Systems Manager の Parameter Store: AmazonCloudWatch-Processtest に下記の内容を保存します。今回は、amazon-ssm-agent のプロセスを確認します。

{
    "metrics": {
        "metrics_collected": {
            "procstat": [
                {
                    "exe": "amazon-ssm-agent",
                    "measurement": [
                        "pid_count"
                    ],
                    "metrics_collection_interval": 60
                }
            ]
        }
    }
}

EC2 に対して CloudWatch エージェントのインストールを行う Run Command を実行します。

  • ドキュメント名: AWS-ConfigureAWSPackage
  • コマンドのパラメータ
    • Action: Install
    • Name: AmazonCloudWatchAgent
    • Version: latest

CloudWatch エージェントを起動し、設定ファイルに Parameter Store に保存した JSON を指定する Run Command を実行します。

  • ドキュメント名: AmazonCloudWatch-ManageAgent
  • コマンドのパラメータ
    • Action: configure
    • Mode: ec2
    • Optional Configuration Source: ssm
    • Optional Configuration Location: AmazonCloudWatch-Processtest
    • Optional Restart: yes

CloudWatch のカスタムメトリクスを確認し、pid_count が取得できていることを確認します。

CloudWatch アラームを作成し、値が 1 より小さくなったらアラームになるようにします。

EC2 へログインし、タスクマネージャーから amazon-sms-agent のプロセスを停止します。

amazon-ssm-agent のプロセスを停止したことにより pid_count が 0 になり、アラームが発生しました!

参考資料