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

このガイドでは、指定したフィルタ条件を満たす仮想マシン(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

プロセスの状態フィルタでは、resource.type フィールドを設定して、プロセスをカウントする VM を指定する必要があります。このフィルタの値は、次のいずれかにする必要があります。

  • gce_instance
  • aws_ec2_instance

resource.type フィールドのみを指定した場合、すべての VM 上のプロセスがカウントされます。

  • 1 つの VM インスタンスを選択するには、metric.labels.instance_name フィルタ オブジェクトを追加します。
  • VM のグループを選択するには、group.id フィルタ オブジェクトを追加します。

resource.type フィールドの詳細については、Monitoring フィルタをご覧ください。

プロセス識別子

プロセスの状態のフィルタは、関数 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 は論理 OR によって command に結合されます。いずれかのフィルタに一致すると、プロセスがカウントされます。
  • 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 \")")

位置引数

位置引数を使用するには、フィルタ値のみを指定します。位置引数には次のルールが適用されます。

  • 単一の引数が指定されている場合、その引数はコマンドライン フィルタ オブジェクトとして解釈されます。
        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")