部署 Google Cloud Managed Service for Prometheus 後,您可以查詢傳送至代管服務的資料,並在圖表和資訊主頁中顯示結果。
本文將說明指標範圍 (決定可查詢的資料),以及下列以 Prometheus 為基礎的方法,用於擷取及使用您收集的資料:
- Prometheus HTTP API
- Prometheus UI
Managed Service for Prometheus 的所有查詢介面都已設定為使用 Cloud Monitoring API 從 Monarch 擷取資料。只要查詢 Monarch,而非查詢本機 Prometheus 伺服器的資料,就能大規模進行全域監控。
事前準備
如果尚未部署代管服務,請設定代管收集或自行部署收集。如果您只對使用 PromQL 查詢 Cloud Monitoring 指標感興趣,可以略過這個步驟。
設定環境
為避免重複輸入專案 ID 或叢集名稱,請執行下列設定:
請依下列方式設定指令列工具:
設定 gcloud CLI,以參照Google Cloud 專案的 ID:
gcloud config set project PROJECT_ID
將
kubectl
CLI 設為使用叢集:kubectl config set-cluster CLUSTER_NAME
如要進一步瞭解這些工具,請參閱下列說明:
設定命名空間
為您建立的資源建立 NAMESPACE_NAME
Kubernetes 命名空間,做為範例應用程式的一部分:
kubectl create ns NAMESPACE_NAME
驗證服務帳戶憑證
如果 Kubernetes 叢集已啟用 Workload Identity Federation for GKE, 則可以略過本節。
在 GKE 上執行時,Managed Service for Prometheus 會根據 Compute Engine 預設服務帳戶,自動從環境中擷取憑證。根據預設,預設服務帳戶具備必要權限 monitoring.metricWriter
和 monitoring.viewer
。如果您未使用 GKE 的 Workload Identity Federation,且先前已從預設節點服務帳戶移除任一角色,請先重新新增缺少的權限,再繼續操作。
設定 Workload Identity Federation for GKE 的服務帳戶
如果 Kubernetes 叢集未啟用 GKE 適用的工作負載身分聯盟,則可跳過本節。
Managed Service for Prometheus 會使用 Cloud Monitoring API 擷取指標資料。如果叢集使用 GKE 適用的工作負載身分聯盟,您必須授予 Kubernetes 服務帳戶 Monitoring API 的權限。本節說明下列事項:
- 建立專屬Google Cloud 服務帳戶。
gmp-test-sa
. - 將 Google Cloud 服務帳戶繫結至測試命名空間中的預設 Kubernetes 服務帳戶,
NAMESPACE_NAME
。 - 將必要權限授予 Google Cloud 服務帳戶。
建立及繫結服務帳戶
這個步驟會出現在 Managed Service for Prometheus 說明文件的多個位置。如果您已在先前的作業中執行這個步驟,則無須重複執行。直接跳到「授權服務帳戶」。
下列指令序列會建立 gmp-test-sa
服務帳戶,並將其繫結至 NAMESPACE_NAME
命名空間中的預設 Kubernetes 服務帳戶:
gcloud config set project PROJECT_ID \ && gcloud iam service-accounts create gmp-test-sa \ && gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:PROJECT_ID.svc.id.goog[NAMESPACE_NAME/default]" \ gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com \ && kubectl annotate serviceaccount \ --namespace NAMESPACE_NAME \ default \ iam.gke.io/gcp-service-account=gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com
如果您使用其他 GKE 命名空間或服務帳戶,請適當調整指令。
授權給服務帳戶
相關權限會歸類為角色,您可將角色授予主體,在本例中即為 Google Cloud服務帳戶。如要進一步瞭解 Monitoring 角色,請參閱存取權控管。
下列指令會授予 Google Cloud 服務帳戶 (gmp-test-sa
) 讀取指標資料所需的 Monitoring API 角色。
如果您已在先前的作業中授予 Google Cloud 服務帳戶特定角色,就不必再次執行這項操作。
如要授權服務帳戶從多專案指標範圍讀取資料,請按照這些操作說明操作,然後參閱「變更查詢的專案」。gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/monitoring.viewer
對 GKE 適用的 Workload Identity 聯盟設定進行偵錯
如果無法順利使用 Workload Identity Federation for GKE,請參閱驗證 Workload Identity Federation for GKE 設定的說明文件,以及 Workload Identity Federation for GKE 疑難排解指南。
設定 Workload Identity Federation for GKE 時,最常見的錯誤來源是錯別字和部分複製貼上,因此我們強烈建議使用這些操作說明中程式碼範例內建的可編輯變數和可點選的複製貼上圖示。
實際工作環境中的 GKE 工作負載身分聯盟
本文所述範例會將 Google Cloud 服務帳戶繫結至預設 Kubernetes 服務帳戶,並授予 Google Cloud服務帳戶使用 Monitoring API 的所有必要權限。
在正式環境中,您可能需要使用更精細的方法,為每個元件建立服務帳戶,並授予最基本的權限。如要進一步瞭解如何設定服務帳戶來管理工作負載身分,請參閱「使用 Workload Identity Federation for GKE」。
查詢和指標範圍
無論使用哪種方法查詢資料,可查詢的資料都取決於 Cloud Monitoring 建構的指標範圍。舉例來說,如果您使用 Grafana 查詢 Managed Service for Prometheus 資料,則必須將每個指標範圍設定為獨立的資料來源。
Monitoring 指標範圍是僅限讀取時間的建構元件,可讓您查詢屬於多個 Google Cloud 專案的指標資料。每個指標範圍都會由指定 Google Cloud 專案代管,該專案稱為「範圍專案」。
根據預設,專案是自身指標範圍的限定範圍專案,而指標範圍包含該專案的指標和設定。限定範圍專案的指標範圍可包含多個受監控的專案,且限定範圍專案可查看指標範圍內所有受監控專案的指標和設定。受監控專案也可以屬於多個指標範圍。
在限定範圍專案中查詢指標時,如果該專案代管多專案指標範圍,您就能從多項專案擷取資料。如果指標範圍包含所有專案,系統就會評估全域查詢和規則。
如要進一步瞭解專案範圍和指標範圍,請參閱「指標範圍」。如要瞭解如何設定多專案指標範圍,請參閱「查看多項專案的指標」。
Cloud Monitoring 中的 Managed Service for Prometheus 資料
如要驗證 Prometheus 資料是否已匯出,最簡單的方法是在 Google Cloud 主控台中使用 Cloud Monitoring Metrics Explorer 頁面,該頁面支援 PromQL。如需操作說明,請參閱在 Cloud Monitoring 中使用 PromQL 查詢。
獨立 Prometheus 前端 UI
您可以使用獨立的 Prometheus 前端使用者介面,存取及視覺化已擷取的資料。這個使用者介面會根據與專案相關聯的指標範圍,對Google Cloud 專案中的所有資料執行 PromQL 查詢。
前端 UI 也會做為驗證 Proxy,用於存取擷取的資料。這項功能適用於不支援服務帳戶 OAuth2 的用戶端工具,包括 Grafana 或使用 prometheus-adapter
程式庫的水平 Pod 自動調度。
強烈建議您使用資料來源同步器,設定 Grafana 來顯示 Managed Service for Prometheus 的資料。如果您先前使用獨立的 Prometheus 前端 UI 設定 Grafana,可以參考本文的操作說明。
部署前端 UI
如要為 Managed Service for Prometheus 部署獨立的 Prometheus 前端 UI,請執行下列指令:
部署
frontend
服務,並將其設定為查詢所選指標範圍的範圍界定專案:curl https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/e2cd07628f5bf3be5dc794ce8f4d4b9a206447ec/examples/frontend.yaml | sed 's/\$PROJECT_ID/PROJECT_ID/' | kubectl apply -n NAMESPACE_NAME -f -
將
frontend
服務的通訊埠轉送至本機電腦。以下範例會將服務轉送至通訊埠 9090:kubectl -n NAMESPACE_NAME port-forward svc/frontend 9090
這個指令不會傳回任何內容,但執行時會回報網址的存取次數。
如要繼續使用 kube-prometheus 安裝的 Grafana 部署作業,請改為在 monitoring
命名空間中部署獨立的 Prometheus 前端 UI。
您可以在瀏覽器中透過 http://localhost:9090
網址存取獨立的 Prometheus 前端 UI。如果您使用 Cloud Shell 執行這個步驟,可以按一下「Web Preview」(網頁預覽) 按鈕來存取。
下圖顯示獨立 Prometheus 前端使用者介面中的表格,其中顯示 up
指標:
您也可以在 frontend
服務上設定適當的驗證和授權,例如使用 Identity-Aware Proxy。如要進一步瞭解如何公開服務,請參閱使用服務公開應用程式。
變更查詢的專案,即可監控多項專案
frontend
部署作業會使用已設定的 Google Cloud 專案做為範圍專案。如果這個專案是多專案指標範圍的範圍專案,就能讀取指標範圍內所有專案的指標。
如要指定具有多專案指標範圍的專案,請使用 --query.project-id
標記。
一般來說,您會使用專屬專案做為範圍專案,而這個專案與frontend
部署作業執行的專案不同。如要讓部署作業讀取其他目標專案,請完成下列步驟:
- 告知
frontend
部署作業哪個專案是目標專案。 授予服務帳戶讀取目標專案的權限。 如果您一直使用 Compute Engine
default
服務帳戶,可以採取下列任一做法:
如要授予存取其他 Google Cloud 專案所需的權限,請按照下列步驟操作:
授予服務帳戶從要查詢的目標專案讀取資料的權限:
gcloud projects add-iam-policy-binding SCOPING_PROJECT_ID \ --member=serviceAccount:gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/monitoring.viewer
開啟先前建立的
frontend
部署作業進行編輯:kubectl -n NAMESPACE_NAME edit deploy frontend
使用
--query.project-id
標記指定目標專案:apiVersion: apps/v1 kind: Deployment metadata: namespace: NAMESPACE_NAME name: frontend spec: template containers: - name: frontend args: - --query.project-id=SCOPING_PROJECT_ID ...
儲存檔案並關閉編輯器。變更套用後,前端 Pod 會重新啟動並查詢新的範圍專案。
驗證前端 UI
frontend
部署作業支援基本存取驗證,適用於 0.5.0 以上版本中經過驗證的存取權。如要啟用驗證,請將 AUTH_USERNAME
和 AUTH_PASSWORD
環境變數新增至部署作業:
apiVersion: apps/v1 kind: Deployment metadata: namespace: NAMESPACE_NAME name: frontend spec: template containers: - name: frontend env: - name: AUTH_USERNAME value: USERNAME - name: AUTH_PASSWORD value: PASSWORD ...
明確提供憑證
如果您在 Google Kubernetes Engine 叢集中執行 frontend
容器,可以略過本節。如果在 GKE 上遇到驗證問題,請參閱「驗證服務帳戶憑證」。
在 GKE 上執行時,前端會根據節點的服務帳戶或 Workload Identity Federation for GKE 設定,自動從環境中擷取憑證。在非 GKE Kubernetes 叢集中,必須使用旗標或 GOOGLE_APPLICATION_CREDENTIALS
環境變數,明確向前端提供憑證。
將環境設為目標專案:
gcloud config set project PROJECT_ID
建立服務帳戶:
gcloud iam service-accounts create gmp-test-sa
這個步驟會建立服務帳戶,您可能已在「適用於 GKE 的工作負載身分聯盟」說明中建立該帳戶。
將必要權限授予服務帳戶:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/monitoring.viewer
建立並下載服務帳戶的金鑰:
gcloud iam service-accounts keys create gmp-test-sa-key.json \ --iam-account=gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com
將金鑰檔案新增為非 GKE 叢集的密鑰:
kubectl -n NAMESPACE_NAME create secret generic gmp-test-sa \ --from-file=key.json=gmp-test-sa-key.json
開啟前端 Deployment 資源進行編輯:
kubectl -n NAMESPACE_NAME edit deploy frontend
將以粗體顯示的文字新增至資源:
apiVersion: apps/v1 kind: Deployment metadata: namespace: NAMESPACE_NAME name: frontend spec: template containers: - name: frontend args: - --query.credentials-file=/gmp/key.json ... volumeMounts: - name: gmp-sa mountPath: /gmp readOnly: true ... volumes: - name: gmp-sa secret: secretName: gmp-test-sa ...
儲存檔案並關閉編輯器。套用變更後,系統會重新建立 Pod,並開始使用指定的服務帳戶向指標後端進行驗證。
GOOGLE_APPLICATION_CREDENTIALS
環境變數設定金鑰檔案路徑,而不使用本範例中設定的旗標。透過前端 Proxy 使用 Grafana
Managed Service for Prometheus 使用 Grafana 的內建 Prometheus 資料來源,因此您可以繼續使用任何社群建立或個人 Grafana 資訊主頁,無須進行任何變更。您也可以將 Grafana 資訊主頁匯入 Cloud Monitoring。
通過 API 驗證 Google Cloud
Google Cloud 所有 API 都必須使用 OAuth2 進行驗證,但 Grafana 不支援對 Prometheus 資料來源使用的服務帳戶進行 OAuth2 驗證。如要搭配使用 Grafana 與 Managed Service for Prometheus,可以將獨立的 Prometheus 前端 UI 做為驗證 Proxy。
您必須將 Grafana 指向獨立的前端 UI Proxy,才能全域查詢資料。如未按照這些步驟操作,Grafana 只會針對本機 Prometheus 伺服器中的資料執行查詢。
如果您尚未部署 Prometheus UI
frontend
服務做為 Proxy,請立即執行下列指令進行部署:curl https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.15.3/examples/frontend.yaml | sed 's/\$PROJECT_ID/PROJECT_ID/' | kubectl apply -n NAMESPACE_NAME -f -
如果是 Anthos 叢集等非 GKE Kubernetes 叢集,請參閱「明確提供憑證」一文,授予
frontend
服務查詢指標所需的權限。如要設定
frontend
服務使用的指標範圍,以便查詢多個專案,請參閱變更查詢專案一文中的操作說明。如果您已部署 Grafana (例如透過
kube-prometheus
程式庫安裝,或使用 Helm 圖表安裝),可以繼續搭配 Managed Service for Prometheus 使用。如果是,請參閱「設定資料來源」一文,瞭解後續步驟。否則,您必須先部署 Grafana。部署 Grafana
如果叢集中沒有正在執行的 Grafana 部署作業,您可以建立暫時性測試部署作業來進行實驗。
如要建立暫時性 Grafana 部署作業,請將 Managed Service for Prometheus
grafana.yaml
資訊清單套用至叢集,然後透過通訊埠轉送將grafana
服務送至本機。以下範例會將服務轉送至通訊埠 3000。套用
grafana.yaml
資訊清單:kubectl -n NAMESPACE_NAME apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/beb779d32f4dd531a3faad9f2916617b8d9baefd/examples/grafana.yaml
將
grafana
服務的通訊埠轉送至本機電腦。這個範例會將服務轉送至通訊埠 3000:kubectl -n NAMESPACE_NAME port-forward svc/grafana 3000
這個指令不會傳回任何內容,但執行時會回報網址的存取次數。
您可以在瀏覽器中透過網址
http://localhost:3000
存取 Grafana,並使用使用者名稱:密碼admin:admin
。
設定資料來源
如要使用 Prometheus UI 做為驗證 Proxy,在 Grafana 中查詢 Managed Service for Prometheus,必須先在 Grafana 中新增資料來源。如要為代管服務新增資料來源,請按照下列步驟操作:
前往 Grafana 部署作業,例如瀏覽至
http://localhost:3000
URL,即可前往 Grafana 歡迎頁面。從 Grafana 主選單中選取「Configuration」,然後選取「Data Sources」。
選取「新增資料來源」,然後選取 Prometheus 做為時間序列資料庫。
在「HTTP」窗格的「URL」欄位中,輸入 Managed Service for Prometheus
frontend
服務的網址。如果您已將 Prometheus 前端 UI 設定為在通訊埠 9090 上執行,則這個欄位的服務網址為http://frontend.NAMESPACE_NAME.svc:9090
。在「HTTP」窗格的「Timeout」(逾時) 欄位中,將值設為
120
。如果使用基本驗證設定前端 UI Proxy,請在「Auth」窗格中啟用「Basic auth」切換鈕,然後填寫使用者名稱和密碼。
在「Query timeout」(查詢逾時) 欄位中,將值設為
2m
。在「HTTP Method」(HTTP 方法) 欄位中,選取「
GET
」。在「Prometheus type」(Prometheus 類型) 欄位中,選取「
Prometheus
」。在「Prometheus version」(Prometheus 版本) 欄位中,選取
2.40.x
以上版本。如果您有多個 Prometheus 資料來源,可以將這個資料來源命名為「Managed Prometheus Service」。其他欄位則保留預設值。
按一下「儲存並測試」,然後尋找「資料來源運作正常」訊息。
使用新的資料來源
現在您可以使用新的資料來源建立 Grafana 資訊主頁。您也可以將現有資訊主頁重新導向至新的資料來源。以下螢幕截圖顯示 Grafana 圖表,其中顯示
up
指標:將 Managed Service for Prometheus 連線至 Thanos
您可以透過開放原始碼 thanos-promql-connector,將 Managed Service for Prometheus 聯合至自行部署的 Thanos 堆疊。 Google Cloud不支援這項整合。
Prometheus HTTP API
Managed Service for Prometheus 支援上游的 Prometheus HTTP API,網址前置字元為
https://monitoring.googleapis.com/v1/projects/PROJECT_ID/location/global/prometheus/api/v1/
。如要瞭解支援的端點,請參閱「API 相容性」。任何可與標準 Prometheus 伺服器互動的工具,都能存取這項 API。這只是 API 端點,不會提供 UI。 做為 Google Cloud API,這個 API 會使用 OAuth2 驗證,而且做為 Cloud Monitoring API 的一部分,
PROJECT_ID
的值是指標範圍的範圍設定專案,因此您可以從指標範圍中的任何專案擷取資料。如要進一步瞭解範圍,請參閱「指標範圍」。如要使用這個端點,請提供 PromQL 運算式。舉例來說,下列即時查詢會擷取所有含有指標名稱
up
的時間序列:curl https://monitoring.googleapis.com/v1/projects/PROJECT_ID/location/global/prometheus/api/v1/query \ -d "query=up" \ -H "Authorization: Bearer $(gcloud auth print-access-token)"
如果要求成功,查詢會傳回如下的結果,並已格式化為易讀形式:
{ "status":"success", "data":{ "resultType":"vector", "result":[{ "metric": { "__name__":"up", "cluster":"gmp-test", "instance":"prom-example-84c6f547f5-g4ljn:web", "job":"prometheus", "location":"us-central1-a", "project_id":"a-gcp-project" }, "value": [1634873239.971,"1"] }] } }
如要瞭解如何使用 PromQL 查詢Google Cloud 系統指標,請參閱「適用於 Cloud Monitoring 指標的 PromQL」。
API 相容性
Managed Service for Prometheus 支援下列 Prometheus HTTP API 端點,網址前置字元為
https://monitoring.googleapis.com/v1/projects/PROJECT_ID/location/global/prometheus/api/v1/
。如需完整說明文件,請參閱 Cloud Monitoring API 參考說明文件。Cloud Monitoring 語言專屬用戶端程式庫不提供 Prometheus HTTP 端點。
如要瞭解 PromQL 相容性,請參閱 PromQL 支援。
系統完全支援下列端點:
只有在提供
__name__
標籤時,/api/v1/label/<label_name>/values
端點才會運作,方法是將標籤做為<label_name>
值使用,或使用一系列選取器完全比對標籤。舉例來說,系統完全支援下列呼叫:/api/v1/label/__name__/values
/api/v1/label/__name__/values?match[]={__name__=~".*metricname.*"}
/api/v1/label/labelname/values?match[]={__name__="metricname"}
這項限制會導致 Grafana 中的
label_values($label)
變數查詢失敗。請改用label_values($metric, $label)
。建議使用這類查詢,因為這樣可避免擷取與指定資訊主頁不相關的指標標籤值。/api/v1/series
端點支援GET
,但不支援POST
要求。使用資料來源同步器或前端 Proxy 時,系統會為您管理這項限制。您也可以在 Grafana 中設定 Prometheus 資料來源,只發出GET
要求。match[]
參數不支援在__name__
標籤上進行規則運算式比對。