当您在集群中开启观测并安装 prometheus-agent 组件后,允许通过 PodMonitor 来满足自定义采集规则的需求。本文为您介绍如何通过 PodMonitor 来配置服务发现。
您可以使用以下 Demo,体验基于 golang 的应用接入和 PodMonitor 服务发现过程。下面的示例中,使用 golang 语言创建了一个应用,并在应用中暴露了一个名为rpc_durations_seconds的指标,用于对服务的 RPC 延迟进行统计。
- 已通过 kubectl 连接目标集群。具体操作说明,请参见 连接集群。
您可以使用镜像仓库中的镜像,在容器服务 VKE 集群中部署应用。步骤如下:
- 在左侧导航栏中选择 集群,单击集群名称,进入集群配置页面。
- 在左侧导航栏中选择 工作负载 > 无状态负载。 单击 使用 Yaml 创建 ,部署应用。
说明
本例中的镜像地址为举例,您需要将其修改为实际环境中镜像的正确地址。
- 在左侧导航栏中选择 工作负载 > 对象浏览器。 单击 使用 Yaml 创建 ,配置 PodMonitor。
- 单击左侧导航栏的 Explore,进入 Explore 页面。
- 在右上角的配置项中,配置需要查询指标的 工作区,并在 指标检索 文本框内,输入 up{job="volcano-metrics/golang-demo-discover"},查看对应的 Pod 是否被正确发现。
-
默认情况下,通过 PodMonitor 发现的 job 名称为 PodMonitor 的 <namespace>/<name>,例如在本文中,job 的默认名称为volcano-metrics/golang-demo-discover。您可以根据需要,自定义 job 的名称。
您可以在 PodMonitor 中使用jobLabel字段,将 job 名称修改为指定的 Pod 标签值。例如在本例中,可以将 job 名称修改为标签app: golang-demo的值,即 job 名称为golang-demo。
预期结果如下所示,可以使用 job 名称golang-demo查询到指标。
您可以在 PodMonitor 中使用spec.podMetricsEndpoints.N.relabelings字段,配置 Relabel 能力,自定义 job 的名称。
预期结果如下所示,可以使用 job 名称jobname-demo查询到指标。
默认情况下,Pod 的 Label 不会加到指标中。您可以在 PodMonitor 中使用spec.podTargetLabels字段,将 Pod 的 Label 加入到指标中。
预期结果如下所示:
注意
由于 Prometheus 的 metricsLabel 只能由大小写英文字符、数字、下划线组成,因此 Pod 的 LabelName 中其他字符都会自动替换成下划线。例如 app.kubernetes.io/component变为app_kubernetes_io_component
您可以通过指标 Relabel,在抓取指标或推送指标到托管 Prometheus 工作区之前,添加、修改或删除指标标签。支持 2 种配置方式,包括:
- 典型场景包括删除不需要的指标、重命名指标标签、添加新的指标标签等。
说明
更多 PodMonitor 的 Relabel 详情,请参见 官方文档。您也可以通过 Relabel 工具来查看 Relabel 实现的过程,Debug 您的 Relabel 需求。 如果您希望在采集到的指标都增加指定的 Label,可以通过配置spec.podMetricsEndpoints.N.relabelings参数实现。例如通过以下配置,可以在采集到的所有指标上增加label: value标签对。
如果您希望仅写入某些指定的指标,可以通过配置action: keep来实现。例如通过以下配置,仅保留指标名满足正则表达式vmagent_remotewrite.*的指标。
如果您希望不写入某些指标,可以通过配置action: drop来将某些指标丢弃掉。例如通过以下配置,可以将vmagent_daily_series_limit_rows_dropped_total指标丢弃。
如果您希望修改某个 Label 的值,可以通过配置action: replace来实现。例如通过以下配置,可以将以/api/v1开头的 path label 值去掉/api/v1前缀,即由path: /api/v1/targets修改为path: /targets。