使用 ConfigMap 自定义从 Kubernetes 集群收集的 Prometheus 指标

从 Kubernetes 群集启用 Prometheus 指标收集时,它使用 默认集合 来确定要收集的指标。 本文介绍如何自定义此集合以满足特定的监视要求。

配置映射

以下的 ConfigMap 用于配置指标加载项的抓取设置及其他配置。 启用托管 Prometheus 时,群集中默认不存在此 ConfigMap。

配置映射 Description
ama-metrics-settings-configmap 包括以下基本设置。
- 集群别名。 更改从群集引入的每个指标中的标签值 cluster
- 启用/禁用默认抓取目标。
- 为每个命名空间启用基于 Pod 注解的抓取。
- 度量保持列表。 控制每个默认目标允许的指标。
- 预定义目标的抓取间隔。
- 调试模式以识别缺少的指标问题。 请参阅 故障排除

根据下面的指南修改 ConfigMap 中的设置,然后使用以下命令应用它。 AMA-Metrics Pod 将在 2-3 分钟内启动并重启,以应用指定的配置设置。

kubectl apply -f .\ama-metrics-settings-configmap.yaml

启用和禁用默认目标

Azure Monitor 中的默认 Prometheus 指标配置 列出了默认从 Kubernetes 群集收集的默认目标和指标。 若要启用/禁用这些目标中的任何一个,请在 ConfigMap 的 default-scrape-settings-enabled 部分将目标设置更新为 truefalse

例如,若要启用默认禁用的coredns数据抓取功能,请按如下所示更新设置:

default-scrape-settings-enabled: |-
    kubelet = true
    coredns = true
    cadvisor = true
    kubeproxy = false
    ...

抓取间隔设置

所有默认目标的默认抓取间隔为 30 秒。 若要修改任何目标的此间隔,可以更新 default-targets-scrape-interval-settings ConfigMap 部分的设置。

例如,若要将 kubelet 的抓取间隔更改为 60 秒,请按如下所示更新设置:

default-targets-scrape-interval-settings: |-
    kubelet = "60s"
    coredns = "30s"
    cadvisor = "30s"
    ...

启用基于 Pod 注释的抓取

在你的群集中给 Pod 添加注释,以便在无需创建自定义 Prometheus 配置的情况下收集应用程序 Pod 的指标。若要启用对具有特定注释的 Pod 进行数据收集,请在 ConfigMap 的 podannotationnamespaceregex 部分中添加所需抓取的带注释的 Pod 所在命名空间的正则表达式。

例如,以下设置仅在命名空间 kube-systemmy-namespace 中抓取具有注释的 Pod:

pod-annotation-based-scraping: |-
    podannotationnamespaceregex = "kube-system|my-namespace"

将批注添加到 metadata ConfigMap 部分。 prometheus.io/scrape: "true" 是抓取 Pod 所需的,而 prometheus.io/pathprometheus.io/port 指示托管在 Pod 上的指标的路径和端口。 以下示例定义了一个 Pod 的注释,该 Pod 托管了位于 <pod IP>:8080/metrics 的指标。

metadata:   
  annotations:
    prometheus.io/scrape: 'true'
    prometheus.io/path: '/metrics'
    prometheus.io/port: '8080'

Warning

从许多命名空间中抓取 Pod 注释可能会生成大量的指标,具体取决于具有注释的 Pod 数。

自定义默认目标收集的指标

对于Azure Monitor 中 Prometheus 指标的最小引入配置文件中所述,只会为默认目标收集基本的指标。 若要从默认目标收集所有指标,请在 ConfigMap 的 default-targets-metrics-keep-list 部分中将 minimalingestionprofile 设置为 false

minimalingestionprofile = false

或者,你可以通过在其 default-targets-metrics-keep-list 下更新保留列表来为任何默认目标添加要收集的指标。

例如,kubelet 是默认目标 kubelet 的指标筛选设置。 使用以下脚本通过基于正则表达式的筛选来筛选为默认目标收集的指标。

kubelet = "metricX|metricY"
apiserver = "mymetric.*"

Note

如果在正则表达式中使用引号或反斜杠,则需要使用反斜杠(如示例 "test\'smetric\"s\""testbackslash\\*)对其进行转义。

如果要进一步自定义默认目标以更改集合频率或标签等属性,则通过将目标值 false设置为禁用该目标。 然后,根据 Azure Monitor 中 Prometheus 指标的自定义擦除中所述,为目标创建自定义作业。

群集别名

群集资源 ID 的最后一部分将追加到每个时序以唯一标识数据。 例如,如果资源 ID 为 /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/rg-name/providers/Microsoft.ContainerService/managedClusters/myclustername,则群集标签为 myclustername。 若要覆盖此群集标签,请更新cluster_alias中的prometheus-collector-settings设置。

Note

仅允许使用字母数字字符。 其他任何字符都将替换为 _。 如果要启用记录和警报规则,请确保在规则载入模板的群集名称参数中使用群集别名,使规则正常工作。

  prometheus-collector-settings: |-
    cluster_alias = ""

调试模式

若要查看出于调试目的而收集的每个指标,可以将指标附加代理配置为在调试模式下运行,方法是在debug-mode配置下,将设置从enabled更新为true

Warning

此模式可能会影响性能,应该出于调试目的短时间启用。

后续步骤

查询 Prometheus 指标
详细了解如何收集 Prometheus 指标