[小ネタ]CloudWatch Agent で Agent 自身のプロセス監視を行なう

アノテーション株式会社のあのふじたです。
最近 CloudWatch Agent をインストールしている EC2 の Agent 自身のプロセス監視はどうすれば良いのかという疑問が湧くことがあったので試して見ました。

CloudWatch Agent とは

Cloudwatch Agent は Amazon が提供するツールで、 Amazon EC2 インスタンスやオンプレミスサーバーにインストールすることで メトリクス、ログ、トレースを収集できます。

参考URL:
aws/amazon-cloudwatch-agent
CloudWatch エージェントを使用して Amazon EC2 インスタンスとオンプレミスサーバーからメトリクス、ログ、トレースを収集する

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

DevelopersIOの過去記事 CloudWatch エージェントでプロセスの死活監視をする方法
今回はほぼこの手順を参考に設定を行います。

作業手順

1. EC2 にアタッチする IAM ロール 作成

EC2 にアタッチする IAM ロール を作成します。
CloudWatchAgent用のポリシーとSSMセッションマネージャーの管理ポリシーも付与しておきます。

参考URL: CloudWatch エージェントで使用する IAM ロールを作成する

2. CloudWatch Agent install

作成した EC2(Amazon Linux 2023) に SSM セッションマネージャー でログインし

$ sudo yum install amazon-cloudwatch-agent

3. CloudWatch Agent サービスの自動起動設定有効化と同時に起動

$ sudo systemctl enable amazon-cloudwatch-agent --now

4. プロセスの確認

$ sudo su -
$ pstree -qa

プロセス名は amazon-cloudwat と15文字制限で表示されているようですが
今回のプロセス監視設定ではこれでも問題なさそうです。
top でも念の為確認します。

5. 設定ファイルを作成
プロセス名が判明したので今回は手動で設定ファイルを作成します。
公式ドキュメントに従い /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json を作成します。
参考URL:CloudWatch エージェント設定ファイルを手動で保存するには

CloudWatch エージェント設定ファイルを手動で作成または編集する場合は、任意の名前を付けることができます。トラブルシューティングを簡単にするため、Linux サーバーでは、/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json、Windows Server を実行しているサーバーでは、$Env:ProgramData\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent.json という名前を付けることをお勧めします。

$ cd /opt/aws/amazon-cloudwatch-agent/etc/
$ vi amazon-cloudwatch-agent.json
{
    "metrics": {
        "metrics_collected": {
            "procstat": [
                {
                    "exe": "amazon-cloudwat",
                    "measurement": [
                        "pid_count"
                    ],
                    "metrics_collection_interval": 60
                }
            ]
        }
    }
}

今回は exe の正規表現の照合ルールを使用して amazon-cloudwat を指定します。
参考URL: procstat プラグインでプロセスメトリクスを収集する

6. 設定の反映
設定の反映のため Cloudwatch Agent を再起動しておきます。

$ sudo systemctl restart amazon-cloudwatch-agent

7. プロセス起動中の Cloudwatch Metrics 確認

マネジメントコンソールから確認します。

無事 amazon-cloudwat としてプロセスのメトリクスが取得できています。

では Cloudwatch Agent を停止してみます。

$ sudo systemctl stop amazon-cloudwatch-agent

8. プロセス停止中の Cloudwatch Metrics 確認
マネジメントコンソールから確認します。

停止後は amazon-cloudwatとしてプロセスのメトリクスが取得できなくなっています。

再度 Cloudwatch Agent を起動します

$ sudo systemctl start amazon-cloudwatch-agent

9. 再起動後の Cloudwatch Metrics 確認
マネジメントコンソールから確認します。

再度 amazon-cloudwat としてプロセスのメトリクスが取得できています。

まとめとして

プロセスが落ちている間はメトリクス取得ができないという想定通りの挙動でした。 どうしてもCloudWatch Agentを落としてはいけないような場合ではメトリクスのデータが一定時間取得できない状態をトリガーとしてアラート設定での通知や自動復旧を行えば対応できそうです。

アノテーション株式会社について

アノテーション株式会社はクラスメソッドグループのオペレーション専門特化企業です。
サポート・運用・開発保守・情シス・バックオフィスの専門チームが、最新 IT テクノロジー、高い技術力、蓄積されたノウハウをフル活用し、お客様の課題解決を行っています。
当社は様々な職種でメンバーを募集しています。「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、アノテーション株式会社 採用サイトをぜひご覧ください。