你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

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

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

ConfigMap

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

ConfigMap 说明
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 的命名空间对应的正则表达式添加到 podannotationnamespaceregex 中。

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

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

将批注添加到 metadata ConfigMap 部分。 若要抓取 Pod,prometheus.io/scrape: "true" 是必需的,而 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'

警告

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

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

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

minimalingestionprofile = false

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

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

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

注意

如果在正则表达式中使用引号或反斜杠,则需要像示例 "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设置。

注意

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

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

调试模式

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

警告

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

Kube-state-metrics

若要替代在启用托管 Prometheus 的过程中安装的 kube-state-metrics 部署 (ama-metrics-ksm) 的默认启动参数(resources、metric-labels-allowlist 和 metric-annotations-allowlist),请使用 ama-metrics-settings-configmap

labels_allow_list 和 annotations_allow_list 的 configmap 中的设置会替代在针对 ksm-metrics-labels-allow-list 和 ksm-metrics-annotations-allow-list 进行载入期间设置的参数

资源的 configmap 中的设置会替代为 ama-metrics-ksm 部署设置的默认收集器

请注意,以下是 yaml 配置:

  ksm-config: |-
    resources: 
      secrets: {}
      configmaps: {}
    labels_allow_list: # object name and label names
      pods: 
      - app8
    annotations_allow_list: # object name and annotation names
      namespaces:
      - kube-system
      - default

注意

自定义这些值可能会影响作为 kube-state-metrics 作业的一部分收集的默认数据,并可能导致某些仪表板不加载数据。

删除设置 configmap 中的整个节 (ksm-config) 需要重新创建 ama-metrics-ksm 部署。 这可以通过删除 ama-metrics-ksm Pod 或通过执行 - kubectl rollout restart deployment/ama-metrics -n kube-system 来完成

建议仅在需要时自定义这 3 个参数,将其他参数设置为替代是不支持的方案 - 尽管可能,但必须谨慎使用

kube-state-metrics cli 参数的 OSS 文档

后续步骤

在 Prometheus 的指标上设置警报
查询 Prometheus 指标
详细了解如何收集 Prometheus 指标