本頁說明如何將連結的叢集中的記錄和指標匯出至 Cloud Logging 和 Cloud Monitoring。
運作方式
Google Cloud Observability 是Google Cloud的內建觀測解決方案。如要將附加叢集的叢集層級遙測資料匯出至 Google Cloud,您需要在叢集中部署下列開放原始碼匯出代理程式:
- Stackdriver Log Aggregator (stackdriver-log-aggregator-*):Fluentd StatefulSet,可將記錄傳送至 Cloud Logging (原稱 Stackdriver Logging) API。
- Stackdriver Log Forwarder (stackdriver-log-forwarder-*):Fluentbit Daemonset,可將每個 Kubernetes 節點的記錄轉送至 Stackdriver Log Aggregator。
- Stackdriver 指標收集器 (stackdriver-prometheus-k8s-*)。這是 Prometheus StatefulSet,已設定 stackdriver 匯出補充資訊容器,可將 Prometheus 指標傳送至 Cloud Monitoring (舊稱 Stackdriver Monitoring) API。補充資訊是同一 Pod 中的另一個容器,可讀取 Prometheus 伺服器儲存在磁碟上的指標,並將這些指標轉送至 Cloud Monitoring API。
必要條件
啟用計費功能的 Google Cloud 專案。如要瞭解 Cloud Operations 的費用,請參閱定價指南。
一個已附加的叢集,並按照本指南註冊。執行下列指令,確認叢集已註冊。
gcloud container fleet memberships list
輸出範例:
NAME EXTERNAL_ID eks ae7b76b8-7922-42e9-89cd-e46bb8c4ffe4
可存取叢集並執行
kubectl
指令的本機環境。如需透過 gcloud 安裝kubectl
的操作說明,請參閱 GKE 快速入門導覽課程。執行下列指令,確認您可以使用kubectl
連線至附加的叢集。kubectl cluster-info
輸出範例:
Kubernetes master is running at https://[redacted].gr7.us-east-2.eks.amazonaws.com
設定
複製範例存放區,然後前往本指南的目錄。
git clone https://github.com/GoogleCloudPlatform/anthos-samples cd anthos-samples/attached-logging-monitoring
將專案 ID 變數設為已註冊叢集的專案。
PROJECT_ID="your-project-id"
建立 Google Cloud 服務帳戶,並授予將指標和記錄寫入 Cloud Monitoring 和 Cloud Logging API 的權限。您會在下一節中,將這個服務帳戶的金鑰新增至部署的工作負載。
gcloud iam service-accounts create anthos-lm-forwarder gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:anthos-lm-forwarder@${PROJECT_ID}.iam.gserviceaccount.com" \ --role=roles/logging.logWriter gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:anthos-lm-forwarder@${PROJECT_ID}.iam.gserviceaccount.com" \ --role=roles/monitoring.metricWriter
為剛建立的服務帳戶建立並下載 JSON 金鑰,然後使用該金鑰在叢集中建立 Kubernetes 密鑰。
gcloud iam service-accounts keys create credentials.json \ --iam-account anthos-lm-forwarder@${PROJECT_ID}.iam.gserviceaccount.com kubectl create secret generic google-cloud-credentials -n kube-system --from-file credentials.json
安裝記錄代理程式
變更至
logging/
目錄。cd logging/
開啟
aggregator.yaml
。在檔案底部,將下列變數設為與專案和叢集對應的值:project_id [PROJECT_ID] k8s_cluster_name [CLUSTER_NAME] k8s_cluster_location [CLUSTER_LOCATION]
如要找出叢集位置,請使用已連結叢集的成員資格名稱執行下列指令,並取得
/locations/<location>
中顯示的位置。gcloud container fleet memberships describe eks | grep name
輸出:
name: projects/my-project/locations/global/memberships/eks
在
aggregator.yaml
的volumeClaimTemplates/spec
下,為叢集指定 PersistentVolumeClaimstorageClassName
:我們已為 EKS 和 AKS 提供預設值,您可以視需要取消註解。如果您使用 EKS,則為gp2
。如果是 AKS,則為default
。如果您已在 AWS 或 Azure 中設定自訂 Kubernetes 儲存空間類別、想使用非預設儲存空間類別,或是使用其他相容的叢集類型,可以新增自己的
storageClassName
。適當的storageClassName
取決於管理員使用StorageClass
為叢集佈建的 PersistentVolume (PV) 類型。如要進一步瞭解儲存空間級別,以及其他主要 Kubernetes 供應商的預設儲存空間級別,請參閱 Kubernetes 說明文件。# storageClassName: standard #Google Cloud # storageClassName: gp2 #AWS EKS # storageClassName: default #Azure AKS
將記錄檔匯總工具和轉送工具部署至叢集。
kubectl apply -f aggregator.yaml kubectl apply -f forwarder.yaml
確認 Pod 已啟動。您應該會看到 2 個匯總器 Pod,以及每個 Kubernetes 工作站節點各 1 個轉送器 Pod。舉例來說,在 4 節點叢集中,您應該會看到 4 個轉送程式 Pod。
kubectl get pods -n kube-system | grep stackdriver-log
輸出:
stackdriver-log-aggregator-0 1/1 Running 0 139m stackdriver-log-aggregator-1 1/1 Running 0 139m stackdriver-log-forwarder-2vlxb 1/1 Running 0 139m stackdriver-log-forwarder-dwgb7 1/1 Running 0 139m stackdriver-log-forwarder-rfrdk 1/1 Running 0 139m stackdriver-log-forwarder-sqz7b 1/1 Running 0 139m
取得匯總工具記錄,並確認記錄是否傳送至 Google Cloud。
kubectl logs stackdriver-log-aggregator-0 -n kube-system
輸出:
2020-10-12 14:35:40 +0000 [info]: #3 [google_cloud] Successfully sent gRPC to Stackdriver Logging API.
將測試應用程式部署至叢集。這是具有 loadgenerator 的基本 HTTP 網路伺服器。
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/server/server.yaml kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/loadgen/loadgen.yaml
確認您可以在 Cloud Logging 資訊主頁中查看附加叢集的記錄。前往 Google Cloud 控制台的「Logs Explorer」頁面:
在記錄檔探索工具中,將下列範例查詢複製到「查詢產生器」欄位,並將
${your-cluster-name}
替換為叢集名稱。按一下「執行查詢」。「Query results」(查詢結果) 下方應會顯示最近的叢集記錄。resource.type="k8s_container" resource.labels.cluster_name="${your-cluster-name}"
安裝監控代理程式
離開
logging/
目錄,然後進入monitoring/
目錄。cd ../monitoring
開啟
prometheus.yaml
。在stackdriver-prometheus-sidecar/args
底下,設定下列變數以符合您的環境。"--stackdriver.project-id=[PROJECT_ID]" "--stackdriver.kubernetes.location=[CLUSTER_LOCATION]" "--stackdriver.generic.location=[CLUSTER_LOCATION]" "--stackdriver.kubernetes.cluster-name=[CLUSTER_NAME]"
在 prometheus.yaml 的
volumeClaimTemplates/spec
下,取消註解與雲端服務供應商相符的storageClassName
,如安裝記錄代理程式一文所述。# storageClassName: standard #Google Cloud # storageClassName: gp2 #AWS EKS # storageClassName: default #Azure AKS
將設定有匯出工具補充資訊的 stackdriver-prometheus StatefulSet 部署至叢集。
kubectl apply -f server-configmap.yaml kubectl apply -f sidecar-configmap.yaml kubectl apply -f prometheus.yaml
確認
stackdriver-prometheus
Pod 正在執行。 輸出:watch kubectl get pods -n kube-system | grep stackdriver-prometheus
stackdriver-prometheus-k8s-0 2/2 Running 0 5h24m
取得 Stackdriver Prometheus 補充資訊容器記錄,確認 Pod 已啟動。
輸出:kubectl logs stackdriver-prometheus-k8s-0 -n kube-system stackdriver-prometheus-sidecar
level=info ts=2020-11-18T21:37:24.819Z caller=main.go:598 msg="Web server started" level=info ts=2020-11-18T21:37:24.819Z caller=main.go:579 msg="Stackdriver client started"
確認叢集指標已成功匯出至 Cloud Monitoring。前往 Google Cloud 控制台的 Metrics Explorer:
按一下「查詢編輯器」,然後複製下列指令,並將
${your-project-id}
和${your-cluster-name}
替換為您自己的專案和叢集資訊。然後點選「執行查詢」。畫面上會顯示1.0.
fetch k8s_container | metric 'kubernetes.io/anthos/up' | filter resource.project_id == '${your-project-id}' && (resource.cluster_name =='${your-cluster-name}') | group_by 1m, [value_up_mean: mean(value.up)] | every 1m
清除所用資源
如要移除本指南中建立的所有資源,請按照下列步驟操作:
kubectl delete -f logging kubectl delete -f monitoring kubectl delete secret google-cloud-credentials -n kube-system kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/loadgen/loadgen.yaml kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/server/server.yaml rm -r credentials.json gcloud compute service-accounts delete anthos-lm-forwarder