CloudWatch Agent でProcstatプラグインの利用が可能になりました

こんにちは 園部です。

前回、CloudWatchの複数設定ファイルと同じタイミングでリリースされた「Procstatプラグイン」について、書いていきます。

Amazon CloudWatch エージェントが Procstat プラグインおよび複数の設定ファイルのサポートを追加

前回投稿した「複数設定ファイル」をあわせて読んでいただくと理解しやすいかもしれません。

CloudWatch Agent が複数設定ファイルの利用が可能になりました

Procstat とは?

Linuxでは、/proc 配下にシステム上のリソース情報があります。 CPUやメモリ情報を確認するために、「/proc/cpuinfo」や「/proc/meminfo」を確認されたことがあるのではないでしょうか。

同じディレクトリ内に、数字のディレクトリがあり(プロセスID)、そちらにプロセスID単位での情報ファイルがあります。 その中の一つに「stat」があります。 ここには各プロセスの情報があります。

$ sudo ls /proc/3534/
attr        comm                fd      loginuid        mountstats  oom_score_adj   sched           stack   timers
autogroup   coredump_filter     fdinfo  map_files       net         pagemap         schedstat       stat    timerslack_ns
auxv        cpuset              gid_map maps            ns          patch_state     sessionid       statm   uid_map
cgroup      cwd                 io      mem numa_maps   personality setgroups       status          wchan
clear_refs  environ             latency mountinfo       oom_adj     projid_map      smaps           syscall
cmdline     exe                 limits  mounts          oom_score   root            smaps_rollup    task

Procstatプラグインとは?

procstat プラグインでは、個別のプロセスからメトリクスを収集できます。このプラグインは、Linux サーバーと、Windows Server 2008 以降を実行するサーバーでサポートされます。

(中略)

procstat プラグインを使用するには、CloudWatch エージェント設定ファイルの metrics_collected セクションに procstat セクションを追加します。モニタリングするプロセスを指定するには 3 つの方法があります。これらの方法のうち使用できるのは 1 つのみですが、この 1 つの方法を使用して複数のプロセスを指定してモニタリングできます。

・pid_file: 作成するプロセス識別番号 (PID) ファイルの名前でプロセスを選択します。

・exe: 正規表現の照合ルールを使用して、指定した文字列と一致するプロセス名のプロセスを選択します。詳細については、「Syntax」を参照してください。

・pattern: プロセスの起動に使用するコマンドラインでプロセスを選択します。正規表現の照合ルールを使用して指定した文字列と一致するコマンドラインを持つすべてのプロセスが選択されます。コマンドで使用されるパラメータやオプションも含めて、コマンドライン全体がチェックされます。

以上の複数のセクションを含めた場合でも、CloudWatch エージェントで使用される方法は 1 つのみです。複数のセクションを指定すると、CloudWatch エージェントは pid_file セクションを使用します (ある場合)。これが存在しない場合は、exe セクションを使用します。

(公式ドキュメントより) https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-procstat-process-metrics.html

取得出来るメトリクスは以下の通りです。

メトリクス名 利用可能なサーバー 説明
cpu_time Linux プロセスで CPU を使用する時間。このメトリクスは、1/100 秒単位で測定されます。

単位: カウント

cpu_time_system Linux、Windows Server プロセスがシステムモードになっている時間。このメトリクスは、1/100 秒単位で測定されます。

タイプ: 浮動小数点

単位: カウント

cpu_time_user Linux、Windows Server プロセスがユーザーモードになっている時間。このメトリクスは、1/100 秒単位で測定されます。

単位: カウント

cpu_usage Linux、Windows Server 任意の容量でプロセスがアクティブになっている時間の割合。

単位: パーセント

memory_data Linux プロセスで使用するデータ用メモリの量。

単位: バイト

memory_locked Linux プロセスがロックしているメモリの量。

単位: バイト

memory_rss Linux、Windows Server プロセスが使用している実際のメモリ (常駐セット) の量。

単位: バイト

memory_stack Linux プロセスが使用しているスタックメモリの量。

単位: バイト

memory_swap Linux プロセスが使用しているスワップメモリの量。

単位: バイト

memory_vms Linux、Windows Server プロセスが使用している仮想メモリの量。

単位: バイト

read_bytes Linux、Windows Server プロセスがディスクから読み取ったバイト数。

単位: バイト

write_bytes Linux、Windows Server プロセスがディスクに書き込んだバイト数。

単位: バイト

read_count Linux、Windows Server プロセスが実行したディスク読み取りオペレーションの数。

単位: カウント

write_count Linux、Windows Server プロセスが実行したディスク書き込みオペレーションの数。

単位: カウント

involuntary_context_switches Linux プロセスのコンテキストが意図せずに切り替えられた回数。

単位: カウント

voluntary_context_switches Linux プロセスのコンテキストが意図的に切り替えられた回数。

単位: カウント

realtime_priority Linux プロセスで現在使用されているリアルタイム優先度。

単位: カウント

nice_priority Linux プロセスで現在使用されている nice 優先度。

単位: カウント

signals_pending Linux プロセスによる処理待ち中のシグナルの数。

単位: カウント

rlimit_cpu_time_hard Linux プロセスの CPU 時間のハードリソース制限。

単位: カウント

rlimit_cpu_time_soft Linux プロセスの CPU 時間のソフトリソース制限。

単位: カウント

rlimit_file_locks_hard Linux プロセスのファイルロックのハードリソース制限。

単位: カウント

rlimit_file_locks_soft Linux プロセスのファイルロックのソフトリソース制限。

単位: カウント

rlimit_memory_data_hard Linux プロセスのデータ用メモリに関するハードリソース制限。

単位: バイト

rlimit_memory_data_soft Linux プロセスのデータ用メモリに関するソフトリソース制限。

単位: バイト

rlimit_memory_locked_hard Linux プロセスのロックされたメモリに関するハードリソース制限。

単位: バイト

rlimit_memory_locked_soft Linux プロセスのロックされたメモリに関するソフトリソース制限。

単位: バイト

rlimit_memory_rss_hard Linux プロセスの物理メモリに関するハードリソース制限。

単位: バイト

rlimit_memory_rss_soft Linux プロセスの物理メモリに関するソフトリソース制限。

単位: バイト

rlimit_memory_stack_hard Linux プロセススタックに関するハードリソース制限。

単位: バイト

rlimit_memory_stack_soft Linux プロセススタックに関するソフトリソース制限。

単位: バイト

rlimit_memory_vms_hard Linux プロセスの仮想メモリに関するハードリソース制限。

単位: バイト

rlimit_memory_vms_soft Linux プロセスの仮想メモリに関するソフトリソース制限。

単位: バイト

rlimit_nice_priority_hard Linux プロセスの nice 優先度値の上限に関するハードリソース制限。

単位: カウント

rlimit_nice_priority_soft Linux プロセスの nice 優先度値の上限に関するソフトリソース制限。

単位: カウント

rlimit_num_fds_hard Linux プロセスのファイル記述子に関するハードリソース制限。

単位: カウント

rlimit_num_fds_soft Linux プロセスのファイル記述子に関するソフトリソース制限。

単位: カウント

rlimit_realtime_priority_hard Linux プロセスのリアルタイム優先度値の上限に関するハードリソース制限。

単位: カウント

rlimit_realtime_priority_soft Linux プロセスのリアルタイム優先度値の上限に関するソフトリソース制限。

単位: カウント

rlimit_signals_pending_hard Linux プロセスへの配信待ち中のシグナル数に関するハードリソース制限。

単位: カウント

rlimit_signals_pending_soft Linux プロセスへの配信待ち中のシグナル数に関するソフトリソース制限。

単位: カウント

num_fds Linux プロセスが使用しているファイル記述子の数。

単位: カウント

num_threads Linux、Windows Server プロセス内のスレッドの数。

単位: カウント

pid Linux、Windows Server プロセス識別子 (ID)。

単位: カウント

pid_count Linux、Windows Server プロセスに関連付けられたプロセス ID の数。

このメトリクス名は、Linux サーバーでは procstat_lookup_pid_count、Windows Server では procstat_lookup pid_count です。

単位: カウント

やってみる

今回の想定した利用ケース

(1) まずは、常時監視する項目について、CloudWatch Agentにて、Agentインストール時に取得するメトリクスを指定し、監視を行います。

(2) その上で、特定プロセス(今回は、httpd)に関する調査を行う想定で、httpd用Procstatプラグイン設定の作成と適用を行い、メトリクスを取得します。

(3) 調査完了後に、対象サーバからProcstatプラグイン設定との紐付きを破棄します。

1. CloudWatch Agent 初期設定

初期設定については、以下などを参考に設定します。

新しいCloudWatch Agentでメトリクスとログの収集が行なえます

CloudWatch Agent が複数設定ファイルの利用が可能になりました

2. Prcostatプラグイン設定作成とアタッチ

Systems Manager パラメータストアに、Procstat専用項目の設定ファイルを作成します。

  • pid_file にて、「httpd」を指定しています。
  • 取得するメトリクスは、"measurement" で指定している項目となります。
  • 取得する期間はデフォルト60秒です。(何も指定しないのでデフォルト)
{
    "metrics": {
        "metrics_collected": {
            "procstat": [
                {
                    "pid_file": "/var/run/httpd/httpd.pid",
                    "measurement": [
                        "cpu_time",
                        "cpu_usage",
                        "memory_locked",
                        "memory_rss",
                        "memory_vms",
                        "num_threads",
                        "pid",
                        "pid_count"
                    ]
                }
            ]
        }
    }
}

対象サーバ内へログインして、設定ファイルを適用します。

$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a append-config -m ec2 -c ssm:Procstat -s

しばらくすると、CloudWatchに、processに関する項目が取得されます

取得したメトリクス(数値表示)です。

3. Prcostatプラグイン設定のデタッチ

対象サーバ内へログインして、Procstatプラグイン設定との紐付きを破棄します。

$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a remove-config -m ec2 -c ssm:Procstat -s
$ ls -l /etc/amazon/amazon-cloudwatch-agent/amazon-cloudwatch-agent.d
合計 4
-rwxr-xr-x 1 root root 1419  2月  5 04:07 ssm_AmazonCloudWatch-linux

まとめ

今回は、Procstatプラグインで、常時メトリクス取得するのではなく、調査などのスポットで利用することを想定しました。 Procstatプラグインで取得するメトリクスは、カスタムメトリクスのため有料ですので、ご注意ください。

また、プロセス数(pid_count)を取得することが出来るため、そちらをプロセス監視として利用するケースも考えられるかと思います。 大量のサーバに、多様な設定をするのは、難易度が高く、設定ファイルを複数に分けることやSystemesManagerをうまく利用することが必要となるかと思います。