このガイドでは、指定したフィルタ条件を満たす仮想マシン(VM)で実行されているプロセスの数をカウントする方法について説明します。 Cloud Monitoring API または Google Cloud コンソールを使用して、プロセスをカウントするアラート ポリシーとグラフを作成できます。
たとえば、特定のプロセスの CPU 使用率を確認するなど、プロセスの実行に関する情報が必要な場合、プロセスの指標をご覧ください。
プロセスをカウントするために使用される Monitoring フィルタの構造は、これらのフィルタを使用してモニタリング対象リソースまたは指標タイプを指定するために使用される構造に似ています。 一般的な情報については、Monitoring フィルタをご覧ください。
始める前に
指標、時系列、モニタリング対象リソースに精通されていない場合は、指標、時系列、リソースをご覧ください。
カウントされるプロセス
Monitoring は、プロセスを呼び出したコマンドラインに正規表現を適用してプロセスをカウントします。プロセスに使用可能なコマンドライン フィールドがない場合、そのプロセスはカウントされません。
プロセスをカウントできるかどうかを判断する方法の 1 つは、Linux ps
コマンドの出力を確認することです。
ps aux | grep nfs
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1598 0.0 0.0 0 0 ? S< Oct25 0:00 [nfsd4]
root 1639 0.0 0.0 0 0 ? S Oct25 2:33 [nfsd]
root 1640 0.0 0.0 0 0 ? S Oct25 2:36 [nfsd]
COMMAND
列のエントリが角かっこで囲まれている場合([nfsd]
など)、プロセスのコマンドライン情報は利用できないため、プロセスはカウントされません。
プロセスの状態フィルタの構造
プロセスの状態フィルタは、カウントするプロセスと、カウントするプロセスがある 1 つ以上のリソースを識別します。たとえば、次の JSON は、Compute Engine VM インスタンスでプロセス数が 30 未満の場合に通知を送信するアラート ポリシーを表しています。
{ "displayName": "Count all processes", "conditionThreshold": { "aggregations": [], "comparison": "COMPARISON_LT", "duration": "0s", "filter": "select_process_count(\"*\") resource.type=\"gce_instance\"", "thresholdValue": 30, "trigger": { "count": 1 } } }
この例では、filter
ステートメントの値は 2 つの句を含む文字列です。最初の句 select_process_count(\"*\")
は、すべてのプロセスをカウントすることを指定します。2 番目の句 resource.type=\"gce_instance\"
は、Compute Engine VM がモニタリングされることを示します。
Google Cloud コンソールを使用する場合は、ダイレクト フィルタ モードを使用して Monitoring フィルタの値を入力します。ただし、部分文字列を保護するエスケープはすべて削除してください。 たとえば、Compute Engine VM のすべてのプロセスをカウントするには、次のように入力します。
select_process_count("*") resource.type="gce_instance"
Metrics Explorer の使用、またはダッシュボードでアラート ポリシーやグラフを作成する際に、ダイレクト フィルタモードにアクセスする方法については、次のドキュメントをご覧ください。
- アラート: ダイレクト フィルタモード
- グラフ: ダイレクト フィルタモード
- Metrics Explorer: ダイレクト フィルタモード
リソース ID
プロセスの状態フィルタでは、プロセスがカウントされる VM を指定する resource.type
フィールドを設定する必要があります。このフィルタの値は次のいずれかにする必要があります。
gce_instance
aws_ec2_instance
resource.type
フィールドのみを指定した場合、すべての VM 上のプロセスがカウントされます。
- 単一の VM インスタンスを選択するには、
metric.labels.instance_name
フィルタ オブジェクトを追加します。 - VM のグループを選択するには、
group.id
フィルタ オブジェクトを追加します。
resource.type
フィールドの詳細については、Monitoring フィルタをご覧ください。
プロセス ID
プロセスの状態のフィルタは、関数 select_process_count
を呼び出す必要があります。
この関数の引数は、カウントするプロセスを識別します。
select_process_count
の呼び出しで指定できるフィルタ オブジェクトは 3 つあります。
command_line
(またはmetric.labels.command_line
): このフィルタは、プロセスの開始に使用されるコマンドラインに適用されます。コマンドラインの 1,024 文字より後の部分は切り捨てられるため、この上限を超えるコマンドライン内のテキストは照合できません。command
(またはmetric.labels.command
): このフィルタは、プロセスの開始に使用されるコマンドラインに適用されます。コマンドの 1024 文字より後の部分は切り捨てられるため、この上限を超えるコマンド内のテキストは照合できません。user
(またはmetric.labels.user
): このフィルタは、プロセスを開始したユーザーに適用されます。
select_process_count
の呼び出しでは、位置引数または名前付き引数のいずれかを使用できます。名前付き引数を使用する場合は、フィルタ オブジェクト、等号ステートメント、=
、値を指定する必要があります。位置引数を使用する場合は、値のみを指定します。
大文字と小文字を区別する文字列テストでは、プロセスがフィルタに一致するかどうかを判断します。
フィルタ オブジェクトの値は、次のいずれかです。
- 文字列(完全一致)
*
(ワイルドカード)has_substring(string)
starts_with(string)
ends_with(string)
monitoring.regex.full_match(string)
複数のフィルタを指定すると、次のルールが適用されます。
command_line
はcommand
に論理 OR で結合されます。プロセスは、いずれかのフィルタに一致するとカウントされます。user
はcommand_line
(command
)に論理 AND で結合されます。 プロセスが一致するのは、user
フィルタとcommand_line
(command
)フィルタの両方に一致する場合のみです。- すべてのフィルタを適用すると、
user
フィルタとcommand_line
フィルタまたはcommand
フィルタのいずれかに一致するプロセスがカウントされます。
名前付き引数
名前付き引数を使用するには、フィルタ名、等号ステートメント、=
、フィルタ値を指定します。名前付き引数は、任意の順序で指定できます。
たとえば、コマンドラインに文字列 nginx
が含まれている場合、以下は root で開始されたすべてのプロセスに一致します。
select_process_count("command_line=has_substring(\"nginx\")","user=root")
この例では、コマンドラインで正規表現一致を使用しています。
select_process_count("command_line=monitoring.regex.full_match(\".*nginx.*\")","user=starts_with(\"root\")")
この例では、コマンドラインが /bin/bash
であるすべてのプロセスをカウントします。
select_process_count("command=/bin/bash")
この例では、コマンドラインが /bin/bash
で始まるユーザー www
によって開始されたすべてのプロセスをカウントします。
select_process_count("user=www", "command_line=starts_with(\"/bin/bash \")")
位置引数
位置引数を使用するには、フィルタ値のみを指定します。位置引数には次のルールが適用されます。
- 1 つの引数が指定されている場合、その引数はコマンドライン フィルタ オブジェクトとして解釈されます。
select_process_count("*") select_process_count("/sbin/init") select_process_count("starts_with(\"/bin/bash -c\")") select_process_count("ends_with(\"--alsologtostderr\")") select_process_count("monitoring.regex.full_match(\".*nginx.*\")")
- 2 つの引数が指定されている場合、最初の引数はコマンドライン フィルタとして解釈され、2 番目の引数はユーザー フィルタとして解釈されます。プロセスは、両方のフィルタ オブジェクトに一致する場合にカウントされます。
select_process_count("/sbin/init", "root")