這個頁面可協助您診斷安裝或執行 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」(已透過中繼資料停用),代表您可能正在執行來自 Google Cloud Marketplace 的映像檔,其中 Monitoring 代理程式預設為停用。這項功能由
google-monitoring-enable
執行個體中繼資料鍵 (其值為0
) 所控管。如要重新啟用代理程式,請移除該鍵,或將值設為1
(請參閱「設定執行個體中繼資料」)。如果代理程式未透過中繼資料停用,請重新安裝代理程式。如要瞭解這項程序,請參閱「重新安裝 Monitoring 代理程式」。
查看代理程式是否已將錯誤訊息寫入記錄。
在 Windows 中,Monitoring 代理程式會將訊息寫入 Windows 事件記錄檔。
在 Linux 上,Monitoring 代理程式是
collectd
套件,會將訊息記錄到/var/log/syslog
或/var/log/messages
。記錄訊息的前置字元為collectd
或stackdriver-agent
:如果您看到 HTTP 429 錯誤,表示您可能已經超過 Monitoring API 配額。您可以在Google Cloud 主控台中選取「API 和服務」>「資訊主頁」,查看可用配額。請選擇 [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) 錯誤,表示您可能傳送了不支援的代理程式指標。以下是可能發生這種情況的情況:
如果代理程式似乎正常執行,但您未取得任何資料,或快訊政策未如預期運作,則請檢查代理程式是否將資料傳送至正確的專案。請參閱下方的驗證專案與憑證一節。
驗證專案與憑證
如果監控代理程式回報存取權或授權錯誤,或者代理程式似乎正常執行,但卻沒有任何資料,或快訊政策未如預期運作,請檢查 VM 執行個體的憑證是否正確,包括憑證所指定的專案是否正確:
如果您使用具有標準 (而非私密金鑰) 憑證的 Compute Engine VM 執行個體,即表示資料不可能進入錯誤專案,但您的憑證仍可能不足。如要瞭解憑證,請參閱「授權監控代理程式」。如要驗證憑證,請參閱「驗證 Compute Engine 憑證」。
如果您使用 Amazon EC2 VM 執行個體,或在 Compute Engine 執行個體中使用私密金鑰憑證,則憑證可能會無效,或憑證可能來自錯誤專案。針對 AWS 帳戶,代理程式使用的專案必須是您傳送指標的 Google Cloud 專案。如要瞭解憑證,請參閱「授權 Monitoring 代理程式」。如要驗證您的憑證,請參閱「驗證私密金鑰憑證」。
驗證 Compute Engine 憑證
使用 Google Cloud 主控台的 Compute Engine「VM 執行個體」頁面,驗證 Compute Engine VM 執行個體是否擁有 Monitoring 代理程式的充分憑證。憑證通常會新增至所有新 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 專案並非包含您執行個體的專案。
- 您正在查看 Amazon EC2 執行個體,但憑證檔案中的 Google Cloud 專案並非您要將 AWS 帳戶中的指標傳送至 Google Cloud 專案。
- 所列服務帳戶不存在。可能已遭刪除。
- 所列服務帳戶未啟用正確角色,應至少擁有
roles/monitoring.metricWriter
(監控指標寫入者) 用於指標收集,以及roles/logging.logWriter
(記錄寫入者) 用於寫入記錄。 - 私密金鑰不存在。可能已遭到撤銷。
如果服務帳戶正確,但私密金鑰已撤銷,則您可以建立新的私密金鑰,並將其複製到執行個體。否則,您必須如下面的新增憑證一節所述,建立新的服務帳戶。
產生新憑證
如果憑證無效,請採取下列步驟:
- 針對內含需要私密金鑰授權的執行個體的每個已連接專案 (所有 AWS 連接器專案與在沒有監控範圍的情況下建立的 Compute Engine 執行個體),建立服務帳戶並產生私密金鑰 (如果尚不存在)。
https://www.googleapis.com/auth/monitoring.write
請按照下列步驟操作:-
在 Google Cloud 控制台中,前往 settings「Settings」頁面:
如果您是使用搜尋列尋找這個頁面,請選取子標題為「Monitoring」的結果。
- 選取「指標範圍」分頁標籤。
- 找出包含有問題的 Compute Engine 資源的專案,然後前往 Google Cloud 主控台。
- 前往 Google Cloud 主控台的「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
欄位的值與您剛才為其產生憑證的受控專案的值相符。
驗證代理程式資料
如要確認代理程式是否正確傳送指標,請使用 Monitoring API 的 timeSeries.list
方法,查看 VM 執行個體的近期時間序列資料。您可以在方法的說明文件頁面上,使用 API Explorer 呼叫該方法。如果您沒有看到任何資料,表示代理程式可能傳送資料至錯誤的專案。如要確認這項資訊,請參閱「驗證專案與憑證」。
以下是使用 timeSeries.list
方法的詳細操作說明:
確定安裝代理程式的 VM 執行個體的執行個體 ID:
Compute Engine 執行個體:前往 Compute Engine 執行個體的詳細資料頁面。按一下頁面底部的「Equivalent REST」。這個 ID 為 19 位數的號碼。
Amazon EC2 執行個體:每個執行個體的 ID 都顯示在執行個體清單中。ID 類似於
i-1a2b3c4d
。
前往
timeSeries.list
方法的說明文件頁面。填寫 APIs Explorer 表單:
將「name」(名稱) 設定為包含 VM 執行個體的專案,前面加上
projects/
,例如:projects/[YOUR_PROJECT_ID]
。將「filter」(篩選器) 設定為下面此行指令碼,以從 VM 執行個體中選擇代理程式指標。將此行指令碼複製並貼到 APIs Explorer 中,然後變更 VM 執行個體 ID:
metric.type = "agent.googleapis.com/memory/bytes_used" AND resource.label.instance_id = "[YOUR-VM-INSTANCE-ID]"
設定搜尋時間間隔。您需要大約五分鐘的間隔時間:
將「interval.endTime」interval.endTime設為目前的格林威治標準時間 (GMT),這個時間可在 time.is/GMT 中找到。時間格式必須如下所示。請不要為時間加上引號:
2016-10-31T14:10:00Z
將「interval.startTime」設定為結束時間前大約五分鐘的時間,且使用相同格式。
將其他所有欄位保留空白。
按一下 [Execute] (執行)。
您會看到如下所示的輸出:
{
"timeSeries": [
{
"metric": {
"labels": {
"state": "buffered"
},
"type": "agent.googleapis.com/memory/bytes_used"
},
"resource": {
"type": "[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 欄位:
「Invalid argument」(無效的引數) 錯誤可能表示專案 ID、篩選器或兩個時間戳記的拼寫和格式有問題。
時間戳記引數的相關規定取決於您指定的指標類型。指標類型會記錄
GAUGE
、DELTA
或CUMULATIVE
資料。詳情請參閱MetricKind
。對於
DELTA
和CUMULATIVE
指標,您必須提供開始和結束時間,且結束時間必須晚於開始時間。這類指標類型會記錄一段時間內的變化,因此開始和結束時間必須定義為非零的間隔。「Not authorized」(未獲授權) 錯誤可能表示專案 ID 拼字有誤。
「Not found」(找不到) 錯誤可能表示「name」(名稱) 欄位中省略了所需前置字元
projects/
。
請修正問題,然後再次嘗試 API 呼叫。
如果 API 呼叫成功,但您只能看到空白回應
{ }
,請檢查篩選器與時間間隔是否正確。時間戳記的格式錯誤可能會導致無法傳回資料。如果所有項目看起來都正確無誤,但您卻未取得任何資料,則表示代理程式未傳送指標資料,或至少未將資料傳送至您預期的專案。這可能表示憑證問題;請參閱「驗證私密金鑰憑證」。
重新安裝監控代理程式
安裝最新版本的代理程式可以解決許多問題:
如果您確定問題與憑證無關,請直接跳到「在 Linux 和 Windows 上安裝」。
如要瞭解如何完整安裝代理程式及任何必要憑證,請參閱「安裝 Monitoring 代理程式」一文。
判斷哪些 Linux VM 已安裝代理程式
執行下列任一查詢,查看哪些 Linux VM 正在執行這個代理程式:
請注意,每個查詢都必須輸入專案名稱,並調整時間範圍。
自動重新啟動代理程式
您可以設定指令碼,檢查代理程式是否正在執行,並在代理程式當機時重新啟動。
舉例來說,在 Linux 上,您可以建立下列 crontab 項目,每 5 分鐘檢查一次代理程式狀態:
*/5 * * * * /bin/pidof stackdriver-collectd >/dev/null 2>&1 || /usr/sbin/service stackdriver-agent restart >/dev/null 2>&1
已知問題
以下各節說明監控代理程式已知的問題。
程序資料存取問題 (Windows)
您可能會在 Windows 事件記錄檔中看到類似以下的代理程式錯誤訊息:
Read access denied for processes: Registry (84), smss.exe (264), csrss.exe (376), wininit.exe (448), csrss.exe (456), services.exe (580), NisSrv.exe (3008), MsMpEng.exe (3624), csrss.exe (7044)
這則訊息表示服務專員無法存取系統中的這項資料。如要停止看到這則訊息,您可以為 SYSTEM
使用者提供足夠的權限,讓他們讀取錯誤訊息中列出的程序和服務的程序資料。如果您不需要這項資料,可以放心忽略這些資訊訊息。
中繼資料快取問題 (Linux)
您可能會在 Linux 系統記錄檔 (Debian / Ubuntu 上的 /var/log/syslog
或 Red Hat / CentOS / SLES 上的 /var/log/messages
) 中看到類似以下的錯誤訊息:
collectd[25571]: uc_update: Value too old: name = myhost/processes-all/ps_vm;
value time = 1511345468.180; last cache update = 1511345468.180;
write_gcm: wg_update_stats failed.
write_gcm: uc_update returned an error.
這些訊息只是無害的警告,並非資料遺失的徵兆。當時間戳記不相符時,系統會在目前的程序外掛程式實作中產生這些訊息。
無限值資料點遺失問題 (Linux)
您可能會在 Linux 系統記錄檔 (Debian / Ubuntu 上的 /var/log/syslog
或 Red Hat / CentOS / SLES 上的 /var/log/messages
) 中看到類似以下的錯誤訊息:
write_gcm: can not take infinite value
這則訊息表示系統已捨棄單一格式錯誤的資料點。這通常不會造成傷害,可以忽略。
中繼資料鍵節流問題 (Linux)
您可能會在 Linux 系統記錄檔 (Debian / Ubuntu 上的 /var/log/syslog
或 Red Hat / CentOS / SLES 上的 /var/log/messages
) 中看到類似以下的錯誤訊息:
collectd[7440]:match_throttle_metadata_keys: uc_meta_data_add returned an error
collectd[7440]:match_throttle_metadata_keys: mtg_update_stats failed
這則訊息表示記憶體節流的狀態更新失敗一次。這通常不會造成任何傷害,但可能表示代理程式記憶體不足,尤其是經常發生這種情況時。
Cloud Monitoring API 配額不足問題 (Linux)
您可能會在 Linux 系統記錄檔 (Debian / Ubuntu 上的 /var/log/syslog
或 Red Hat / CentOS / SLES 上的 /var/log/messages
) 中看到類似以下的錯誤訊息:
collectd[25198]: write_gcm: Unsuccessful HTTP request 429
這則訊息表示 Cloud Monitoring API 已達到配額限制。請按照配額指南管理配額限制。
COLLECTD_INTERVAL
偏低導致記憶體用量偏高 (Linux)
如果 COLLECTD_INTERVAL
的設定值比預設的 60 seconds
短,例如 10
seconds
,代理程式可能會使用大量記憶體。這是代理程式已知的限制,因為它會從單一執行緒以序列方式傳送要求。為緩解這種情況,請考慮只針對部分必要指標減少 COLLECTD_INTERVAL
,並將其他指標的間隔設為預設值。
符記緩衝區溢位問題 (Linux)
您可能會在 Linux 系統記錄檔 (Debian/Ubuntu 上的/var/log / syslog 或 Red Hat /CentOS/SLES 上的/var / log / messages) 中看到類似以下內容的錯誤訊息:
write_gcm: Error or buffer overflow when building auth_header
write_gcm: wg_oauth2_get_auth_header failed.
write_gcm: wg_transmit_unique_segment failed.
write_gcm: wg_transmit_unique_segments failed. Flushing.
這些訊息表示監控代理程式需要升級至 6.1.2
以上版本。
存放區變更了「Origin」值 (Linux)
在 Debian/Ubuntu Linux 上升級代理程式、安裝代理程式或執行 apt-get update
時,您可能會看到類似以下的錯誤訊息:
E: Repository 'https://packages.cloud.google.com/apt google-cloud-monitoring-buster-all InRelease' changed its 'Origin' value from 'google-cloud-monitoring-buster' to 'namespaces/cloud-ops-agents-artifacts/repositories/google-cloud-monitoring-buster-all'
E: Repository 'https://packages.cloud.google.com/apt google-cloud-monitoring-buster-all InRelease' changed its 'Label' value from 'google-cloud-monitoring-buster' to 'namespaces/cloud-ops-agents-artifacts/repositories/google-cloud-monitoring-buster-all'
這則訊息表示套件存放區快取可能與來源有所出入。如要解決這個問題,請執行下列指令:
apt-get --allow-releaseinfo-change update
然後再次執行升級或安裝作業。
Google Cloud 主控台回報已移除的代理程式已安裝
卸除代理程式後, Google Cloud 主控台可能需要最多一小時的時間才能回報這項變更。
Monitoring 代理程式未顯示在 Windows 的「Uninstall a program」清單中
如要解除安裝 Monitoring 代理程式,但該代理程式未列在 Windows 控制台的「解除安裝程式」清單中,請從安裝代理程式的目錄執行 uninstall.exe
。