排解代理程式安裝問題

這個頁面可協助您診斷安裝或執行 Monitoring 代理程式過程中的問題。

檢查清單

如果您在安裝或使用 Monitoring 代理程式時遇到問題,請檢查以下項目:

  • 如果 Linux 安裝指令產生錯誤,請檢查您的安裝指令前置字元是否為 sudo

  • 確認代理程式服務正在您的 VM 執行個體上執行:

    • 針對 Windows VM,請使用下列 PowerShell 指令:

      Get-Service -Name StackdriverMonitoring
      

      搜尋名稱為 Stackdriver Monitoring 的服務。如果代理程式並未執行,您可能需要重新啟動代理程式。

    • 針對 Linux VM,請使用下列指令:

      sudo service stackdriver-agent status
      

      如果代理程式未執行,您可能需要使用以下指令來重新啟動代理程式:

      sudo service stackdriver-agent restart
      

      如果重新啟動失敗,且記錄輸出顯示為「Disabled via metadata」(已透過中繼資料停用),代表您可能正在執行來自 Cloud Marketplace 的映像檔,其中 Monitoring 代理程式預設為停用。這項功能由 google-monitoring-enable 執行個體中繼資料鍵 (其值為 0) 所控管。如要重新啟用代理程式,請移除該鍵,或將值設為 1 (請參閱設定執行個體中繼資料)。

      如果代理程式未透過中繼資料停用,請重新安裝代理程式。請參閱下方的重新安裝代理程式一節。

  • 查看代理程式是否已將錯誤訊息寫入記錄檔。

    • 在 Windows 中,Monitoring 代理程式會將訊息寫入 Windows 事件記錄檔。

    • 在 Linux 中,Monitoring 代理程式是 collectd 套件形式,且會將訊息記錄到 /var/log/syslog/var/log/messages。記錄訊息的前置字元為 collectdstackdriver-agent

      • 如果您看到 HTTP 429 錯誤,表示您可能已經超過 Monitoring API 配額。您可以在 GCP 主控台中選取 [APIs & services] (API 和服務) > [Dashboard] (資訊主頁),以查看可用配額。請選擇 [Monitoring API]。

      • 如果您看到 Proxy 問題,請檢查 HTTP Proxy 的設定是否正確無誤。如需操作說明,請參閱在 Linux 上安裝在 Windows 上安裝各節。

      • 如果您看到 API 存取權或授權問題,或「Unable to determine collectd endpoint」(無法確定 collectd 端點) 這類錯誤訊息,請參閱下方的驗證專案與憑證一節。

      • 如果您在記錄中看到「Unsupported collectd plugin/type combination」(不支援的 collectd 外掛程式/類型組合) 或「Unsupported collectd id」(不支援的 collectd ID) 錯誤,表示您可能傳送了不支援的代理程式指標。如果您修改了其中一個代理程式第三方應用程式設定,就可能發生這種情況。如要還原變更,您可以依照相關說明文件頁面中的操作說明,重新安裝特定外掛程式的設定。如果您要使用代理程式將這個指標傳送至 Monitoring,請先查看如何將指標轉換為自訂指標

  • 如果代理程式似乎正常執行,但您未取得任何資料,或快訊政策未如預期運作,則請檢查代理程式是否將資料傳送至正確的專案。請參閱下方的驗證專案與憑證一節。

驗證專案與憑證

如果代理程式回報存取權或授權錯誤,或者代理程式似乎正常執行,但卻沒有任何資料,或快訊政策未如預期運作,請您檢查 VM 執行個體的憑證是否正確,包括憑證所指定的專案是否正確:

  • 如要查看資料是否已到達 Monitoring,請嘗試讀取一些時間序列資料。如需相關操作說明,請參閱驗證代理程式與專案的連接。如果您看到了資料,表示代理程式沒有問題。

  • 如果您使用具有標準 (而非私密金鑰) 憑證的 Google Compute Engine VM 執行個體,即表示資料不可能進入錯誤專案,但您的憑證仍可能不足。如要瞭解憑證,請參閱授權代理程式。如要驗證您的憑證,請參閱驗證 Compute Engine 憑證

  • 如果您使用 Amazon EC2 VM 執行個體,或在 Google Compute Engine 執行個體中使用私密金鑰憑證,則憑證可能會無效,或憑證可能來自錯誤專案。針對 AWS 帳戶,代理程式使用的專案必須為 AWS 連接器專案,通常命名為 "AWS Link..."。如要瞭解憑證,請參閱授權代理程式。如要驗證您的憑證,請參閱驗證私密金鑰憑證

如果仍未解決問題,請參閱重新安裝代理程式

驗證代理程式資料

如要驗證代理程式是否正確傳送指標,請使用 Monitoring API 的 timeseries.list 方法,從 VM 執行個體中尋找最新的時間序列資料。您可以使用方法說明文件頁面底部的 APIs Explorer 表單呼叫這個方法。如果您沒有看到任何資料,表示代理程式可能將資料傳送至錯誤的專案。如要檢查這一點,請參閱驗證專案與憑證一文。

以下是使用 timeseries.list 方法的詳細操作說明:

  1. 確定安裝代理程式的 VM 執行個體的執行個體 ID:

    • Compute Engine:前往 Compute Engine 的執行個體詳細資料頁面。按一下頁面底部的 [Equivalent REST] (對等 REST)。ID 為 19 位數的數字。

    • Amazon EC2:每個執行個體的 ID 都顯示在執行個體清單中。ID 類似於 i-1a2b3c4d

  2. 前往 timeseries.list 方法的說明文件頁面:

    開啟 timeseries.list 頁面

  3. 在「Try it!」(試試看!) 部分中,按一下 [Authorize requests using OAuth 2.0] (使用 OAuth 2.0 授權要求) 切換按鈕。接受表單且不進行任何變更,然後按一下 [Authorize] (授權)

  4. 填寫 APIs Explorer 表單:

    1. 將「name」(名稱) 設定為包含 VM 執行個體的專案,前面加上 projects/,例如 projects/[YOUR_PROJECT_ID]。如果是 Amazon EC2 執行個體,您必須針對 Amazon 帳戶使用 AWS 連接器專案,其名稱的開頭通常為 "AWS Link"

    2. 將「filter」(篩選器) 設定為下面此行指令碼,以從 VM 執行個體中選擇代理程式指標。將此行指令碼複製並貼到 APIs Explorer 中,然後變更 VM 執行個體 ID:

      metric.type = "agent.googleapis.com/memory/bytes_used" AND resource.label.instance_id = "[YOUR-VM-INSTANCE-ID]"
      
    3. 設定搜尋時間間隔。您需要大約五分鐘的間隔時間:

      • 將「interval.endTime」設定為目前的格林威治標準時間 (GMT),這個時間可在 time.is/GMT 中找到。時間格式必須如以下範例所示。請不要為時間加上引號:

        2016-10-31T14:10:00Z
        
      • 將「interval.startTime」設定為結束時間前大約五分鐘的時間,且使用相同格式。

    4. 將其他所有欄位保留空白。

  5. 按一下 [Execute] (執行)

您會看到如下所示的輸出:

{
 "timeSeries": [
  {
   "metric": {
    "labels": {
     "state": "buffered"
    },
    "type": "agent.googleapis.com/memory/bytes_used"
   },
   "resource": {
    "type": "[GCP-OR-AWS-INSTANCE-TYPE]",
    "labels": {
     "instance_id": "[YOUR-VM-INSTANCE-ID]",
     "zone": "[YOUR-INSTANCE-ZONE]",
     "project_id": "[YOUR-PROJECT-ID]"
    }
   },
   "metricKind": "GAUGE",
   "valueType": "DOUBLE",
   "points": [
    {
     "interval": {
      "startTime": "[START_TIME]",
      "endTime": "[END_TIME]"
     },
     "value": {
      "doubleValue": 27451392
     }
    },
    ...

如果 API 呼叫從 VM 執行個體傳回任何時間序列資料 (如上所示),表示代理程式運作正常,且所有作業都完成了。

如果您沒有看到任何時間序列資料,請檢查下列內容:

  • 如果 API 呼叫導致產生錯誤訊息,這「不」表示代理程式有問題。請檢查是否正確填寫 APIs Explorer 欄位。檢查專案 ID、篩選器以及兩個時間戳記的拼寫與格式是否正確。「Not authorized」(未獲授權) 錯誤可能表示專案 ID 拼字有誤。「Not found」(找不到) 錯誤可能表示「name」(名稱) 欄位中省略了所需前置字元 projects/。請修正問題,然後再次嘗試 API 呼叫。

  • 如果 API 呼叫成功,但您只能看到空白回應 { },請檢查篩選器與時間間隔是否正確。時間戳記的格式錯誤可能會導致無法傳回資料。如果所有項目看起來都正確無誤,但您卻未取得任何資料,則表示代理程式未傳送指標資料,或至少未將資料傳送至您預期的專案。這可能表示憑證問題;請參閱驗證私密金鑰憑證

驗證 Compute Engine 憑證

使用 GCP 主控台的「Compute Engine」>「VM Instances」(VM 執行個體) 頁面,驗證 Compute Engine VM 執行個體是否擁有 Monitoring 代理程式的充分憑證。憑證通常會新增到所有新 Compute Engine VM 執行個體的預設服務帳戶中,但也可能會在建立執行個體時覆寫這些預設值。

開啟「Compute Engine Instance」(Compute Engine 執行個體) 頁面

  1. 如有必要,請將目前 GCP 專案變更為與 Compute Engine VM 執行個體相關聯的專案。例如,如果系統提示您「啟用計費功能」,則表示目前專案中沒有任何 Compute Engine VM 執行個體。
  2. 在「VM Instances」(VM 執行個體) 頁面中,按一下 VM 執行個體的名稱。畫面會隨即顯示 VM 執行個體的詳細資料頁面。
  3. 在「VM instance details」(VM 執行個體詳細資料) 頁面的「Cloud API access scopes」(Cloud API 存取權範圍) 標題下查看以下項目:
    1. 如果您看到「Allow full access to all Cloud APIs」(允許所有 Cloud API 的完整存取權),表示您擁有充分憑證。
    2. 如果您在「Stackdriver Monitoring API」旁邊發現您擁有「Write Only」(唯寫) 或「Full」(完整) 權限,表示您擁有充分憑證。
    3. 否則,就表示執行個體的預設服務帳戶沒有代理程式所需的憑證。如要在執行個體中使用代理程式,您必須新增私密金鑰服務帳戶憑證。如需操作說明,請參閱新增憑證

如果您具備正確的預設憑證,請直接略過並前往在 Linux 上安裝在 Microsoft Windows 上安裝的說明。

驗證私密金鑰憑證

如要驗證是否已在您的 VM 執行個體上安裝有效的私密金鑰憑證,請先驗證憑證檔案是否存在於其預期位置,然後驗證憑證檔案中的資訊是否有效。之前有效的憑證可使用 GCP 主控台的「IAM & Admin」(IAM 與管理員) >「Service accounts」(服務帳戶) 部分撤銷。如果不存在有效的憑證,請參閱新增憑證一文,取代現有憑證或新增憑證。

是否存在憑證?

如要查看私密金鑰服務帳戶憑證是否位於您的執行個體上,請在您的執行個體上執行下列 Linux 指令:

sudo cat $GOOGLE_APPLICATION_CREDENTIALS
sudo cat /etc/google/auth/application_default_credentials.json

如果任何指令顯示如下所示的檔案,表示您的執行個體可能擁有有效的私密金鑰憑證。如果兩個指令都顯示一個檔案,則系統會使用由 GOOGLE_APPLICATION_CREDENTIALS 表示的檔案。

{
  "type": "service_account",
  "project_id": "{your-project-id}",
  "private_key_id": "{your-private-key-id}",
  "private_key": "{your-private-key}",
  "client_email": "{your-project-number}-{your-key}@developer.gserviceaccount.com",
  "client_id": "{your-client-id}",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://accounts.google.com/o/oauth2/token",
  "auth_provider_x509_cert_url": "{x509-cert-url}",
  "client_x509_cert_url": "{client-x509-cert-url}"
}

如果不存在任何憑證檔案,請參閱新增憑證一文。

憑證是否有效?

在憑證檔案中,project_id 是您的 GCP 專案,client_email 可識別專案中的服務帳戶,而 private_key_id 可識別服務帳戶中的私密金鑰。請將這個資訊與 GCP 主控台中 [IAM & Admin] (IAM 與管理員) > [Service accounts] (服務帳戶) 部分顯示的內容進行比對。

如果符合以下任一條件,則憑證檔案「無效」

  • 您正在查看 Compute Engine 執行個體,但憑證檔案中的 GCP 專案並非包含您執行個體的專案。
  • 您正在查看 Amazon EC2 執行個體,但憑證檔案中的 GCP 專案並非 AWS 帳戶的連接器專案 (名為 AWS Link...)。
  • 所列服務帳戶不存在。可能已遭刪除。
  • 所列服務帳戶未啟用正確角色,應至少擁有 Monitoring 代理程式適用的 roles/monitoring.metricWriter (監控指標寫入者),以及 Logging 代理程式適用的 roles/logging.logWriter (記錄寫入者)。
  • 私密金鑰不存在。可能已遭到撤銷。

如果服務帳戶正確,但私密金鑰已撤銷,則您可以建立新的私密金鑰,並將其複製到執行個體。否則,您必須如下面的新增憑證一節所述,建立新的服務帳戶。

產生新憑證

如果憑證無效,請採取下列步驟:

  1. 針對內含的執行個體需要私密金鑰授權的每個已連接專案 (所有 AWS 連接器專案與在沒有監控範圍的情況下建立的 Compute Engine 執行個體),建立服務帳戶,並產生私密金鑰 (如果尚不存在)。步驟如下:

    1. 按這裡開啟連接至工作區的專案清單。
      • 針對 AWS,使用連結直接前往問題專案的 Cloud Console。
      • 針對 GCP,找出包含有問題的 Compute Engine 資源的專案,然後前往 Cloud Console
    2. 從 Cloud Console 前往 IAM Service Accounts (IAM 服務帳戶) 頁面。
    3. 建立新的服務帳戶並為其產生新的私密金鑰。

      最簡單的方法是下載一個具有正確設定的私密金鑰。這個金鑰可透過修改目前頁面網址來獲得,方法是將 &createStackdriverServiceAccount 附加至網址結尾。詳情請參閱「建立服務帳戶」一節。

  2. 替換執行個體中與有問題的服務帳戶對應的私密金鑰。

    • 在 Linux 中,替換位於 /etc/google/auth/application_default_credentials.json 中的私密金鑰
    • 在 Windows 中,替換位於 C:\ProgramData\Google\Auth\application_default_credentials.json 中的私密金鑰。詳情請參閱「將私密金鑰複製到您的執行個體」一節。
  3. 重新啟動代理程式

    • 在 Linux 中,執行 sudo service stackdriver-agent restart
    • 在 Windows 中,進入服務管理主控台,然後重新啟動 Stackdriver Monitoring 服務。

如果您有多個專案需要新的私密金鑰,請針對每個專案重複這個程序。

如要驗證私密金鑰是否正確,請參閱是否存在憑證?一文。具體內容包括:

  • 讀取執行個體中的私密金鑰 JSON 檔案,例如 (在 Linux 中):sudo cat /etc/google/auth/application_default_credentials.json
  • 確保 project-id 的值與您剛才為其產生憑證的受控專案的值相符。

重新安裝代理程式

安裝最新版本的代理程式可以解決許多問題:

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Stackdriver Monitoring
需要協助嗎?請前往我們的支援網頁