プロセスの状態のフィルタ

このガイドでは、指定したフィルタ条件を満たす仮想マシン(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 の使用、またはダッシュボードでアラート ポリシーやグラフを作成する際に、ダイレクト フィルタモードにアクセスする方法については、次のドキュメントをご覧ください。

リソース 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_linecommand に論理 OR で結合されます。プロセスは、いずれかのフィルタに一致するとカウントされます。
  • usercommand_linecommand)に論理 AND で結合されます。 プロセスが一致するのは、user フィルタと command_linecommand)フィルタの両方に一致する場合のみです。
  • すべてのフィルタを適用すると、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")