CloudWatchでOSのプロセスを監視してみる

AWS

CloudWatchを使用してプロセス監視ができるということなのでやってみようと思います。

構成イメージ

CloudWatchメトリクスとアラームを使用して、LinuxとWindowsServerそれぞれで適当なプロセスを監視します。

CloudWatchでプロセスを監視する為のCloudWatchAgentsの設定はSSMを使用して各サーバに定義します。
プロセスがダウンしたらアラームで発報するようにします。

事前準備

事前に以下のものを用意しておきます。
【Linuxサーバ】
⇒CloudWatchエージェントをインストール。

【WindowsServer】
⇒CloudWatchエージェントをインストール。

手順の流れ

以下の流れで実装します。

1.IAMロール作成
2.SSMでプロセス監視用にCloudwatchエージェントの設定
3.CloudWatchアラームの設定
4.動作確認

1. IAMロール作成

EC2からCloudWatchやSSMにアクセスするためのIAMロールを作成します。

許可ポリシーとしては下記3つを追加します。
・CloudWatchAgentAdminPolicy
・CloudWatchAgentServerPolicy
・AmazonSSMManagedInstanceCore

2.SSMからプロセス監視用にCloudwatchエージェントの設定

プロセス監視を行うためにCloudWatchエージェントのコンフィグ設定をSSMを使って実施してきます。

まずはSSMでパラメータストアから定義を作成します。
名前は「param-linux-process」とします。

値は下記を記述します。
監視対象プロセスは”rsyslog”で、
pid_countでプロセス数を取得してます。
 ※詳しい定義方法についてはAmazon公式サイトをご参照。

{
        "metrics": {
                "metrics_collected": {
                        "procstat": [
                                {
                                        "exe": "rsyslogd",
                                        "measurement": [
                                                "pid_count"
                                        ]
                                }
                        ]
                }
        }
}

同様にWindowsServer用のパラメータストアも作成しておきます。
値は以下とします。
監視対象プロセスは”amazon-ssm-agent.exe”とします

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

                }
            ]
        }
    }
}

次にSSMでRun Commandを実行していきます。

コマンドドキュメントは「AmazonCloudWatch-ManageAgent」を選択。

OptionalConfigurationLocationで先ほど作成したパラメータストア定義「param-linux-process」を指定します。

ターゲットにはLinuxのEC2インスタンスを指定します。

実行後、ステータスが成功となればコマンドが正常終了してます。

WindowsServer分も同じやり方で実施しておきます。

しばらく待ったあと、CloudWatchを確認するとメトリクスとしてプロセス数が取得できていることが確認できます。

Linux(rsyslogd)
WindowsServer(amazon-ssm-agent.exe)

3.CloudWatchアラームの設定

先ほどCloudWachメトリクスとしてプロセス情報が取得できたので、それに対してアラームをrsyslogd用とssm-agent.exe用の2つ作成します。

名前は「alarm-rsyslogd」と「alarm-ssmagent」としておきます。

アラームの条件は「1」より低いにします。

アラーム作成後、状態がOKとなることを確認すれば準備完了です。

4.動作確認

実際にプロセスを停止してみます。

Linux(rsyslogd)
WindowsServer(ssm-agent.exx)

しばらくするとアラーム状態となりしっかり検知していることが確認できます。

補足

アラームをさらにEventBridgeを使用してSQSに送信したりも可能です。

EventBridgeのルールでイベントパターンを下記のとおり設定します。

alarmNameは先ほど作成したアラーム2つを指定します。

{
  "source": ["aws.cloudwatch"],
  "detail-type": ["CloudWatch Alarm State Change"],
  "detail": {
    "alarmName": ["alarm-rsyslogd", "alarm-ssmagent"],
    "state": {
      "value": ["ALARM"]
    }
  }
}

ターゲットとしてはSQSを指定します。
※SQSの作成方法については過去記事に記載しているのでご参照ください。

この状態でアラームを発報するとSQSにもメッセージが格納されます。

以上で完了。

コメント

タイトルとURLをコピーしました