本文提供的資訊可協助您排解 Compute Engine VM 執行個體上的作業套件代理程式授權和憑證問題。
如果 Ops Agent 回報存取權或授權錯誤,或者代理程式似乎正常執行,但卻沒有任何資料,或快訊政策未如預期運作,請檢查 VM 執行個體的憑證是否正確,包括憑證所指定的專案是否正確:
如果您使用具有標準 (而非私密金鑰) 憑證的 Compute Engine VM 執行個體,即表示資料不可能進入錯誤專案,但您的憑證仍可能不足。如要瞭解憑證,請參閱「授權作業套件代理程式」。如要驗證您的憑證,請參閱「驗證 Compute Engine 憑證」。
如果您在 Compute Engine 執行個體中使用私密金鑰憑證,則憑證可能會無效,或憑證可能來自錯誤專案。如要瞭解憑證,請參閱「授權作業套件代理程式」。如要驗證憑證,請參閱驗證私密金鑰憑證。
驗證 Compute Engine 憑證
使用 Google Cloud 主控台的 Compute Engine「VM instances」(VM 執行個體) 頁面,驗證 Compute Engine VM 執行個體是否擁有 Ops Agent 的充分憑證。憑證通常會新增至所有新的 Compute Engine VM 執行個體的預設服務帳戶,但建立執行個體時可以覆寫這些預設值。
前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面:
如果您是使用搜尋列尋找這個頁面,請選取子標題為「Compute Engine」的結果。
- 如有必要,請將目前 Google Cloud 專案變更為與 Compute Engine VM 執行個體相關聯的專案。舉例來說,如果系統提示您「啟用計費功能」,則表示目前專案中沒有任何 Compute Engine VM 執行個體。
- 在「VM Instances」(VM 執行個體) 頁面中,按一下 VM 執行個體的名稱。畫面會隨即顯示 VM 執行個體的詳細資料頁面。
- 在「VM instance details」(VM 執行個體詳細資料) 頁面的「Cloud API access scopes」(Cloud API 存取權範圍) 標題下查看以下項目:
- 如果您看到「Allow full access to all Cloud APIs」(允許所有 Cloud API 的完整存取權),表示您擁有充分憑證。
- 如果您在「Stackdriver Monitoring API」旁邊發現 Cloud Monitoring API 的舊名稱,且您擁有「Write Only」(唯寫) 或「Full」(完整) 權限,表示您擁有充分憑證。
- 否則,就表示執行個體的預設服務帳戶沒有代理程式所需的憑證。如要在執行個體中使用代理程式,您必須新增私密金鑰服務帳戶憑證。如需操作說明,請參閱新增憑證。
如果您具備正確的預設憑證,請直接略過並前往在 Linux 和 Windows 上安裝的說明。
驗證私密金鑰憑證
如要驗證是否已在您的 VM 執行個體上安裝有效的私密金鑰憑證,請先驗證憑證檔案是否存在於其預期位置,然後驗證憑證檔案中的資訊是否有效。之前有效的憑證可使用 Google Cloud 控制台的「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
」欄位是您的 Google Cloud 專案,「client_email
」會識別專案中的服務帳戶,「private_key_id
」則會識別服務帳戶中的私密金鑰。請將這個資訊與Google Cloud 控制台中「IAM & Admin」(IAM 與管理) >「Service accounts」(服務帳戶) 部分顯示的內容進行比對。
如果符合以下任一條件,則憑證檔案無效:
- 您正在檢查 Compute Engine VM 執行個體,但憑證檔案中的Google Cloud 專案並非包含您執行個體的專案。
- 所列服務帳戶不存在。可能已遭刪除。
- 所列服務帳戶未啟用正確角色,應至少擁有指標收集適用的
roles/monitoring.metricWriter
(監控指標寫入者),以及記錄寫入適用的roles/logging.logWriter
(記錄寫入者)。 - 私密金鑰不存在。可能已遭到撤銷。
如果服務帳戶正確,但私密金鑰已撤銷,則您可以建立新的私密金鑰,並將其複製到執行個體。否則,您必須如下面的新增憑證一節所述,建立新的服務帳戶。
產生新憑證
如果憑證無效,請採取下列步驟:
- 針對包含需要私密金鑰授權之執行個體的每個已連結專案 (在沒有存取範圍的情況下建立的 Compute Engine 執行個體
https://www.googleapis.com/auth/monitoring.write
),建立服務帳戶,並產生私密金鑰 (若尚不存在)。請按照下列步驟操作:-
前往 Google Cloud 控制台的 settings「Settings」(設定) 頁面:
如果您是使用搜尋列尋找這個頁面,請選取子標題為「Monitoring」的結果。
- 選取「指標範圍」分頁標籤。
- 找出包含有問題的 Compute Engine 資源的專案,然後前往 Google Cloud 主控台。
- 前往 Google Cloud 控制台的「IAM Service Accounts」(IAM 服務帳戶) 頁面,選取 Google Cloud 專案,建立新的服務帳戶,然後為該服務帳戶產生新的私密金鑰。
如要執行這些步驟,請採取下列任一做法:
前往「IAM 服務帳戶」頁面,選取 Google Cloud 專案,然後按照「 建立服務帳戶」一文中的步驟操作:
按一下下列按鈕,然後選取您的 Google Cloud 專案:
上一個按鈕會自動建立金鑰,並下載至本機系統,供代理程式專屬服務帳戶使用。如有必要,這個程序也會建立必要的服務帳戶,並確保服務帳戶具備正確的權限。專屬代理程式的服務帳戶名稱與
stackdriver-1234@PROJECT_ID.iam.gserviceaccount.com
類似。完成這些動作後,您會收到類似下列的對話方塊通知:
-
替換執行個體中與有問題的服務帳戶對應的私密金鑰。
- 在 Linux 中,替換位於
/etc/google/auth/application_default_credentials.json
中的私密金鑰。 - 在 Windows 中,替換位於
C:\ProgramData\Google\Auth\application_default_credentials.json
. 詳情請參閱「 將私密金鑰複製到您的執行個體」。
- 在 Linux 中,替換位於
重新啟動代理程式
- 在 Linux 上執行
sudo service stackdriver-agent restart
- 在 Windows 中,進入服務管理主控台,然後重新啟動
Cloud Monitoring
服務。
- 在 Linux 上執行
如果您有多個專案需要新的私密金鑰,請針對每個專案重複這個程序。
如要驗證私密金鑰是否正確,請參閱「是否有憑證?」一節。 具體情況如下:
- 讀取執行個體中的私密金鑰 JSON 檔案,例如 (在 Linux 中):
sudo cat /etc/google/auth/application_default_credentials.json
- 確保
project_id
欄位的值與您剛才為其產生憑證的受控專案的值相符。