程序健康狀態篩選器

本指南說明如何計算虛擬機器 (VM) 上符合指定篩選條件的程序數量。您可以使用 Cloud Monitoring API 或 Google Cloud 控制台,建立快訊政策和圖表來計算程序。

如要瞭解執行中的程序資訊 (例如特定程序的 CPU 使用率),請參閱程序指標

用於計算程序的監控篩選器結構,與用於指定受監控資源或指標類型的篩選器結構類似。如需一般資訊,請參閱「監控篩選器」。

事前準備

如果您不熟悉指標、時間序列和受監控資源,請參閱「指標、時間序列和資源」。

計入的程序

監控功能會對叫用程序的指令列套用規則運算式,藉此計算程序數量。如果程序沒有可用的指令列欄位,就不會計入。

如要判斷程序是否可計數,請查看 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]),系統就無法取得該程序的指令列資訊,因此不會將該程序計入。

程序健康狀態篩選器結構

程序健康狀態篩選器會識別要計算的程序,以及要計算程序的資源 (一或多個)。舉例來說,下列 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 陳述式的值是含有兩個子句的字串。第一個子句 select_process_count(\"*\") 會指定所有程序都會計入。第二個子句 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 上的程序:

  • 如要選取單一 VM 執行個體,請新增 metric.labels.instance_name 篩選器物件。
  • 如要選取 VM 群組,請新增 group.id 篩選器物件。

如要進一步瞭解 resource.type 欄位,請參閱監控篩選器

程序 ID

程序健康狀態篩選器必須呼叫 select_process_count 函式。 這個函式的引數會識別要計算的程序。

您可以在呼叫 select_process_count 時指定下列三個篩選器物件:

  • command_line (或 metric.labels.command_line):這個篩選器適用於用來啟動程序的指令列。指令列在 1024 個字元後會遭到截斷,因此,系統無法針對指令列中超出該上限的文字進行比對。

  • 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。程序只要符合任一篩選條件,就會列入計算。
  • user 會透過邏輯 AND 運算子與 command_line (command) 聯結。 只有在程序同時符合 user 篩選器和 command_line (command) 篩選器時,才會視為相符。
  • 如果您套用所有篩選器,程序符合 user 篩選器,且符合 command_linecommand 篩選器時,就會列入計算。

具名引數

如要使用具名引數,請指定篩選器名稱、等號陳述式、=,然後指定篩選器值。具名引數的指定順序不限。

舉例來說,如果指令列包含字串 nginx,下列指令會比對由根目錄啟動的所有程序:

     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")

這個範例會計算使用者 www 啟動的所有程序,這些程序的指令列開頭為 /bin/bash

     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.*\")")
  • 如果提供兩個引數,第一個引數會解讀為指令列篩選器,第二個引數則為使用者篩選器。程序符合下列兩個篩選器物件時,就會列入計算:
        select_process_count("/sbin/init", "root")