托管 Prometheus 支持监控容器服务等云服务,也支持通过 ServiceMonitor、PodMonitor、Service/Pod annotation 进行服务发现。但是,有时候当您完成配置后,却无法正确检索到预期指标。本文为您介绍如何进行此类故障的排除。
故障现象
使用托管 Prometheus 进行容器服务集群监控时,开启资源监控或配置 ServiceMonitor 或 PodMonitor 后,并未采集到期望的指标数据。
原因分析
造成您无法查看到期望指标的可能原因有:
- 查询语句错误,导致无法查询出正确的结果。
- 确认 Target 被发现且正常采集。
- 服务发现配置错误,导致 Target 未被正确发现。
- 业务 Pod 自身和采集端点异常。
- 查询的指标有误。
整体排障流程如下图所示。其中,Target、Exporter 端口均为示例。
排障步骤
步骤一:确认查询语句正确
查询指标时,请首先确认您使用的查询语句正确。错误的查询语句会导致查询出的指标错误,或者干脆查询不出任何结果。
查询语句的使用方法,请参见 PromQL 基本用法。
步骤二:确认 Target 被发现且正常采集
您可以采用如下步骤,确定采集器是否正确发现 Target 且正常采集:
- 登录 VMP 服务控制台。
- 在顶部导航栏,选择目标地域。
- 单击左侧导航栏的 Explore,进入 Explore 页面。
- 在右上角的配置项中,配置需要查询指标的 工作区,并在 指标检索 文本框内,输入
up{job="xxxx"}
,查看对应的服务是否被正确发现。
查看结果 | 可能原因 | 排障步骤 |
---|
无 up 数据 | Target 未被正确发现,服务发现配置有误。 | - 登录 容器服务控制台。
- 在左侧菜单栏中选择 集群,并在右侧集群列表中选择采集器所在集群。
- 单击集群名称,进入集群配置页面。
- 对于集群基础资源的指标,请确认集群是否正确开启了云原生观测和对应资源的观测功能。详情请参见 开启观测、基础观测。
- 对于自定义应用的指标,请确认服务发现配置是否正确。
- 在左侧导航栏中选择 工作负载 > 对象浏览器。在 分类 下拉菜单中选择 CRD,找到 PodMonitor 或 ServiceMonitor,单击名称,进入对应的 CRD 列表。
- 确认您配置的 PodMonitor 或 ServiceMonitor 是否在列表中。
- 如果您的配置 在列表中,表明配置已经下发,请执行下一步。
- 如果您的配置 不在列表中,表明配置未成功下发,请重新下发配置。
- 选择目标配置项,在 操作 列中选择
... > 编辑 Yaml,检查 PodMonitor 或 ServiceMonitor 的配置是否正确。 请重点检查配置中的 namespaceSelector 字段选择的命名空间和 selector 字段选择的标签,与 Service 或 Pod 的配置是否相同。
- 如果您的配置有误,请修改配置后再观察。
- 如果您的配置无误,请执行下一步。
|
up = 0 | 服务发现配置正常,但 Pod 或端点异常。 | 登录 容器服务控制台,确认业务 Pod 自身及其采集端点是否正常。 |
up = 1 | 服务发现配置正常,也存在对应的 Pod。 | Target 被发现且正常采集,请执行下一步。 |
步骤三:检查采集对象中的指标
您可以采用如下步骤,确认 Target 中确实存在您需要的指标:
- 在本地环境中,使用 kubectl 连接采集器所在集群。
- 执行以下命令,将采集对象(例如 Exporter)的端口映射到本地。
kubectl port-forward pod/rabbitmq-exporter-5fxxxx 9419:9419 -n volcano-metrics
说明
- 采集对象可能部署在集群中,也可能部署在集群外部(例如部署在 ECS 主机上),本例以采集对象部署在集群中举例。如果采集对象部署在集群外部,您可以直接使用
curl http://target-ip:port/metrics
的方式访问到采集对象。 rabbitmq-exporter-5fxxxx
为采集对象的实例名称,本例中以 RabbitMQ-Exporter 为例,您需要在实际操作中替换成您的采集对象的实例名称。9419
为该采集对象暴露指标的端口号。不同采集对象的端口号不同,您需要在实际操作中替换成正确的端口号。-n volcano-metrics
为采集对象所在的命名空间,您需要在实际操作中替换成采集对象所在的命名空间。
- 在本地环境(Linux/Mac)中打开浏览器,在地址栏中输入 localhost:9419,进入采集对象页面,直接查看您查询的指标是否被正常采集到。
- 如果您的查询指标依然没有被正确采集到,有如下几种可能:
- 您所查询的指标已被废弃,请您查看该采集对象的官方文档,进行确认。
- 您还没有完成指标对应的配置。例如:在 Kafka 中,如果您没有配置 Topic,则无法查询
kafka_topic_partitions
等关于 Topic 的指标项。
步骤四:检查采集器状态
- 登录 容器服务控制台。
- 在左侧菜单栏中选择 集群,并在右侧集群列表中选择采集器所在集群。
- 单击集群名称,进入集群配置页面。
- 在左导航栏中选择 工作负载 > 有状态负载,在 kube-system 命名空间下,查看采集器 vmagent-prometheus-agnet 的 Pod 状态和日志。