本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Amazon EKS 和 Kubernetes 集群上的 Prometheus 指标故障排除
本节提供了帮助,以帮助对 Amazon EKS 和 Kubernetes 集群上的 Prometheus 指标设置进行故障排除。
上的一般故障排除步骤 Amazon EKS
要确认 CloudWatch 代理正在运行,请输入以下命令。
kubectl get pod -n amazon-cloudwatch
输出应包含 cwagent-prometheus-
列和 id
NAME
中的行 Running
STATUS column.
要显示有关正在运行的 pod 的详细信息,请输入以下命令。Replace pod-name
替换为您的 Pod 的完整名称,其名称以 开头cw-agent-prometheus
。
kubectl describe pod
pod-name
-n amazon-cloudwatch
如果您安装了 CloudWatch Container Insights,则可以使用 CloudWatch Logs Insights 从收集 Prometheus 指标的CloudWatch代理查询日志。
查询应用程序日志
-
通过以下网址打开 CloudWatch 控制台:https://console.amazonaws.cn/cloudwatch/
。 -
在导航窗格中,选择 CloudWatch Logs Insights。
-
选择应用程序日志的日志组 /aws/containerinsights/
cluster-name
/应用程序 -
使用以下查询替换搜索查询表达式,然后选择运行查询
fields ispresent(
kubernetes.pod_name
) as haskubernetes_pod_name, stream, kubernetes.pod_name, log | filter haskubernetes_pod_name andkubernetes.pod_name
like /cwagent-prometheus
您还可以确认 Prometheus 指标和元数据是否摄取作为 CloudWatch Logs 事件。
确认正在摄取 Prometheus 数据
-
通过以下网址打开 CloudWatch 控制台:https://console.amazonaws.cn/cloudwatch/
。 -
在导航窗格中,选择 CloudWatch Logs Insights。
-
选择 /aws/containerinsights/
cluster-name
/prometheus -
使用以下查询替换搜索查询表达式,然后选择运行查询
fields @timestamp, @message | sort @timestamp desc | limit 20
记录丢弃的 Prometheus 指标
此版本不收集 直方图类型的 Prometheus 指标。您可以使用 CloudWatch 代理检查是否因为任何 Prometheus 指标是直方图指标而丢弃这些指标。您还可以记录由于是直方图指标CloudWatch而丢弃但未发送到 的前 500 个 Prometheus 指标的列表。
要查看是否丢弃了任何指标,请输入以下命令:
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 指标列表
-
通过将以下粗体行添加到 CloudWatch 或
prometheus-eks.yaml
文件中并保存文件,将prometheus-k8s.yaml
代理更改为调试模式。{ "agent": { "debug": true },
该文件的这一部分随后应该如下所示:
cwagentconfig.json: | { "agent": { "debug": true }, "logs": { "metrics_collected": {
-
通过输入以下命令重新安装 CloudWatch 代理以启用调试模式:
kubectl delete deployment cwagent-prometheus -n amazon-cloudwatch kubectl apply -f prometheus.yaml
丢弃的指标将记录在 CloudWatch 代理 pod 中。
-
要从 CloudWatch 代理 pod 检索日志,请输入以下命令:
kubectl logs -l "app=cwagent-prometheus" -n amazon-cloudwatch --tail=-1
或者,如果您安装了 Container Insights FluentD 日志记录,日志也会保存在CloudWatch Logs日志组 /aws/containerinsights/
cluster_name
/应用程序。要查询这些日志,您可以按照上的一般故障排除步骤 Amazon EKS中的步骤查询应用程序日志。
在哪里摄取 Prometheus 指标作为 CloudWatch Logs 日志事件?
CloudWatch 代理为每个 Prometheus 抓取作业配置创建一个日志流。例如,在 prometheus-eks.yaml
和 prometheus-k8s.yaml
文件中,行 job_name: 'kubernetes-pod-appmesh-envoy'
将抓取 App Mesh 指标。Prometheus 目标被定义为 kubernetes-pod-appmesh-envoy
。因此,所有 App Mesh Prometheus 指标都作为CloudWatch Logs事件提取到日志流 kubernetes-pod-appmesh-envoy 中名为 /aws/containerinsights/cluster-name/Prometheus的日志组下。
我未看到 Amazon EKS 或 Kubernetes Prometheus 指标 CloudWatch
首先,确保 Prometheus 指标在日志组 /aws/containerinsights/cluster-name/Prometheus 中摄取作为日志事件。使用在哪里摄取 Prometheus 指标作为 CloudWatch Logs 日志事件?中的信息可帮助您检查目标日志流。如果未创建日志流或日志流中没有新的日志事件,请检查以下内容:
-
检查 Prometheus 指标导出程序终端节点是否正确设置
-
检查
config map: cwagent-prometheus
代理 YAML 文件 CloudWatch 部分中的 Prometheus 抓取配置是否正确。该配置应与 Prometheus 配置文件中的配置相同。有关更多信息,请参阅 Prometheus 文档中的 <scrape_config>。
如果正确摄取了 Prometheus 指标作为日志事件,请检查嵌入式指标格式设置是否已添加到日志事件以生成 CloudWatch 指标。
"CloudWatchMetrics":[ { "Metrics":[ { "Name":"envoy_http_downstream_cx_destroy_remote_active_rq" } ], "Dimensions":[ [ "ClusterName", "Namespace" ] ], "Namespace":"ContainerInsights/Prometheus" } ],
有关嵌入式指标格式的更多信息,请参阅规范:嵌入式指标格式 。
如果日志事件中没有嵌入式指标格式,请检查在 metric_definitions
代理安装 YAML 文件的 config map: prometheus-cwagentconfig
部分是否正确配置了 CloudWatch。有关更多信息,请参阅添加新的 Prometheus 抓取目标的教程:Prometheus API 服务器指标。