こんにちは、インフラエンジニアの綿引です。

今回は AWS CloudWatch で EC2 の Linux プロセスを監視する方法を記載したいと思います。

対象の方は以下のような方でしょうか。

  • 監視運用を導入するまでアラートをウォッチしてしておきたい
  • コストを抑えるためスモールスタートで監視を実施したい
  • 監視の項目に EC2 のプロセス監視も加えたい

また CloudWatch での監視にご興味のある方は、過去の CloudWatch 関連記事のリンクを貼っておきますので、こちらもよろしければご覧ください。

・Amazon CloudWatch + Amazon SNS + AWS Chatbot を使ってアラームを Slack に通知してみる

・CloudWatch で EC2 のメモリ・ディスク使用率を監視する

プロセス監視の実装

では早速プロセス監視の実装をしていきます。

今回使用するサービスは以下です。

使用サービス 用途
CloudWatch メトリクス プロセス監視のカスタムメトリクスを作成
CloudWatch Alarm プロセス監視のカスタムメトリクスを監視
EC2 CloudWatch エージェントの procstat プラグインでメトリクスを収集
Systems Manager Run Command EC2 の CloudWatch エージェントにパラメータストアの内容を適用
Systems Manager パラメータストア procstat プラグインの設定を保存

なお、OS は CentOS7 となっております。

前提

まず前提として、対象の EC2 に「CloudWatch エージェント」がインストールされている必要があります。

今回、プロセス監視には CloudWatch エージェントの「procstat プラグイン」で収集できる「pid_count」というメトリクスを使用しているためです。

procstat プラグインの情報は公式の以下に記載されています。

・procstat プラグインでプロセスメトリクスを収集する

CloudWatch エージェントのインストールがまだの場合は、まずインストールを行って頂ければと思います。

インストール方法は以下に書いてあるので、よろしければご覧ください。

・CloudWatch で EC2 のメモリ・ディスク使用率を監視する

Systems Manager パラメータストアの設定

次は CloudWatch エージェントに適用する procstat の設定をパラメータストアに記載します。

マネジメントコンソールから「AWS Systems Manager」→「パラメータストア」→「パラメータの作成」を選択して設定を入力していきます。

名前や説明は任意ですので適宜変更してください。

設定項目 設定値
名前 CloudWatch-Alarm-Process-Check
説明 CloudWatch-Alarm-Process-Check
利用枠 標準
タイプ 文字列
データ型 text
※ 以下参照

値に関しては、メトリクスに追加するプロセスが httpd でメトリクス収集間隔を 60秒 にしています。

{
    "metrics": {
        "metrics_collected": {
            "procstat": [
                {
                    "exe": "httpd",
                    "measurement": [
                        "pid_count"
                    ],
                    "metrics_collection_interval": 60
                }
            ]
        }
    }
}

もし複数のプロセスを監視したい場合は以下のように設定を可能です。

{
    "metrics": {
        "metrics_collected": {
            "procstat": [
                {
                    "exe": "httpd",
                    "measurement": [
                        "pid_count"
                    ],
                    "metrics_collection_interval": 60
                },
                {
                    "exe": "sshd",
                    "measurement": [
                        "pid_count"
                    ],
                    "metrics_collection_interval": 60
                },
                {
                    "exe": "crond",
                    "measurement": [
                        "pid_count"
                    ],
                    "metrics_collection_interval": 60
                }
            ]
        }
    }
}

パラメータストアの設定が完了したら、Run Command を使って CloudWatch エージェントに適用します。

Systems Manager Run Commandの実行

こちらもマネジメントコンソールから「AWS Systems Manager」→「Run Command」→「Run Command」を選択して設定を入力していきます。

基本デフォルトですが、以下のみ変更します。

設定項目 設定値
コマンドドキュメント AmazonCloudWatch-ManageAgent
Action Configure (append)
Optional Configuration Location ※ パラメータストアで作成した「名前」の部分
ターゲット ※ 任意の EC2

最後に「実行」を選択し、正常終了すればOKです。

私の場合、何回か繰り返していたら「実行」が失敗するようになってしまったのですが、古い設定が残っていたのが原因だったようです。

以下ディレクトリ配下のファイルを消してみたら正常に終了するようになりました。

/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/

ここまで完了すれば CloudWatch メトリクス にプロセスのメトリクスが追加されているはずです。

CloudWatch メトリクスの確認

マネジメントコンソールから「CloudWatch」→「メトリクス」→「CWAgent」を選択すると、「ImageId,InstanceId,InstanceType,exe,pid_finder」という項目が増えていました。

これを選択すると、先ほどパラメータストアで設定したプロセスのメトリクスが追加されているはずです。

※ 以下の画像はいろいろなプロセスを監視追加した場合のものです。

後は、CloudWatch Alarm で「プロセスが 0 になったら」や「プロセスが2以下になったら」など、適宜条件をつけて頂ければ監視が可能になります。

監視の設定方法については、上記のように手動でも設定可能ですが CloudFormation の方が楽なので、別記事で書こうと思います。

宜しければそちらもご覧ください。

最後に

今回 はAWS CloudWatch でプロセス監視を実施してみました。

設定自体は楽ですがサーバによって監視するプロセスが異なると思いますので、後はどこまで自動化できるかが大事かなと思いました。

次はまた CloudFormation に戻って、CloudWatch ダッシュボードの作成や、今回のプロセス監視を含めた CloudWatch Alarm の設定を書きたいと思います。

Join Us !

ウエディングパークでは、一緒に働く仲間を募集しています!
ご興味ある方は、お気軽にお問合せください(カジュアル面談から可)

採用情報を見る