記錄檔和指標

本頁面說明 Google Distributed Cloud connected 如何記錄各種作業資訊,以及如何查看這些資訊。收集部分類型的記錄和指標會產生額外費用。詳情請參閱「記錄和指標的計費方式」。

設定記錄和監控功能

開始收集記錄和指標前,請先完成下列步驟:

  1. 使用下列指令啟用記錄 API:

    gcloud services enable opsconfigmonitoring.googleapis.com --project PROJECT_ID
    gcloud services enable logging.googleapis.com --project PROJECT_ID
    gcloud services enable monitoring.googleapis.com --project PROJECT_ID
    

    PROJECT_ID 替換為目標 Google Cloud 專案的 ID。

  2. 授予寫入記錄和指標所需的角色:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --role roles/opsconfigmonitoring.resourceMetadata.writer \
        --member "serviceAccount:PROJECT_ID.svc.id.goog[kube-system/metadata-agent]"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --role roles/logging.logWriter \
         --member "serviceAccount:PROJECT_ID.svc.id.goog[kube-system/stackdriver-log-forwarder]"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --role roles/monitoring.metricWriter \
        --member "serviceAccount:PROJECT_ID.svc.id.goog[kube-system/gke-metrics-agent]"
    

    PROJECT_ID 替換為目標 Google Cloud 專案的 ID。

記錄

本節列出 Distributed Cloud 支援的 Cloud Logging 資源類型。如要查看 Distributed Cloud 記錄,請使用 Google Cloud 控制台中的記錄檔探索工具。Distributed Cloud 記錄一律會啟用。

Distributed Cloud Connected 記錄的資源類型如下列標準 Kubernetes 資源:

  • k8s_container
  • k8s_node

您也可以使用 Cloud Logging API 擷取及擷取 Distributed Cloud 連線記錄。如要瞭解如何設定這項記錄機制,請參閱 Cloud Logging 用戶端程式庫的說明文件。

指標

本節列出 Distributed Cloud 支援的 Cloud Monitoring 指標。如要查看 Distributed Cloud 指標,請使用Google Cloud 控制台中的 Metrics Explorer

Distributed Cloud connected 叢集指標

對於 Distributed Cloud connected 叢集,Distributed Cloud connected 會提供由 Distributed Cloud connected 節點產生的下列指標類型:

  • 資源指標提供 Distributed Cloud 連線節點和 Pod 效能的相關資訊,例如 CPU 負載和記憶體用量。
  • 系統應用程式指標提供 Distributed Cloud connected 系統工作負載的相關資訊,例如 coredns

如需這類指標的清單,請參閱「Google Distributed Cloud 和 Google Distributed Cloud 指標」。

Distributed Cloud connected 不會提供與 Distributed Cloud connected 叢集相關聯的 Kubernetes 控制層所產生的指標。

Distributed Cloud connected 硬體指標

Distributed Cloud connected 會使用下列資源類型,提供 Distributed Cloud connected 硬體的指標:

  • edgecontainer.googleapis.com/Machine

Machine 資源指標

Distributed Cloud connected 會為 edgecontainer.googleapis.com/Machine 資源寫入下列 Cloud Monitoring API 指標:

指標 說明
/machine/cpu/total_cores
  • 類型:GAUGE
  • 類型:INT
機器上的實體處理器核心總數。
/machine/cpu/usage_time
  • 類型:CUMULATIVE
  • 類型:DOUBLE
  • 單位:Seconds
機器上所有核心的累計 CPU 使用時間。類型可以是 workload (客戶工作負載) 或 system (其他所有項目)。
/machine/cpu/utilization
  • 類型:GAUGE
  • 類型:DOUBLE
機器的 CPU 使用率百分比。範圍為 0 到 1。類型可以是 workload (客戶工作負載) 或 system (其他所有項目)。
/machine/memory/total_bytes
  • 類型:GAUGE
  • 類型:INT64
機器上的記憶體總量 (以位元組為單位)。
/machine/memory/used_bytes
  • 類型:GAUGE
  • 類型:INT64
機器上已用記憶體的位元組數。memory_type 可以是 evictable (可由核心回收) 或 non-evictable (不可回收)。
/machine/memory/utilization
  • 類型:GAUGE
  • 類型:DOUBLE
電腦的記憶體使用率百分比。範圍為 0 到 1。 memory_type 可以是 evictable (可由核心回收) 或 non-evictable (不可回收)。
/machine/network/up
  • 類型:GAUGE
  • 類型:BOOL
指出網路介面是否正常運作。包括主卡、次要卡和連接埠。
/machine/network/link_speed
  • 類型:GAUGE
  • 類型:DOUBLE
  • 單位:每秒位元組
主要網路介面卡的連結速度。
/machine/network/received_bytes_count
  • 類型:CUMULATIVE
  • 類型:DOUBLE
主要網路介面卡接收的位元組數。
/machine/network/sent_bytes_count
  • 類型:CUMULATIVE
  • 類型:DOUBLE
主要網路介面卡的傳送位元組數。
/machine/network/connectivity
  • 類型:GAUGE
  • 類型:BOOL
指出主要網路介面卡是否已連上網際網路。
/machine/disk/total_bytes
  • 類型:GAUGE
  • 類型:INT64
機器上的磁碟空間總位元組數。
/machine/disk/used_bytes
  • 類型:GAUGE
  • 類型:INT64
機器上已使用的磁碟空間位元組數。
/machine/disk/utilization
  • 類型:GAUGE
  • 類型:DOUBLE
電腦的磁碟空間使用率百分比。範圍為 0 到 1。
/machine/restart_count
  • 類型:CUMULATIVE
  • 類型:INT
裝置重新啟動的次數。
/machine/uptime
  • 類型:GAUGE
  • 類型:INT
  • 單位:Seconds
機器自上次重新啟動後已運作的時間。
/machine/connected
  • 類型:GAUGE
  • 類型:INT64
指出電腦是否已連上 Google Cloud。

虛擬機器備份作業指標

Distributed Cloud connected 會收集並匯出下列與虛擬機器備份代理程式相關的指標:

指標 說明
gdc_backup_backups_completed
  • 類型:COUNTER
成功完成的虛擬機器備份數量。
gdc_backup_backups_latency
  • 類型:HISTOGRAM
虛擬機器備份作業的延遲時間 (以分鐘為單位)。
gdc_backup_volume_backups_created
  • 類型:COUNTER
至今建立的磁碟區備份數量。
gdc_backup_volume_backups_completed
  • 類型:COUNTER
至今完成的磁碟區備份數量。
gdc_backup_restores_completed
  • 類型:COUNTER
迄今完成的虛擬機器還原次數。
gdc_backup_restores_latency
  • 類型:HISTOGRAM
虛擬機器還原作業的延遲時間 (以分鐘為單位)。
gdc_backup_volume_restores_created
  • 類型:COUNTER
至今建立的磁碟區還原次數。
gdc_backup_volume_restores_completed
  • 類型:COUNTER
截至目前為止完成的磁碟區還原次數。

Distributed Cloud connected 會收集並匯出下列與虛擬機器備份控制層相關的指標:

指標 說明
gdc_backup_controlplane_live
  • 類型:GAUGE
指出備份控制層是否正常運作。
gdc_backup_backup_repositories_attached
  • 類型:GAUGE
附加備份存放區的數量。
gdc_backup_backups_created
  • 類型:COUNTER
目前建立的虛擬機器備份數量。
gdc_backup_backups_deleted
  • 類型:COUNTER
迄今刪除的虛擬機器備份數量。
gdc_backup_restores_created
  • 類型:COUNTER
目前建立的虛擬機器還原次數。
gdc_gdc_backup_backups_pile_up
  • 類型:GAUGE
指出備份方案是否已達到進行中備份的數量上限。

Distributed Cloud connected 會收集並匯出下列與虛擬機器備份功能帳單相關的指標:

指標 說明
metering_protected_resources_total
  • 來源:VM 備份代理程式
  • 類型:COUNTER
至今備份的虛擬機器總數。
metering_deleted_resources_total
  • 來源:VM 備份控制層
  • 類型:COUNTER
迄今刪除的虛擬機器備份總數。

匯出自訂應用程式記錄和指標

Distributed Cloud connected 會自動匯出在 Distributed Cloud connected 工作負載上執行的應用程式記錄。如要匯出在 Distributed Cloud 連線工作負載上執行的應用程式指標,請按照下一節的說明進行註解。

為工作負載加上註解,啟用指標匯出功能

如要啟用應用程式的自訂指標收集功能,請在應用程式的 Service 或 Deployment 資訊清單中加入下列註解:

  • prometheus.io/scrape: "true"
  • prometheus.io/path: "ENDPOINT_PATH"。請將 ENDPOINT_PATH 替換為目標應用程式指標端點的完整路徑。
  • prometheus.io/port: "PORT_NUMBER":應用程式指標端點監聽連線的通訊埠。

執行範例應用程式

在本節中,您將建立可寫入自訂記錄並公開自訂指標端點的應用程式。

  1. 將下列 Service 和 Deployment 資訊清單儲存至名為 my-app.yaml 的檔案。請注意,服務具有註解 prometheus.io/scrape: "true"

    kind: Service
    apiVersion: v1
    metadata:
      name: "monitoring-example"
      namespace: "default"
      annotations:
        prometheus.io/scrape: "true"
    spec:
      selector:
        app: "monitoring-example"
      ports:
        - name: http
          port: 9090
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: "monitoring-example"
      namespace: "default"
      labels:
        app: "monitoring-example"
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: "monitoring-example"
      template:
        metadata:
          labels:
            app: "monitoring-example"
        spec:
          containers:
          - image: gcr.io/google-samples/prometheus-dummy-exporter:latest
            name: prometheus-example-exporter
            imagePullPolicy: Always
            command:
            - /bin/sh
            - -c
            - ./prometheus-dummy-exporter --metric-name=example_monitoring_up --metric-value=1 --port=9090
            resources:
              requests:
                cpu: 100m
    
  2. 建立 Deployment 和 Service:

    kubectl --kubeconfig apply -f my-app.yaml

查看應用程式記錄檔

控制台

  1. 前往 Google Cloud 控制台的「Logs Explorer」頁面。

    前往 Logs Explorer

  2. 按一下「Resource」(資源)

  3. 在「所有資源類型」清單中,選取「Kubernetes Container」。

  4. 在「叢集名稱」中,選取使用者叢集的名稱。

  5. 在「命名空間名稱」部分,選取 default

  6. 按一下「新增」,然後點選「執行查詢」。

  7. 「查詢結果」部分會顯示來自 monitoring-example 部署作業的記錄項目。例如:

    {
      "textPayload": "2020/11/14 01:24:24 Starting to listen on :9090\n",
      "insertId": "1oa4vhg3qfxidt",
      "resource": {
        "type": "k8s_container",
        "labels": {
          "pod_name": "monitoring-example-7685d96496-xqfsf",
          "cluster_name": ...,
          "namespace_name": "default",
          "project_id": ...,
          "location": "us-west1",
          "container_name": "prometheus-example-exporter"
        }
      },
      "timestamp": "2020-11-14T01:24:24.358600252Z",
      "labels": {
        "k8s-pod/pod-template-hash": "7685d96496",
        "k8s-pod/app": "monitoring-example"
      },
      "logName": "projects/.../logs/stdout",
      "receiveTimestamp": "2020-11-14T01:24:39.562864735Z"
    }
    

gcloud

  1. 使用 gcloud logging read 指令:

    gcloud logging read 'resource.labels.project_id="PROJECT_ID" AND \
        resource.type="k8s_container" AND resource.labels.namespace_name="default"'

    PROJECT_ID 替換為專案 ID。

  2. 在輸出內容中,您可以看到 monitoring-example 部署作業的記錄項目。例如:

    insertId: 1oa4vhg3qfxidt
    labels:
      k8s-pod/app: monitoring-example
      k8s- pod/pod-template-hash: 7685d96496
    logName: projects/.../logs/stdout
    receiveTimestamp: '2020-11-14T01:24:39.562864735Z'
    resource:
      labels:
        cluster_name: ...
        container_name: prometheus-example-exporter
        location: us-west1
        namespace_name: default
        pod_name: monitoring-example-7685d96496-xqfsf
        project_id: ...
      type: k8s_container
    textPayload: |
      2020/11/14 01:24:24 Starting to listen on :9090
    timestamp: '2020-11-14T01:24:24.358600252Z'
    

查看應用程式指標

範例應用程式會公開名為 example_monitoring_up 的自訂指標。您可以在 Google Cloud 控制台中查看該指標的值。

  1. 前往 Google Cloud 控制台的「指標探索器」頁面。

    前往 Metrics Explorer

  2. 在「Resource type」(資源類型) 部分,選取「Kubernetes Pod」。

  3. 在「指標」部分選取 external/prometheus/example_monitoring_up

  4. 在圖表中,您可以看到 example_monitoring_up 的值重複出現 1。

使用 Prometheus 收集指標

Distributed Cloud connected 支援 Prometheus 指標解決方案,可收集 Distributed Cloud connected 工作負載的指標。

為此,當您建立 Distributed Cloud connected 叢集時,Distributed Cloud connected 會建立名為 prom-monitoring 的非受管理命名空間。建議您使用這個命名空間部署 Prometheus。您也可以將 prom-monitoring 命名空間中的必要資源複製到所選命名空間,然後在該處部署 Prometheus。

設定 Prometheus 指標抓取作業

如要使用 Prometheus 收集 Distributed Cloud 連線指標,請務必設定 Prometheus 指標抓取作業。如要這麼做,請在 Prometheus Pod 中掛接 prometheus-scrape-config ConfigMap,並將 ConfigMap 中的抓取設定新增至 Prometheus 設定。例如:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: prometheus-local-rolebinding
  namespace: prom-monitoring
subjects:
- kind: ServiceAccount
  name: prometheus-scrape
  namespace: prom-monitoring
roleRef:
  kind: ClusterRole
  name: gke-metrics-agent
  apiGroup: rbac.authorization.k8s.io
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: prometheus-config
  namespace: prom-monitoring
data:
  prometheus.yml: |
    global:
      scrape_interval: 5s
      evaluation_interval: 5s
    rule_files:
    scrape_config_files:
    - /etc/prometheus/scrape/*.yml
---
apiVersion: v1
kind: Service
metadata:
  name: prometheus
  namespace: prom-monitoring
spec:
  selector:
    app: prom-monitoring
  ports:
  - port: 9090
    targetPort: 9090
  type: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: prometheus-deployment
  namespace: prom-monitoring
  labels:
    app: prom-monitoring
spec:
  replicas: 1
  selector:
    matchLabels:
      app: prom-monitoring
  template:
    metadata:
      labels:
        app: prom-monitoring
    spec:
      serviceAccountName: prometheus-scrape
      containers:
        - name: prometheus
          image: prom/prometheus:main
          args:
            - "--config.file=/etc/prometheus/prometheus.yml"
            - "--storage.tsdb.path=/prometheus/"
          ports:
            - containerPort: 9090
          volumeMounts:
            - name: prometheus-config-volume
              mountPath: /etc/prometheus/
            - name: prometheus-scrape-config-volume
              mountPath: /etc/prometheus/scrape/
            - name: prometheus-storage-volume
              mountPath: /prometheus/
            - name: prometheus-scrape-token
              mountPath: /var/run/secrets/kubernetes.io/stackdriver-prometheus-scrape
            - name: stackdriver-prometheus-scrape-cert
              mountPath: /certs/stackdriver-prometheus-scrape
            - name: stackdriver-prometheus-etcd-scrape
              mountPath: /stackdriver-prometheus-etcd-scrape
      volumes:
        - name: prometheus-storage-volume
          emptyDir: {}
        - name: prometheus-config-volume
          configMap:
            defaultMode: 420
            name: prometheus-config
        - name: prometheus-scrape-config-volume
          configMap:
            defaultMode: 420
            name: prometheus-scrape-config
        - name: prometheus-scrape-token
          secret:
            defaultMode: 420
            secretName: prometheus-scrape
        - name: stackdriver-prometheus-scrape-cert
          secret:
            defaultMode: 420
            optional: true
            secretName: stackdriver-prometheus-scrape-cert
        - name: stackdriver-prometheus-etcd-scrape
          secret:
            defaultMode: 420
            optional: true
            secretName: stackdriver-prometheus-etcd-scrape

如要使用 Prometheus 收集工作負載指標,您必須在執行目標工作負載的服務和 Pod 中新增註解,如下所示:

  • 如要將指標傳送至 Cloud Monitoring 和 Prometheus,請使用「匯出自訂記錄和指標」一文所述的註解。

  • 如要只將指標傳送至 Prometheus,請使用下列註解:

prometheus.io/unmanaged_scrape: "true"
prometheus.io/unmanaged_path: "ENDPOINT_PATH"
prometheus.io/unmanaged_port: "PORT_NUMBER"

透過 Kafka 收集記錄

Distributed Cloud connected 支援 Apache Kafka 解決方案,可收集在 Distributed Cloud connected 部署作業中執行的工作負載記錄。

您必須先完成 Kafka 部署作業,才能完成本節中的步驟。Kafka 代理程式必須以 PLAINTEXT 模式宣傳接聽程式。系統不支援 SSL/SASL 相關變數。

如要設定叢集以進行 Kafka 記錄,您必須建立 JSON 檔案,設定要在叢集上執行的外掛程式。使用 --system-addons-config 旗標建立叢集時,請指定這個檔案。如要修改 Kafka 設定,請刪除叢集並使用新的 Kafka 設定重新建立。

在系統外掛程式設定檔中新增下列區段:

{
        "systemAddonsConfig": {
          "unmanagedKafkaConfig": {
            "brokers": "BROKERS",
            "topics": "TOPICS"
     "topic_key": "TOPIC_KEY, 
          }
      }
}

更改下列內容:

  • BROKERS:以半形逗號分隔的代理程式 IP 位址和通訊埠配對清單,格式為 ip_address:port
  • TOPICS:以半形逗號分隔的 Kafka 主題清單。
  • TOPIC_KEY:Kafka 主題鍵;如果有多個主題,Kafka 可藉此選取主題。

如果您建立 Distributed Cloud 連線叢集後,Kafka 未收集記錄,請檢查下列項目:

  • 伺服器端:檢查 Kafka 部署作業的錯誤記錄,找出問題跡象。
  • 用戶端: 與 Google 支援團隊聯絡,以便擷取及檢查系統 Pod 記錄。

收集原始工作負載記錄,以供外部處理

您可以設定 Distributed Cloud 連線,將原始 (未經處理和未標記) 工作負載 Pod 記錄檔匯出至 /var/logs/export,以便使用自己的記錄收集器處理記錄。

如要設定原始工作負載記錄匯出功能,請建立具有下列內容的 LogExport 自訂資源,然後將其套用至叢集:

apiVersion: gdc.addons.gke.io/v1
kind: LogExport
metadata:
  name: my-log-export
spec:
  namespaces:
  - namespace1
  - namespace2
  - namespace3

namespaces 欄位中,列出要匯出原始 Pod 記錄的工作負載命名空間。 這個欄位不接受系統命名空間,例如「管理命名空間限制」中列出的命名空間。

後續步驟