本文提供疑難排解程序和預先定義系統警告的參考說明,協助您找出部署失敗的原因,並透過 Google Distributed Cloud (GDC) 實體隔離設備中的記錄和監控元件,解決作業事件。您可以使用這些程序和警告定義,確認記錄和監控堆疊是否正在執行、檢查管道設定,以及排解元件問題。
找出觀測能力元件
觀測能力平台會將元件部署至組織基礎架構叢集的 obs-system 命名空間。
基礎架構運算子 (IO) 的 Grafana 執行個體可讓您存取組織層級指標,監控 CPU 使用率和儲存空間用量等基礎架構元件。此外,您也可以存取作業和稽核記錄。此外,您也可以存取 GDC 可操作元件的快訊、記錄和指標。
GDC 監控和記錄堆疊使用開放原始碼解決方案,做為觀測能力平台的一部分。這些元件會從 Kubernetes Pod、裸機、網路切換裝置、儲存空間和代管服務收集記錄和指標。
下表說明整合觀測能力平台的所有元件:
| 元件 | 說明 |
|---|---|
Prometheus |
Prometheus 是時間序列資料庫,用於收集和儲存指標,以及評估快訊。Prometheus 會將指標儲存在組織基礎架構叢集的 Cortex 執行個體中,以便長期儲存。Prometheus 會以鍵/值組合的形式新增標籤,並從 Kubernetes 節點、Pod、裸機、網路切換裝置和儲存裝置收集指標。 |
Alertmanager |
Alertmanager 是使用者定義的管理系統,會在記錄或指標顯示系統元件故障或運作異常時傳送快訊。負責管理 Prometheus 警告的轉送、靜音和匯總。 |
Loki |
Loki 是時間序列資料庫,可儲存及匯總各種來源的記錄。為記錄建立索引,提高查詢效率。 |
Grafana |
Grafana 提供使用者介面 (UI),可查看 Prometheus 收集的指標,並查詢對應 Loki 執行個體的稽核和作業記錄。使用者介面會以視覺化方式呈現指標和警告資訊主頁。 |
Fluent Bit |
Fluent Bit 是一種處理器,可從各種元件或位置提取記錄,並傳送至 Loki。在所有叢集的每個節點上執行。 |
找出部署失敗
如果部署作業正在執行且健康狀態良好,元件會以 READY 狀態執行。
請按照下列步驟找出部署失敗的原因:
確認元件的目前狀態:
kubectl get -n obs-system TYPE/COMPONENT更改下列內容:
TYPE:元件類型COMPONENT:元件名稱
輸出內容大致如下:
NAME READY AGE COMPONENT 1/1 23h如果元件健康狀態良好,輸出內容的
READY欄會顯示N/N值。如果READY欄未顯示值,不一定代表失敗。服務可能需要更多時間處理。檢查各元件中的 Pod:
kubectl get pods -n obs-system | awk 'NR==1 | /COMPONENT/'將
COMPONENT替換為元件名稱。輸出內容大致如下:
NAME READY STATUS RESTARTS AGE COMPONENT 1/1 Running 0 23h確認
READY欄顯示N/N值、STATUS欄顯示Running值,且RESTARTS的數量不超過2。重新啟動次數過多表示有下列問題:
- Pod 失敗,Kubernetes 重新啟動 Pod。
- 「
STATUS」欄會顯示CrashLoopBackoff值。
如要解決失敗狀態,請查看 Pod 的記錄檔。
如果 Pod 處於
PENDING狀態,表示出現下列一或多種症狀:- Pod 正在等待網路存取權,以便下載必要的容器。
- 設定問題導致 Pod 無法啟動。例如,Pod 缺少必要的
Secret值。 - Kubernetes 叢集已用盡資源,無法排定 Pod。如果叢集上執行許多應用程式,就會發生這種情況。
判斷
PENDING狀態的原因:kubectl describe -n obs-system pod/POD_NAME將
POD_NAME替換為顯示PENDING狀態的 Pod 名稱。輸出內容會顯示 Pod 的詳細資料。
前往輸出內容的
Events部分,查看列出 Pod 近期事件的表格,以及PENDING狀態原因的摘要。以下輸出內容顯示 Grafana
StatefulSet物件的Events區段範例:Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal SuccessfulCreate 13s (x3 over 12d) statefulset-controller create Pod grafana-0 in StatefulSet grafana successful如果 Pod 或任何其他資源長時間沒有事件,您會收到下列輸出內容:
Events: <none>
確認觀測能力記錄堆疊正在執行
請按照下列步驟操作,確認記錄堆疊正在運作:
確認所有 Loki 執行個體或 Pod 都已插入 Istio 邊車容器。確認所有名為
anthos-audit-logs-forwarder-SUFFIX和anthos-log-forwarder-SUFFIX的 Fluent Bit Pod 都已插入 Istio sidecar。確認所有 Loki 執行個體在組織基礎架構叢集中正常運作。
檢查
anthos-audit-logs-forwarder和anthos-log-forwarderDaemonSet物件的狀態,確認所有執行個體都在所有節點中執行,且沒有錯誤。確認您已取得所有叢集過去五分鐘內
kube-apiserver-SUFFIX容器的作業記錄,以及 Kubernetes API 伺服器的稽核記錄。如要這麼做,請在 Grafana 執行個體中執行下列查詢:- 作業記錄:
sum (count_over_time({service_name="apiserver"} [5m])) by (cluster, fluentbit_pod) - 稽核記錄:
sum (count_over_time({cluster=~".+"} [5m])) by (cluster, node)
機構基礎架構叢集中,所有控制層節點的值都不得為零。
- 作業記錄:
確認觀測能力監控堆疊正在執行
請按照下列步驟,確認監控堆疊是否正在運作:
確認 Grafana 執行個體正在組織基礎架構叢集中執行。
grafana-0Pod 必須在下列命名空間中順利執行:obs-systeminfra-obs-obs-systemplatform-obs-obs-system
確認所有監控元件都位於 Istio 服務網格中。請按照「找出部署作業失敗原因」一節中的步驟操作。下列每個 Pod 都必須在
READY欄中顯示所有容器皆已就緒。例如,如果值為3/3,表示三個容器都已準備就緒。此外,Pod 必須有istio-proxy容器。如果 Pod 不符合這些條件,請重新啟動 Pod:Pod 名稱 準備就緒的容器數量 cortex-2/2cortex-etcd-02/2cortex-proxy-server-2/2cortex-tenant-2/2meta-blackbox-exporter-2/2meta-grafana-03/3meta-grafana-proxy-server-2/2meta-prometheus-04/4cortex-alertmanager-2/2cortex-compactor-2/2cortex-distributor-2/2cortex-etcd-02/2cortex-ingester-2/2cortex-querier-2/2cortex-query-frontend-2/2cortex-query-scheduler-2/2cortex-ruler-2/2cortex-store-gateway-2/2cortex-tenant-2/2grafana-proxy-server-2/2meta-blackbox-exporter-2/2meta-grafana-03/3meta-grafana-proxy-server-*2/2meta-prometheus-04/4確認 Cortex 運作正常,沒有錯誤。
擷取觀測能力記錄
下表列出您必須執行的指令,以便擷取觀測平台部署的各個元件記錄。
| 元件 | 記錄擷取指令 |
|---|---|
grafana |
kubectl logs -n obs-system statefulset/grafana |
anthos-prometheus-k8s |
kubectl logs -n obs-system statefulset/anthos-prometheus-k8s |
alertmanager |
kubectl logs -n obs-system statefulset/alertmanager |
ops-logs-loki-io |
kubectl logs -n obs-system statefulset/ops-logs-loki-io |
ops-logs-loki-io-read |
kubectl logs -n obs-system statefulset/ops-logs-loki-io-read |
ops-logs-loki-all |
kubectl logs -n obs-system statefulset/ops-logs-loki-all |
ops-logs-loki-all-read |
kubectl logs -n obs-system statefulset/ops-logs-loki-all-read |
audit-logs-loki-io |
kubectl logs -n obs-system statefulset/audit-logs-loki-io |
audit-logs-loki-io-read |
kubectl logs -n obs-system statefulset/audit-logs-loki-io-read |
audit-logs-loki-pa |
kubectl logs -n obs-system statefulset/audit-logs-loki-pa |
audit-logs-loki-pa-read |
kubectl logs -n obs-system statefulset/audit-logs-loki-pa-read |
audit-logs-loki-all |
kubectl logs -n obs-system statefulset/audit-logs-loki-all |
audit-logs-loki-all-read |
kubectl logs -n obs-system statefulset/audit-logs-loki-all-read |
anthos-log-forwarder |
kubectl logs -n obs-system daemonset/anthos-log-forwarder |
anthos-audit-logs-forwarder |
kubectl logs -n obs-system daemonset/anthos-audit-logs-forwarder |
oplogs-forwarder |
kubectl logs -n obs-system daemonset/oplogs-forwarder |
logmon-operator |
kubectl logs -n obs-system deployment/logmon-operator |
如要查看元件先前執行個體的記錄,請在每個指令結尾加上 -p 旗標。新增 -p 旗標後,您就能查看先前失敗執行個體的記錄,而非目前執行中的執行個體。
查看設定
觀測能力堆疊會使用 Kubernetes API 自訂資源,設定監控和記錄管道。
LoggingPipeline 自訂資源會部署在組織基礎架構叢集,並設定 Loki 執行個體。
下列指令會顯示您可對記錄管道執行的可用動作:
查看記錄管道部署作業目前的設定:
kubectl get loggingpipeline -n obs-system default -o yaml變更記錄管道部署作業的設定:
kubectl edit loggingpipeline -n obs-system default
GDC 使用名為 logmon-operator 的記錄和監控運算子,管理 Prometheus 和 Fluent Bit 等觀測能力元件的部署作業。logmon-operator 元件的 API 是 logmon 自訂資源定義。logmon 自訂資源定義會指示 logmon-operator 如何為部署作業設定觀測能力。這項自訂資源定義包含儲存指標的磁碟區屬性、Alertmanager 的警告規則、收集指標的 Prometheus 設定,以及資訊主頁的 Grafana 設定。
下列指令會顯示您可對 logmon 自訂資源定義執行的可用動作:
查看 Observability 部署作業目前的設定:
kubectl get logmon -n obs-system logmon-default -o yaml變更觀測能力部署作業的設定:
kubectl edit logmon -n obs-system logmon-default
執行任一指令的輸出內容可能會參照多個 Kubernetes ConfigMap 物件,以便進一步設定。舉例來說,您可以在個別的 ConfigMap 物件中設定 Alertmanager 規則,並在 logmon 自訂資源定義中依名稱參照該物件。您可以透過名為 gpc-alertmanager-config 的 logmon 自訂資源定義,變更及查看 Alertmanager 設定。
如要查看 Alertmanager 設定,請執行:
kubectl get configmap -n obs-system gpc-alertmanager-config -o yaml
常見問題
本節說明部署觀測平台時可能遇到的常見問題。
無法存取 Grafana
根據預設,Grafana 不會向 Kubernetes 叢集外部的機器公開。如要從組織基礎架構叢集外部暫時存取 Grafana 介面,可以將 Service 轉送至 localhost。如要轉送 Service 的通訊埠,請執行:
kubectl port-forward -n gpc-system service/grafana 33000\:3000
在網路瀏覽器中前往 http://localhost:33000,查看部署作業的 Grafana 資訊主頁。如要結束程序,請按下 Control+C 鍵。
Grafana 執行速度緩慢
Grafana 執行速度緩慢,表示:
- 對 Prometheus 或 Loki 執行的查詢傳回過多資料。
- 查詢傳回的資料量超過單一圖表可合理顯示的範圍。
如要解決 Grafana 速度緩慢的問題,請檢查自訂 Grafana 資訊主頁上的查詢。如果查詢傳回的資料量超過單一圖表可合理顯示的範圍,建議您減少顯示的資料量,以提升資訊主頁效能。
Grafana 資訊主頁未顯示任何指標或記錄
Grafana 未顯示任何指標或記錄,可能是因為下列原因:
- Grafana 資料來源設定有誤。
- 系統與監控或記錄資料來源的連線發生問題。
- 系統未收集指標或記錄。
如要查看記錄和指標,請按照下列步驟操作:
- 在 Grafana 使用者介面中,按一下 「Dashboard settings」(資訊主頁設定)。
- 選取「資料來源」。
- 在「資料來源」頁面,確認您看到下列來源:
| 名稱 | 組織 | 網址 |
|---|---|---|
Audit Logs |
All |
http://audit-logs-loki-io-read.obs-system.svc:3100 |
Operational Logs |
Root |
http://ops-logs-loki-io-read.obs-system.svc:3100 |
Operational Logs |
Org |
http://ops-logs-loki-all-read.obs-system.svc:3100 |
prometheus |
http://anthos-prometheus-k8s.obs-system.svc:9090 |
如果缺少這些資料來源,表示觀測能力堆疊無法正確設定 Grafana。
如果您已正確設定資料來源,但未顯示任何資料,這可能表示收集指標或記錄檔並饋送至 Prometheus 或 Loki 的 Service 物件發生問題。
Prometheus 收集指標時,會遵循提取模型,定期查詢 Service 物件的指標,並儲存找到的值。如要讓 Prometheus 探索 Service 物件來收集指標,必須符合下列條件:
Service物件的所有 Pod 都會加上'monitoring.gke.io/scrape: "true"'註解。Prometheus 指標格式會透過 HTTP 公開 Pod 指標。根據預設,Prometheus 會在端點
http://POD_NAME:80/metrics尋找這些指標。如有需要,您可以透過註解覆寫通訊埠、端點和結構定義。
Fluent Bit 會收集記錄,並在 Kubernetes 叢集的每個節點上執行。Fluent Bit 會將記錄傳送至 Loki,以便長期儲存。
如果 Grafana 中沒有任何記錄,請嘗試下列解決方法:
查看 Loki 執行個體的記錄,確保執行時沒有錯誤。
如果 Loki 執行個體運作正常,但未顯示記錄,請檢查 Fluent Bit 中的記錄,確保服務正常運作。如要瞭解如何提取記錄,請參閱「擷取觀測能力記錄」。
Alertmanager 未開啟警告
如果 Alertmanager 無法開啟快訊,請按照下列步驟操作:
- 在
gpc-system命名空間中的configMap物件中,確認標籤logmon: system_metrics存在。 - 確認
configMap資料區段包含名為alertmanager.yml的鍵。alertmanager.yml鍵的值必須是有效的 Alertmanager 設定檔中包含的警告規則。 請確認
gpc-system命名空間中名為logmon-default的logmon自訂資源定義含有configMap物件的參照。logmon-default自訂資源定義必須包含configMap物件的名稱,如以下範例所示:apiVersion: addons.gke.io/v1 kind: Logmon spec: system_metrics: outputs: default_prometheus: deployment: components: alertmanager: alertmanagerConfigurationConfigmaps: - alerts-config範例中的
alerts-config值是configMap物件的名稱。
Alertmanager 未將警告傳送至設定的通知管道
即使 Alertmanager 在 Grafana 執行個體中產生快訊,設定錯誤仍可能導致您無法在設定為通知管道的外部軟體 (例如 Slack) 中收到通知。
如要在外部軟體中接收快訊,請按照下列步驟操作:
請檢查 Alertmanager 設定檔中的值格式是否正確。Alertmanager 觸發警告時,會查詢外部軟體上的 Webhook。
確認連結至外部軟體的 Webhook 網址正確無誤。如果網址正確,請確認軟體已設為接受 Webhook。您可能需要產生 API 金鑰,才能存取外部服務 API,或者目前的 API 金鑰可能已過期,需要重新整理。
如果外部服務位於 GDC 實體隔離方案設備部署項目之外,請確認組織基礎架構叢集已設定輸出規則。這項設定可讓 Alertmanager 將要求傳送至內部 Kubernetes 網路以外的服務。如果未驗證輸出規則,Alertmanager 可能無法找到外部軟體。
您無法查看專案範圍工作負載的指標
請按照下列步驟套用解決方法,並取得工作負載的指標:
- 確認
MonitoringTarget自訂資源的狀態為Ready。 - 如要抓取工作負載,您必須在工作負載 Pod 規格中,宣告指定給
MonitoringTarget的所有目標資訊。舉例來說,如果您宣告指標可在通訊埠8080上使用,工作負載 Pod 必須向 Kubernetes 宣告通訊埠8080已開啟。否則 Prometheus 會忽略工作負載。 - Prometheus 會執行多個 shard,因此並非所有 Prometheus Pod 都會抓取您的 Pod。您可以從每個 Prometheus Pod 的名稱中找出 shard 編號。舉例來說,
primary-prometheus-shard0-replica0-0是 shard0的一部分。檢查要從每個 Prometheus shard 抓取資料的 Pod:- 將
obs-system命名空間中 Prometheus 的primary-prometheus-shardSHARD_NUMBER-replica0-0Pod 轉送至通訊埠,即可存取 Prometheus UI。每次檢查新的 shard 時,請將 Pod 名稱中的SHARD_NUMBER替換為遞增數字。 - 在網路瀏覽器中前往 Prometheus UI,然後按照下列步驟操作:
- 依序點選「狀態」>「目標」。
- 確認要抓取的 Pod 位於清單中。如果沒有,請檢查下一個 shard。如果沒有其他 shard 需要檢查,請重新驗證 Prometheus 是否有足夠的資訊可供探索。
- 確認 Prometheus 的
primary-prometheus-shardSHARD_NUMBER-replica0-0Pod 會在obs-system命名空間中記錄錯誤。
- 將
- 確認
obs-system命名空間中的cortex-tenantPod 記錄錯誤。
未建立資訊主頁
請按照下列步驟套用解決方法,並找出資訊主頁未建立的原因:
- 查看
Dashboard自訂資源的狀態,確認是否有任何錯誤。自訂資源必須處於Ready狀態。 - 請確認您查看的是正確的 Grafana 執行個體。舉例來說,如果您在名為
my-namespace的專案命名空間中部署資訊主頁,則資訊主頁必須位於https://GDCH_URL/my-namespace/grafana端點的 Grafana 執行個體中。 - 檢查
gpc-system命名空間中fleet-admin-controller的記錄。在記錄中搜尋資訊主頁名稱,找出與資訊主頁相關的錯誤。如果發現錯誤,表示configMap物件中的 JSON 檔案格式不正確,必須修正。 - 查看
PROJECT_NAME-obs-system命名空間中的 Grafana 記錄,找出任何錯誤。資訊主頁會查詢 Grafana REST API,因此 Grafana 必須正常運作,才能建立資訊主頁。
無法開啟快訊
請按照下列步驟套用解決方法,並找出快訊無法開啟的原因:
- 確認 Cortex 和 Loki 都處於 bucket-storage 模式。後端必須由 bucket 儲存空間支援,規則才會生效。
- 確認
MonitoringRule和LoggingRule自訂資源的狀態為Ready。 - 請檢查下列警告觸發條件:
- PromQL 和 LogQL 運算式:請參閱「建立警告規則」說明文件,比較您使用的所有函式,確保規則設定符合需求。確認運算式會傳回
true或false值。 - 持續時間:自訂資源的
for欄位定義條件必須符合的時間長度。interval欄位定義評估條件的頻率。請檢查這些欄位的值是否彼此相符,並確保條件符合邏輯。
- PromQL 和 LogQL 運算式:請參閱「建立警告規則」說明文件,比較您使用的所有函式,確保規則設定符合需求。確認運算式會傳回
- 在 Grafana UI 的「Alerts」(快訊) 頁面,查看快訊是否已開啟。
- 如果 Grafana 顯示快訊已開啟,請檢查通知管道,並確認 Alertmanager 可以與這些管道聯絡,以產生快訊。
無法提供預期記錄
如果找不到元件的作業記錄,請按照下列步驟操作:
- 檢查元件是否正在執行並產生記錄。
- 確認是否應將元件記錄收集為內建功能。如果沒有,請確認您已部署
LoggingTarget自訂資源,且該資源具有有效規格和Ready狀態。
如果找不到元件的稽核記錄,請按照下列步驟操作:
- 如果元件會將記錄寫入檔案,請確認該檔案確實存在於節點的檔案系統中,路徑為
/var/log/audit/SERVICE_NAME/NAMESPACE/ACCESS_LEVEL/audit.log。 - 確認同一節點上的
anthos-audit-logs-forwarder-SUFFIXPod 沒有錯誤。 - 如果元件使用 syslog 端點接收記錄,請確認您已部署
AuditLoggingTarget自訂資源,且該資源具有有效規格和Ready狀態。
找出預先定義的警告規則
本節說明 Observability 元件中預先定義的警告規則,這些規則會在系統故障時通知您。
Loki 中預先定義的警告規則
下表列出 Loki 中預先安裝的稽核記錄失敗警告規則:
| 名稱 | 類型 | 說明 |
|---|---|---|
FluentBitAuditLoggingWriteFailure |
重大 | Fluent Bit 在過去五分鐘內無法轉送稽核記錄。 |
LokiAuditLoggingWriteFailure |
重大 | Loki 無法將稽核記錄寫入後端儲存空間。 |
如果顯示一或多則這類快訊,代表系統遺失至少一筆稽核記錄。
Prometheus 預先定義的警告規則
下表列出 Prometheus for Kubernetes 元件預先安裝的警告規則:
| 名稱 | 類型 | 說明 |
|---|---|---|
KubeAPIDown |
重大 | Kube API 已從 Prometheus 目標探索中消失 15 分鐘。 |
KubeClientErrors |
警告 | Kubernetes API 伺服器用戶端的錯誤率已超過 0.01 達 15 分鐘。 |
KubeClientErrors |
重大 | Kubernetes API 伺服器用戶端的錯誤率已超過 0.1,且持續 15 分鐘。 |
KubePodCrashLooping |
警告 | Pod 處於當機迴圈狀態超過 15 分鐘。 |
KubePodNotReady |
警告 | Pod 處於未就緒狀態超過 15 分鐘。 |
KubePersistentVolumeFillingUp |
重大 | 已聲明 PersistentVolume 物件的可用位元組數小於 0.03。 |
KubePersistentVolumeFillingUp |
警告 | 已聲明 PersistentVolume 物件的可用位元組數小於 0.15。 |
KubePersistentVolumeErrors |
重大 | 永久磁碟區處於 Failed 或 Pending 階段的時間已達五分鐘。 |
KubeNodeNotReady |
警告 | 節點未就緒的時間超過 15 分鐘。 |
KubeNodeCPUUsageHigh |
重大 | 節點的 CPU 使用率超過 80%。 |
KubeNodeMemoryUsageHigh |
重大 | 節點的記憶體用量超過 80%。 |
NodeFilesystemSpaceFillingUp |
警告 | 節點的檔案系統用量超過 60%。 |
NodeFilesystemSpaceFillingUp |
重大 | 節點的檔案系統用量超過 85%。 |
CertManagerCertExpirySoon |
警告 | 憑證將於 21 天後到期。 |
CertManagerCertNotReady |
重大 | 10 分鐘後,憑證仍無法提供流量。 |
CertManagerHittingRateLimits |
重大 | 建立或更新憑證時,您在五分鐘內達到頻率限制。 |
DeploymentNotReady |
重大 | 組織基礎架構叢集上的 Deployment 處於未就緒狀態超過 15 分鐘。 |
StatefulSetNotReady |
重大 | 組織基礎架構叢集上的 StatefulSet 物件處於未就緒狀態超過 15 分鐘。 |
AuditLogsForwarderDown |
重大 | anthos-audit-logs-forwarder DaemonSet 已停機超過 15 分鐘。 |
AuditLogsLokiDown |
重大 | audit-logs-loki StatefulSet 處於未就緒狀態超過 15 分鐘。 |