監控 VM 上的程序

根據預設,作業套件代理程式會收集指標,擷取 Compute Engine 虛擬機器 (VM) 上執行的程序相關資訊。這組指標稱為「程序指標」,可透過前置字元 agent.googleapis.com/processes 識別。

舊版 Monitoring 代理程式也會收集 Compute Engine 或 Amazon Elastic Compute Cloud (EC2) VM 的這些指標。Google Kubernetes Engine (GKE) 不會收集程序指標。

自 2021 年 8 月 6 日起,系統會開始針對這些指標收費,詳情請參閱「Google Cloud Observability 定價」頁面的「可計費指標」一節。這組程序指標歸類為可收費,但從未收取費用。

本文說明如何使用工具將程序指標視覺化、如何根據這些指標判斷擷取的資料量,以及如何盡量減少相關費用。

使用程序指標

您可以使用 Metrics Explorer 或自訂資訊主頁建立圖表,將程序指標資料視覺化。詳情請參閱「使用資訊主頁和圖表」。此外,Cloud Monitoring 還包含兩個預先定義的資訊主頁上的程序指標資料:

  • Monitoring 的「VM Instances」(VM 執行個體) 資訊主頁
  • Compute Engine 中的 VM 執行個體「詳細資料」資訊主頁

以下各節將說明這些資訊主頁。

Monitoring:查看匯總程序指標

如要在指標範圍內查看匯總的程序指標,請前往「VM Instances」(VM 執行個體) 資訊主頁的「Processes」(程序) 分頁標籤:

  1. 在 Google Cloud 控制台中,前往「Dashboards」(資訊主頁) 頁面:

    前往「Dashboards」(資訊主頁)

    如果您是使用搜尋列尋找這個頁面,請選取子標題為「Monitoring」的結果。

  2. 從清單中選取「VM 執行個體」資訊主頁。

  3. 按一下「程序」。

以下螢幕截圖顯示「監控程序」頁面範例:

「監控」頁面的「程序」頁面會顯示匯總程序指標。

您可以使用「程序」分頁中的圖表,找出指標範圍內消耗最多 CPU 和記憶體,以及磁碟使用率最高的程序。

Compute Engine:查看資源消耗量最高的 VM 成效指標

如要查看效能圖表,瞭解專案中消耗最多資源的五個 VM,請前往 VM 執行個體的「可觀測性」 Google Cloud 分頁:

  1. 前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面:

    前往「VM instances」(VM 執行個體) 頁面

    如果您是使用搜尋列尋找這個頁面,請選取子標題為「Compute Engine」的結果。

  2. 按一下「觀測能力」。

以下螢幕截圖顯示 Compute Engine「Observability」(觀測能力) 頁面的範例。

Compute Engine 的「觀測能力」頁面會顯示耗用特定資源的前五大 VM。

如要瞭解如何使用這些指標診斷 VM 問題,請參閱「排解 VM 效能問題」。

Compute Engine:查看各 VM 的程序指標

如要查看單一 Compute Engine 虛擬機器 (VM) 上執行的程序清單,以及資源消耗量最高的程序圖表,請前往 VM 的「Observability」(觀測能力) 分頁:

  1. 前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面:

    前往「VM instances」(VM 執行個體) 頁面

    如果您是使用搜尋列尋找這個頁面,請選取子標題為「Compute Engine」的結果。

  2. 在「執行個體」分頁中,按一下要檢查的 VM 名稱。

  3. 按一下「可觀測性」,查看這部 VM 的指標。

  4. 在「觀測能力」分頁的導覽窗格中,選取「程序」。

以下螢幕截圖顯示 Compute Engine「Processes」(程序) 頁面的範例:

Compute Engine 的「Processes」(程序) 頁面會顯示各 VM 的程序指標。

程序指標最多會保留 24 個月,因此您可以回溯查看這些指標,將資源耗用異常情形歸因於特定程序,或找出最耗費資源的程序。舉例來說,下圖顯示 CPU 資源消耗百分比最高的程序。您可以使用時間範圍選取器,變更圖表的時間範圍。日期範圍選取器提供預設值 (例如最近一小時),您也可以輸入自訂日期範圍。

您可以使用程序指標,找出耗用最多資源的程序。

「Running Processes」(執行中的程序) 表格會列出資源消耗量,類似於 Linux top 指令的輸出內容。根據預設,表格會顯示最新資料的數據匯報。 不過,如果您在圖表上選取過去的時間範圍,表格會顯示該範圍結束時執行的程序。

如要瞭解如何使用這些指標診斷 VM 問題,請參閱「排解 VM 效能問題」。

代理收集的程序指標

使用舊版 Monitoring 代理程式時,Linux 代理程式會從 Compute Engine VM 和 Amazon Elastic Compute Cloud (EC2) VM 上執行的程序,收集下表列出的所有指標。

您可以停用 Ops Agent (2.0.0 以上版本) 和 Linux 舊版 Monitoring 代理程式收集程序指標的功能。在 Windows 上,您可以透過 Ops Agent (2.0.0 以上版本) 停用程序指標的收集作業。不過,您無法停用舊版 Monitoring 代理程式的收集功能。在這種情況下,建議您升級至 Ops Agent 2.0.0 以上版本。

詳情請參閱「停用程序指標」。

程序指標表

判斷目前的擷取量

您可以使用 Metrics Explorer,查看處理程序指標的擷取資料量。請按照下列程序操作:

  1. 前往 Google Cloud 控制台的 「指標探索器」頁面:

    前往 Metrics Explorer

    如果您是使用搜尋列尋找這個頁面,請選取子標題為「Monitoring」的結果。

  2. 在查詢建立工具窗格的工具列中,選取名為 「PromQL」PromQL的按鈕。

  3. 如要查看 gce_instance 和 aws_ec2_instance 資源的程序指標點總數,請按照下列步驟操作:

    1. 輸入下列查詢:

      sum_over_time(
        sum by (resource_type) (
          label_replace(
            label_replace(
              sum(count_over_time({"agent.googleapis.com/processes/cpu_time", monitored_resource="gce_instance"}[1m])),
              "metric_suffix", "cpu_time", "", ""
            )
            or
            label_replace(
              sum(count_over_time({"agent.googleapis.com/processes/disk/read_bytes_count", monitored_resource="gce_instance"}[1m])),
              "metric_suffix", "disk_read_bytes_count", "", ""
            )
            or
            label_replace(
              sum(count_over_time({"agent.googleapis.com/processes/disk/write_bytes_count", monitored_resource="gce_instance"}[1m])),
              "metric_suffix", "disk_write_bytes_count", "", ""
            )
            or
            label_replace(
              sum(count_over_time({"agent.googleapis.com/processes/rss_usage", monitored_resource="gce_instance"}[1m])),
              "metric_suffix", "rss_usage", "", ""
            )
            or
            label_replace(
              sum(count_over_time({"agent.googleapis.com/processes/vm_usage", monitored_resource="gce_instance"}[1m])),
              "metric_suffix", "vm_usage", "", ""
            )
            or
            label_replace(
              sum(count_over_time({"agent.googleapis.com/processes/count_by_state", monitored_resource="gce_instance"}[1m])),
              "metric_suffix", "count_by_state", "", ""
            )
            or
            label_replace(
              sum(count_over_time({"agent.googleapis.com/processes/fork_count", monitored_resource="gce_instance"}[1m])),
              "metric_suffix", "fork_count", "", ""
            ),
            "resource_type", "gce_instance", "", ""
          )
          or
          label_replace(
            label_replace(
              sum(count_over_time({"agent.googleapis.com/processes/cpu_time", monitored_resource="aws_ec2_instance"}[1m])),
              "metric_suffix", "cpu_time", "", ""
            )
            or
            label_replace(
              sum(count_over_time({"agent.googleapis.com/processes/disk/read_bytes_count", monitored_resource="aws_ec2_instance"}[1m])),
              "metric_suffix", "disk_read_bytes_count", "", ""
            )
            or
            label_replace(
              sum(count_over_time({"agent.googleapis.com/processes/disk/write_bytes_count", monitored_resource="aws_ec2_instance"}[1m])),
              "metric_suffix", "disk_write_bytes_count", "", ""
            )
            or
            label_replace(
              sum(count_over_time({"agent.googleapis.com/processes/rss_usage", monitored_resource="aws_ec2_instance"}[1m])),
              "metric_suffix", "rss_usage", "", ""
            )
            or
            label_replace(
              sum(count_over_time({"agent.googleapis.com/processes/vm_usage", monitored_resource="aws_ec2_instance"}[1m])),
              "metric_suffix", "vm_usage", "", ""
            )
            or
            label_replace(
              sum(count_over_time({"agent.googleapis.com/processes/count_by_state", monitored_resource="aws_ec2_instance"}[1m])),
              "metric_suffix", "count_by_state", "", ""
            )
            or
            label_replace(
              sum(count_over_time({"agent.googleapis.com/processes/fork_count", monitored_resource="aws_ec2_instance"}[1m])),
              "metric_suffix", "fork_count", "", ""
            ),
            "resource_type", "aws_ec2_instance", "", ""
          )
        )[1d:]
      )
      
    2. 按一下 [Run query] (執行查詢),產生的圖表會顯示各資源類型的值。

停用程序指標收集功能

您可以透過多種方式,停用 Ops Agent (2.0.0 以上版本) 和 Linux 舊版 Monitoring 代理程式的指標收集功能。

代理程式只能在 Compute Engine VM 上執行,因此這些程序僅適用於該平台。

如果您在 Windows 上執行 2.0.0 以下版本或舊版 Monitoring 代理程式,就無法停用 Ops Agent 的收集作業。如要在 Windows 上停用這些指標的收集作業,建議您升級至 Ops Agent 2.0.0 以上版本。詳情請參閱「安裝 Ops Agent」。

一般程序如下:

  1. 連線至 VM。

  2. 複製現有設定檔做為備份。請將備份副本儲存在代理程式設定目錄以外的位置,以免代理程式嘗試載入這兩個檔案。舉例來說,下列指令會複製 Linux Monitoring 代理程式的設定檔:

    cp /etc/stackdriver/collectd.conf BACKUP_DIR/collectd.conf.bak
    
  3. 請使用下列其中一節所述的選項變更設定:

  4. 重新啟動代理程式,即可套用新設定:

    • 舊版 Monitoring 代理程式:sudo service stackdriver-agent restart
    • 作業套件代理程式:sudo service google-cloud-ops-agent restart
  5. 確認系統不再為這個 VM 收集程序指標:

    1. 前往 Google Cloud 控制台的「Metrics Explorer」頁面:

      前往 Metrics Explorer

      如果您是使用搜尋列尋找這個頁面,請選取子標題為「Monitoring」的結果。

    2. 在查詢建立工具窗格的工具列中,選取名稱為 「PromQL」PromQL的按鈕。

    3. 如果是 gce_instance 資源,請輸入下列查詢,並將 VM_NAME 替換為這個 VM 的名稱:

      rate({"agent.googleapis.com/processes/cpu_time", monitored_resource="gce_instance", metadata_system_name="VM_NAME"}[1m])
      
    4. 按一下 [Run Query] (執行查詢)。

Linux 或 Windows 上的 Ops Agent

Ops Agent 設定檔的位置取決於作業系統:

  • Linux:/etc/google-cloud-ops-agent/config.yaml
  • Windows 系統:C:\Program Files\Google\Cloud Operations\Ops Agent\config\config.yaml

如要停用 Ops Agent 收集所有程序指標的功能,請在 config.yaml 檔案中加入下列內容:

metrics:
  processors:
    metrics_filter:
      type: exclude_metrics
      metrics_pattern:
      - agent.googleapis.com/processes/*

這樣一來,metrics 服務中套用至預設管道的 metrics_filter 處理器,就不會收集程序指標。

如要進一步瞭解 Ops Agent 的設定選項,請參閱「設定 Ops Agent」。

Linux 上的舊版 Monitoring 代理程式

如要停用舊版 Monitoring 代理程式的程序指標收集功能,可以採取下列做法:

以下各節將說明各個選項,並列出相關優點和風險。

修改代理程式的設定檔

使用這個選項時,您會直接編輯代理程式的主要設定檔 /etc/stackdriver/collectd.conf,移除啟用程序指標收集功能的區段。

程序

您需要從 collectd.conf 檔案中刪除三組項目:

  1. 刪除下列 LoadPlugin 指令和外掛程式設定:

    LoadPlugin processes
    
    <Plugin "processes">
      ProcessMatch "all" ".*"
      Detail "ps_cputime"
      Detail "ps_disk_octets"
      Detail "ps_rss"
      Detail "ps_vm"
    </Plugin>
    
  2. 刪除下列 PostCacheChain 指令,以及 PostCache 鏈結的設定:

    PostCacheChain "PostCache"
    
    <Chain "PostCache">
      <Rule "processes">
        <Match "regex">
          Plugin "^processes$"
          Type "^(ps_cputime|disk_octets|ps_rss|ps_vm)$"
        </Match>
        <Target "jump">
          Chain "MaybeThrottleProcesses"
        </Target>
        Target "stop"
      </Rule>
    
      <Rule "otherwise">
        <Match "throttle_metadata_keys">
          OKToThrottle false
          HighWaterMark 5700000000  # 950M * 6
          LowWaterMark 4800000000  # 800M * 6
        </Match>
        <Target "write">
           Plugin "write_gcm"
        </Target>
      </Rule>
    </Chain>
    
  3. 刪除 PostCache 鏈結使用的 MaybeThrottleProcesses 鏈結:

    <Chain "MaybeThrottleProcesses">
      <Rule "default">
        <Match "throttle_metadata_keys">
          OKToThrottle true
          TrackedMetadata "processes:pid"
          TrackedMetadata "processes:command"
          TrackedMetadata "processes:command_line"
          TrackedMetadata "processes:owner"
        </Match>
        <Target "write">
           Plugin "write_gcm"
        </Target>
      </Rule>
    </Chain>
    
優點和風險
  • 優點
    • 由於系統不會收集指標,因此代理程式耗用的資源會減少。
    • 如果你對 collectd.conf 檔案進行其他變更,或許可以保留這些變更。
  • 風險
    • 您必須使用 root 帳戶,才能編輯這個設定檔。
    • 這樣做可能會在檔案中引入錯別字。

取代代理程式的設定檔

這個選項會將代理程式的主要設定檔,替換為已移除相關部分的預先編輯版本。

程序
  1. 從 GitHub 存放區將預先編輯的 collectd-no-process-metrics.conf 檔案下載至 /tmp 目錄:

    cd /tmp && curl -sSO https://raw.githubusercontent.com/Stackdriver/agent-packaging/master/collectd-no-process-metrics.conf
    
  2. 將現有的 collectd.conf 檔案替換為預先編輯的檔案:

    cp /tmp/collectd-no-process-metrics.conf /etc/stackdriver/collectd.conf
    
優點和風險
  • 優點
    • 您減少了代理程式耗用的資源,因為系統不會收集指標。
    • 您不必手動編輯 root 檔案。
    • 設定管理工具可以取代檔案。
  • 風險
    • 如果您對 collectd.conf 檔案進行其他變更,則必須將這些變更合併到替換檔案中。

疑難排解

本文所述程序會變更代理程式設定,因此最可能發生下列問題:

  • 權限不足,無法編輯設定檔。設定檔必須透過 root 帳戶編輯。
  • 直接編輯設定檔時,可能會不小心輸入錯誤。

如要瞭解如何解決其他問題,請參閱「排解 Monitoring 代理程式問題」。

Windows 上的舊版 Monitoring 代理程式

您無法停用在 Windows VM 上執行的舊版 Monitoring 代理程式收集程序指標。這個代理無法設定。 如要在 Windows 上停用這些指標的收集作業,建議您升級至 Ops Agent 2.0.0 以上版本。詳情請參閱「安裝 Ops Agent」。

如果您執行的是 Ops Agent,請參閱「Linux 或 Windows 上的 Ops Agent」。