本頁面說明 Google Distributed Cloud connected 如何記錄各種作業資訊,以及如何查看這些資訊。收集部分類型的記錄和指標會產生額外費用。詳情請參閱「記錄和指標的計費方式」。
設定記錄和監控功能
開始收集記錄和指標前,請先完成下列步驟:
使用下列指令啟用記錄 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。授予寫入記錄和指標所需的角色:
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_containerk8s_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/Machineedgecontainer.googleapis.com/Rack
Machine 資源指標
Distributed Cloud connected 會為 edgecontainer.googleapis.com/Machine 資源寫入下列 Cloud Monitoring API 指標:
| 指標 | 說明 |
|---|---|
/machine/cpu/total_cores
|
機器上的實體處理器核心總數。 |
/machine/cpu/usage_time
|
機器上所有核心的累計 CPU 使用時間。類型可以是 workload (客戶工作負載) 或 system (其他所有項目)。 |
/machine/cpu/utilization
|
機器的 CPU 使用率百分比。範圍為 0 到 1。類型可以是 workload (客戶工作負載) 或 system (其他所有項目)。 |
/machine/memory/total_bytes
|
機器上的記憶體總量 (以位元組為單位)。 |
/machine/memory/used_bytes
|
機器上已用記憶體的位元組數。memory_type 可以是 evictable (可由核心回收) 或 non-evictable (不可回收)。 |
/machine/memory/utilization
|
電腦的記憶體使用率百分比。範圍為 0 到 1。
memory_type 可以是 evictable (可由核心回收) 或 non-evictable (不可回收)。 |
/machine/network/up
|
指出網路介面是否正常運作。包括主卡、次要卡和連接埠。 |
/machine/network/link_speed
|
主要網路介面卡的連結速度。 |
/machine/network/received_bytes_count
|
主要網路介面卡接收的位元組數。 |
/machine/network/sent_bytes_count
|
主要網路介面卡的傳送位元組數。 |
/machine/network/connectivity
|
指出主要網路介面卡是否已連上網際網路。 |
/machine/disk/total_bytes
|
機器上的磁碟空間總位元組數。 |
/machine/disk/used_bytes
|
機器上已使用的磁碟空間位元組數。 |
/machine/disk/utilization
|
電腦的磁碟空間使用率百分比。範圍為 0 到 1。 |
/machine/restart_count
|
裝置重新啟動的次數。 |
/machine/uptime
|
機器自上次重新啟動後已運作的時間。 |
/machine/connected
|
指出電腦是否已連上 Google Cloud。 |
Rack 資源指標
Distributed Cloud connected 會為 edgecontainer.googleapis.com/Rack 資源寫入下列 Cloud Monitoring API 指標:
| 指標 | 說明 |
|---|---|
/router/bgp_up
|
指出路由器上的 BGP 對等互連工作階段是否正常運作。router_id 可識別特定路由器 (每個機架最多 2 個)。 |
/router/connected
|
指出 BGP 路由器是否已連線至 Google Cloud。
router_id 可識別特定路由器 (每個機架最多 2 個)。 |
匯出自訂應用程式記錄和指標
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":應用程式指標端點監聽連線的通訊埠。
執行範例應用程式
在本節中,您將建立可寫入自訂記錄並公開自訂指標端點的應用程式。
將下列 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建立 Deployment 和 Service:
kubectl --kubeconfig apply -f my-app.yaml
查看應用程式記錄檔
控制台
前往 Google Cloud 控制台的「Logs Explorer」頁面。
按一下「Resource」(資源)。
在「所有資源類型」清單中,選取「
Kubernetes Container」。在「叢集名稱」中,選取使用者叢集的名稱。
在「命名空間名稱」部分,選取
default。按一下「新增」,然後點選「執行查詢」。
「查詢結果」部分會顯示來自
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
使用
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。在輸出內容中,您可以看到
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 控制台中查看該指標的值。
前往 Google Cloud 控制台的「指標探索器」頁面。
在「Resource type」(資源類型) 部分,選取「
Kubernetes Pod」。在「指標」部分選取
external/prometheus/example_monitoring_up。在圖表中,您可以看到
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: 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:
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: metrics-providers-ca
mountPath: /certs/metrics-providers
- 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
secretName: stackdriver-prometheus-scrape-cert
- name: metrics-providers-ca
secret:
defaultMode: 420
items:
- key: ca.crt
path: ca.crt
secretName: metrics-providers-ca
- 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 記錄。