为什么配置的ServiceMonitor或PodMonitor未生效?

现象描述

可观测监控 Prometheus 版中添加了ServiceMonitorPodMonitor之后,并未采集到期望的指标数据。

排查步骤

确认Target是否已经被发现。

  1. 登录ARMS控制台

  2. 在左侧导航栏选择Prometheus监控 > 实例列表,进入可观测监控 Prometheus 版的实例列表页面。

  3. 单击目标Prometheus实例名称,然后在左侧导航栏单击服务发现,然后单击Targets页签,检查相应的Target是否已经被发现。

    • Target未被发现

      1. 检查ServiceMonitor或者PodMonitor是否已经启用。

        您可以在服务发现配置页签单击ServiceMonitor或者PodMonitor页签,若状态如下图(图标①)所示,表示已启用,则继续执行下一步。vr

      2. 检查定义的ServiceMonitor或者PodMonitor资源是否下发到ACK集群。

        1. 登录容器服务管理控制台

        2. 在左侧导航栏单击集群,然后在集群列表页面单击目标集群名称。

        3. 在左侧导航栏,选择工作负载 > 自定义资源

        4. 资源定义页签单击名称列的ServiceMonitor或者PodMonitor超链接(图标①),系统会跳转至资源对象浏览器页签,然后您需要选择对应的命名空间,查看上一步骤中启用的ServiceMonitor或者PodMonitor是否在列表中。de

          • 若不在列表中:您可以尝试在可观测监控 Prometheus 版控制台服务发现页面配置页签的操作列重新开启ServiceMonitor或者PodMonitor。

          • 若在列表中,则执行下一步。

      3. 确认Label Selector是否能选择到期望的Pod或者Service。

        执行以下命令,观察返回结果,若无返回结果,则需要调整Label SelectorNamespace Selector,即可筛选出期望的Pod或者Service。

        # 如果namespace selectorany设置为true。
        kubectl get pod/service -l label_key=label_value -A
        # 如果指定了namespace, 则使用指定的namespace。
        kubectl get pod/service -l label_key=label_value -n xx_namespace_xx
      4. 检查端口设置。

        • 若配置的端口参数为port字段,需要指定为pod定义中spec.containers[i].ports[i].name字段的值,或services定义中spec.ports[i].name字段的值。

        • 若配置的端口参数为targetPort字段,需要指定为pod定义中spec.containers[i].ports[i].containerPort的值,或services定义中 spec.ports[i].targetPort字段的值。

        如图所示:

        image.png

    • Target已经被发现,但显示为红色vrh

      表示Prometheus抓取失败,这种情况通常是由于Target自身问题导致,此时您需要根据Error列提示的异常原因进行排查。

    • Target已经被发现,且State列显示为UP(图标①),但期望的指标依然未被采集到vl

      此时您可以单击对应TargetEndpoint超链接(图标②),系统会直接从Target拉取原始数据,然后您需要确认原始数据中是否存在期望的指标。若存在期望的指标,您可以在服务发现指标页签中单击右上角的配置废弃指标,然后在弹出的对话框中检查该指标是否在废弃列表中,若在废弃列表中,表示该指标已被人为废弃,您可以删除该指标重新启用即可。具体操作,请参见启用废弃指标

相关文档