Amazon EKS 和 Kubernetes 叢集上的 Prometheus 指標疑難排解 - Amazon CloudWatch

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Amazon EKS 和 Kubernetes 叢集上的 Prometheus 指標疑難排解

本節提供疑難排解 Amazon EKS 和 Kubernetes 叢集上的 Prometheus 指標設定的說明。

Amazon 上的一般疑難排解步驟 EKS

若要確認 CloudWatch 代理程式正在執行,請輸入下列命令。

kubectl get pod -n amazon-cloudwatch

輸出應該在 NAME 欄中包含 cwagent-prometheus-id 一行和 STATUS column. 中包含 Running 一行

若要顯示有關執行中 pod 的詳細資訊,請輸入下列命令。Replace (取代) pod-name 以及名稱開頭為的網繭的完整名稱cw-agent-prometheus

kubectl describe pod pod-name -n amazon-cloudwatch

如果您已安裝 CloudWatch 容器深入解析,則可以使用 CloudWatch 日誌深入解析來查詢 CloudWatch 代理程式收集 Prometheus 指標的記錄。

查詢應用程式日誌
  1. 在開啟 CloudWatch 主控台https://console.aws.amazon.com/cloudwatch/

  2. 在導覽窗格中,選擇 [CloudWatch 記錄檔見解]。

  3. 選取應用程式記錄檔的記錄群組,/aws/容器洞察/cluster-name/應用

  4. 以下列查詢取代搜尋查詢表達式,然後選擇 Run query (執行查詢)

    fields ispresent(kubernetes.pod_name) as haskubernetes_pod_name, stream, kubernetes.pod_name, log | filter haskubernetes_pod_name and kubernetes.pod_name like /cwagent-prometheus

您也可以確認 Prometheus 指標和中繼資料已擷取為記錄事件。 CloudWatch

確認 Prometheus 資料正擷取中
  1. 在開啟 CloudWatch 主控台https://console.aws.amazon.com/cloudwatch/

  2. 在導覽窗格中,選擇 [CloudWatch 記錄檔見解]。

  3. 選擇 /aws/容器洞察/cluster-name/普羅米修斯

  4. 以下列查詢取代搜尋查詢表達式,然後選擇 Run query (執行查詢)

    fields @timestamp, @message | sort @timestamp desc | limit 20

記錄日誌已捨棄 Prometheus 指標

此版本不會收集長條圖類型的 Prometheus 指標。您可以使用 CloudWatch 代理程式來檢查是否有任何 Prometheus 測量結果因為這些測量結果是直方圖量度而被卸除。您也可以記錄前 500 個 Prometheus 度量的清單,這些量度會被捨棄且未傳送至, CloudWatch 因為它們是長條圖度量。

若要查看是否有任何指標遭到捨棄,請輸入下列命令:

kubectl logs -l "app=cwagent-prometheus" -n amazon-cloudwatch --tail=-1

如果有任何指標遭到捨棄,您會在 /opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log 檔案中看到以下各行。

I! Drop Prometheus metrics with unsupported types. Only Gauge, Counter and Summary are supported. I! Please enable CWAgent debug mode to view the first 500 dropped metrics

如果您看到這些行,而且想要知道哪些指標遭到捨棄,請使用下列步驟。

記錄捨棄的 Prometheus 指標量清單
  1. 將下列粗體行新增至您的prometheus-eks.yamlprometheus-k8s.yaml檔案,將 CloudWatch 代理程式變更為偵錯模式,然後儲存檔案。

    { "agent": { "debug": true },

    檔案的這個區段看起來應該像這樣:

    cwagentconfig.json: | { "agent": { "debug": true }, "logs": { "metrics_collected": {
  2. 輸入下列命令,重新安裝 CloudWatch 代理程式以啟動除錯模式:

    kubectl delete deployment cwagent-prometheus -n amazon-cloudwatch kubectl apply -f prometheus.yaml

    捨棄的量度會記錄在 CloudWatch 代理程式網繭中。

  3. 若要從 CloudWatch 代理程式網繭擷取記錄,請輸入下列命令:

    kubectl logs -l "app=cwagent-prometheus" -n amazon-cloudwatch --tail=-1

    或者,如果您已安裝容器見解 Fluentd 記錄,記錄也會儲存在記錄日誌群組 /aws/容器洞察/ CloudWatch cluster_name/應用

    若要查詢這些日誌,您可以遵循Amazon 上的一般疑難排解步驟 EKS中的步驟查詢應用程式日誌。

Prometheus 指標在哪裡擷取為 CloudWatch 日誌記錄事件?

該 CloudWatch 代理為每個 Prometheus 抓取作業配置創建一個日誌流。例如,在 prometheus-eks.yamlprometheus-k8s.yaml 檔案中,job_name: 'kubernetes-pod-appmesh-envoy' 一行會湊集 App Mesh 指標。Prometheus 目標會定義為 kubernetes-pod-appmesh-envoy因此,所有 App Mesh Prometheus 度量都會擷取為 CloudWatch 記錄檔資料流中的記錄檔事件,名稱為 /AWS/容器洞察/群集名稱/Prometheus 的記錄檔群組kubernetes-pod-appmesh-envoy下。

我沒有看到指標中的 Amazon EKS 或庫伯尼特 Prometheus 指標 CloudWatch

首先,請確定 Prometheus 指標在日誌群組 /aws/containerinsights/cluster-name/Prometheus 中擷取為日誌事件。使用 Prometheus 指標在哪裡擷取為 CloudWatch 日誌記錄事件? 中的資訊來協助您檢查目標日誌串流。如果未建立日誌串流,或是日誌串流中沒有新的日誌事件,請檢查下列項目:

  • 檢查 Prometheus 指標匯出工具端點是否已正確設定

  • 檢查 CloudWatch 代理程式YAML檔案config map: cwagent-prometheus區段中的 Prometheus 抓取設定是否正確。該組態應該與 Prometheus 組態檔中的組態相同。如需詳細資訊,請參閱 Prometheus 文件中的 <scrape_config>

如果 Prometheus 量度已正確擷取為記錄事件,請檢查內嵌度量格式設定是否已新增至記錄事件以產生指標。 CloudWatch

"CloudWatchMetrics":[ { "Metrics":[ { "Name":"envoy_http_downstream_cx_destroy_remote_active_rq" } ], "Dimensions":[ [ "ClusterName", "Namespace" ] ], "Namespace":"ContainerInsights/Prometheus" } ],

如需內嵌指標格式的詳細資訊,請參閱規格:內嵌指標格式

如果記錄事件中沒有內嵌的測量結果格式,請檢查 CloudWatch 代理程式安裝YAML檔案config map: prometheus-cwagentconfig區段中的區段是否正確設定。metric_declaration如需詳細資訊,請參閱 添加新的 Prometheus 抓取目標的教程:Prometheus 服務器指標 API