Prometheus 指标故障排除 - Amazon CloudWatch
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

Prometheus 指标故障排除

本节提供有关排除 Prometheus 指标设置故障排除的帮助。

一般故障排除步骤

要确认 CloudWatch 代理正在运行,请输入以下命令。

kubectl get pod -n amazon-cloudwatch

输出应包含其 NAME 列中包含 cwagent-prometheus-id 并且 STATUS column.中包含 Running 的行。

要显示有关正在运行的 pod 的详细信息,请输入以下命令。Replace pod-name 以您的pod的全名开头, cw-agent-prometheus.

kubectl describe pod pod-name -n amazon-cloudwatch

如果您有 CloudWatch 容器见解安装,您可以使用 CloudWatch Logs 通过见解查询日志 CloudWatch 收集Prometheus指标的代理。

查询应用程序日志

  1. 通过以下网址打开 CloudWatch 控制台:https://console.amazonaws.cn/cloudwatch/

  2. 在导航窗格中,选择 CloudWatch Logs Insights

  3. 选择应用程序日志的日志组, /aws/containerinsights/cluster-name应用程序

  4. 使用以下查询替换搜索查询表达式,然后选择运行查询

    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 Logs 事件。

确认正在摄取 Prometheus 数据

  1. 通过以下网址打开 CloudWatch 控制台:https://console.amazonaws.cn/cloudwatch/

  2. 在导航窗格中,选择 CloudWatch Logs Insights

  3. 选择 /aws/containerinsights/cluster-name/prometheus

  4. 使用以下查询替换搜索查询表达式,然后选择运行查询

    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 and Counter 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 代理 pod 中。

  3. 要从 CloudWatch 代理 pod 检索日志,请输入以下命令:

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

    或者,如果您安装了ContainerInsightsFluentD日志,日志也会保存在 CloudWatch Logs 日志组 /aws/containerinsights/cluster_name应用程序

    要查询这些日志,您可以按照一般故障排除步骤中的步骤查询应用程序日志。

在哪里摄取 Prometheus 指标作为 CloudWatch Logs 日志事件?

CloudWatch 代理为每个 Prometheus 抓取作业配置创建一个日志流。例如,在 prometheus-eks.yamlprometheus-k8s.yaml 文件中,行 job_name: 'kubernetes-pod-appmesh-envoy' 将抓取 App Mesh 指标。Prometheus目标定义为 kubernetes-pod-appmesh-envoy。所以所有 App Mesh Prometheus指标的拷贝方式为 CloudWatch Logs 日志流中的事件 库伯尼特-普德-普梅希斯-普维埃 日志组下, /aws/containerinsights/cluster-name/Prometheus.

在 CloudWatch 指标中未发现 Prometheus 指标

首先,确保 Prometheus 指标在日志组 /aws/containerinsights/cluster-name/Prometheus 中摄取作为日志事件。使用在哪里摄取 Prometheus 指标作为 CloudWatch Logs 日志事件?中的信息可帮助您检查目标日志流。如果未创建日志流或日志流中没有新的日志事件,请检查以下内容:

  • 检查 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_definitions。有关更多信息,请参阅 添加新Prometheus报废目标教程: PrometheusAPI服务器指标。)