連接的叢集的記錄和監控功能

本頁說明如何將連結的叢集中的記錄和指標匯出至 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。

必要條件

  1. 啟用計費功能的 Google Cloud 專案。如要瞭解 Cloud Operations 的費用,請參閱定價指南

  2. 一個已附加的叢集,並按照本指南註冊。執行下列指令,確認叢集已註冊。

    gcloud container fleet memberships list
    

    輸出範例:

    NAME  EXTERNAL_ID
    eks   ae7b76b8-7922-42e9-89cd-e46bb8c4ffe4
    

  3. 可存取叢集並執行 kubectl 指令的本機環境。如需透過 gcloud 安裝 kubectl 的操作說明,請參閱 GKE 快速入門導覽課程。執行下列指令,確認您可以使用 kubectl 連線至附加的叢集。

    kubectl cluster-info
    

    輸出範例:

    Kubernetes master is running at https://[redacted].gr7.us-east-2.eks.amazonaws.com
    

設定

  1. 複製範例存放區,然後前往本指南的目錄。

    git clone https://github.com/GoogleCloudPlatform/anthos-samples
    cd anthos-samples/attached-logging-monitoring
    
  2. 將專案 ID 變數設為已註冊叢集的專案。

    PROJECT_ID="your-project-id"
    
  3. 建立 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
    
  4. 為剛建立的服務帳戶建立並下載 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
    

安裝記錄代理程式

  1. 變更至 logging/ 目錄。

    cd logging/
    
  2. 開啟 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
    

  3. aggregator.yamlvolumeClaimTemplates/spec 下,為叢集指定 PersistentVolumeClaim storageClassName:我們已為 EKS 和 AKS 提供預設值,您可以視需要取消註解。如果您使用 EKS,則為 gp2。如果是 AKS,則為 default

    如果您已在 AWSAzure 中設定自訂 Kubernetes 儲存空間類別、想使用非預設儲存空間類別,或是使用其他相容的叢集類型,可以新增自己的 storageClassName。適當的 storageClassName 取決於管理員使用 StorageClass 為叢集佈建的 PersistentVolume (PV) 類型。如要進一步瞭解儲存空間級別,以及其他主要 Kubernetes 供應商的預設儲存空間級別,請參閱 Kubernetes 說明文件

    # storageClassName: standard #Google Cloud
    # storageClassName: gp2 #AWS EKS
    # storageClassName: default #Azure AKS
    
  4. 將記錄檔匯總工具和轉送工具部署至叢集。

    kubectl apply -f aggregator.yaml
    kubectl apply -f forwarder.yaml
    
  5. 確認 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
    

  6. 取得匯總工具記錄,並確認記錄是否傳送至 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.
    

  7. 將測試應用程式部署至叢集。這是具有 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
    
  8. 確認您可以在 Cloud Logging 資訊主頁中查看附加叢集的記錄。前往 Google Cloud 控制台的「Logs Explorer」頁面:

    前往記錄檔探索工具

  9. 在記錄檔探索工具中,將下列範例查詢複製到「查詢產生器」欄位,並將 ${your-cluster-name} 替換為叢集名稱。按一下「執行查詢」。「Query results」(查詢結果) 下方應會顯示最近的叢集記錄。

    resource.type="k8s_container" resource.labels.cluster_name="${your-cluster-name}"
    

附加叢集的記錄檔

安裝監控代理程式

  1. 離開 logging/ 目錄,然後進入 monitoring/ 目錄。

    cd ../monitoring
    
  2. 開啟 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]"
    
  3. 在 prometheus.yaml 的 volumeClaimTemplates/spec 下,取消註解與雲端服務供應商相符的 storageClassName,如安裝記錄代理程式一文所述。

    # storageClassName: standard #Google Cloud
    # storageClassName: gp2 #AWS EKS
    # storageClassName: default #Azure AKS
    
  4. 將設定有匯出工具補充資訊的 stackdriver-prometheus StatefulSet 部署至叢集。

    kubectl apply -f server-configmap.yaml
    kubectl apply -f sidecar-configmap.yaml
    kubectl apply -f prometheus.yaml
    
  5. 確認 stackdriver-prometheus Pod 正在執行。

    watch kubectl get pods -n kube-system | grep stackdriver-prometheus
    
    輸出:
    stackdriver-prometheus-k8s-0         2/2     Running   0          5h24m
    
  6. 取得 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"
    
  7. 確認叢集指標已成功匯出至 Cloud Monitoring。前往 Google Cloud 控制台的 Metrics Explorer:

    前往「Metrics Explorer」

  8. 按一下「查詢編輯器」,然後複製下列指令,並將 ${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
    

監控附加叢集

清除所用資源

  1. 如要移除本指南中建立的所有資源,請按照下列步驟操作:

    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
    

後續步驟

瞭解 Cloud Logging:

瞭解 Cloud Monitoring: