在 Azure Monitor 中为 Prometheus 指标创建自定义配置文件并进行验证

除了 Azure Monitor Prometheus 代理默认抓取的默认抓取目标外,可通过以下步骤使用 configmap 向代理提供更多抓取配置。 Azure Monitor Prometheus 代理不理解也不处理 operator CRD 来获得抓取配置,而是使用 Prometheus 配置中定义的本机 Prometheus 配置。

可用于自定义目标抓取的三个 configmap 包括 -

  • ama-metrics-prometheus-config(推荐)- 创建具有此名称的 configmap 后,将从在群集中运行的 Azure Monitor 指标副本 Pod 运行其中定义的抓取作业。
  • ama-metrics-prometheus-config-node(高级)- 创建具有此名称的 configmap 后,将从在群集中运行的每个 Linux DaemonSet Pod 运行其中定义的抓取作业。 有关详细信息,请参阅高级设置
  • ama-metrics-prometheus-config-node-windows(高级)- 创建具有此名称的 configmap 后,将从每个 Windows DaemonSet 运行其中定义的抓取作业。 有关详细信息,请参阅高级设置

创建 Prometheus 配置文件

创作 Prometheus 抓取配置作业的一种更简单方法:

  • 步骤:1 使用配置文件 (yaml) 创作/定义抓取作业
  • 步骤:2 使用本文中指定的自定义工具验证抓取配置文件,然后将该配置文件转换为 configmap
  • 步骤:3 将抓取配置文件作为 configmap 部署到群集。

这种方法可以更轻松地创作 yaml 配置(它对空间非常敏感),并且不会通过在 configmap 中直接创作抓取配置来添加意外的空间。

创建一个名为 prometheus-config 的 Prometheus 抓取配置文件。 要详细了解如何为 Prometheus 创作抓取配置,请参阅配置提示和示例。 还可查看 Prometheus.io 抓取配置参考。 配置文件将在 scrape_configs 部分下列出抓取配置,并且可选择使用“全局”部分来设置全局 scrape_intervalscrape_timeoutexternal_labels

提示

对全局部分的更改将影响默认配置和自定义配置。

以下是一个示例 Prometheus 抓取配置文件:

global:
  scrape_interval: 30s
scrape_configs:
- job_name: my_static_config
  scrape_interval: 60s
  static_configs:
    - targets: ['my-static-service.svc.cluster.local:1234']

- job_name: prometheus_example_app
  scheme: http
  kubernetes_sd_configs:
    - role: service
  relabel_configs:
    - source_labels: [__meta_kubernetes_service_name]
      action: keep
      regex: "prometheus-example-service"

验证抓取配置文件

代理将使用 promconfigvalidator 工具验证通过 configmap 提供给它的 Prometheus 配置。 如果配置无效,则附加代理将会拒绝给定的自定义配置。 获得 Prometheus 配置文件后,可选择性地使用 promconfigvalidator 工具来验证配置,然后再创建代理使用的配置映射。

promconfigvalidator 工具包含在 Azure Monitor 指标加载项 pod 中。 可使用群集中 kube-system 命名空间中的任何 ama-metrics-node-* Pod 下载该工具来进行验证。 使用 kubectl cp 下载工具及其配置:

for podname in $(kubectl get pods -l rsName=ama-metrics -n=kube-system -o json | jq -r '.items[].metadata.name'); do kubectl cp -n=kube-system "${podname}":/opt/promconfigvalidator ./promconfigvalidator;  kubectl cp -n=kube-system "${podname}":/opt/microsoft/otelcollector/collector-config-template.yml ./collector-config-template.yml; chmod 500 promconfigvalidator; done

复制可执行文件和 yaml 后,找到所创作的 Prometheus 配置文件的路径。 然后,替换命令中的 <config path> 并使用以下命令运行验证程序:

./promconfigvalidator/promconfigvalidator --config "<config path>" --otelTemplate "./promconfigvalidator/collector-config-template.yml"

如果可选 output 参数未提供路径,则运行验证程序会生成合并的配置文件 merged-otel-config.yaml。 请勿将此自动生成的合并文件作为配置用于指标收集器代理,因为它仅用于工具验证和调试目的。

将配置文件部署为 configmap

自定义 Prometheus 配置文件在 kube-system 命名空间中用作指标附加 configmap ama-metrics-prometheus-config(或)ama-metrics-prometheus-config-node(或)ama-metrics-prometheus-config-node-windows 中名为 prometheus-config 的字段。 可以根据上面创建的抓取配置文件创建 configmap,其方法是将 Prometheus 配置文件重命名为 prometheus-config(没有文件扩展名),并运行一个或多个以下命令,具体取决于要为自定义抓取作业配置创建的 configmap。

例如;- 创建要由 replicsset 使用的 configmap

kubectl create configmap ama-metrics-prometheus-config --from-file=prometheus-config -n kube-system

这会在 kube-system 命名空间中创建名为 ama-metrics-prometheus-config 的 configmap。 Azure Monitor 指标 pod 将会在 30-60 秒后重启以应用新的配置。要查看配置验证、处理或合并是否存在任何问题,可以查看 ama-metrics 副本 Pod

例如;- 创建要由 Linux DaemonSet 使用的 configmap

kubectl create configmap ama-metrics-prometheus-config-node --from-file=prometheus-config -n kube-system

这会在 kube-system 命名空间中创建名为 ama-metrics-prometheus-config-node 的 configmap。 每个 Azure Monitor 指标 Linux DaemonSet 将在 30-60 秒后重启,以应用新的配置。要查看配置验证、处理或合并是否存在任何问题,可以查看 ama-metrics-node Linux Deamonset Pod

例如;- 创建要由 Windows DaemonSet 使用的 configmap

kubectl create configmap ama-metrics-prometheus-config-node-windows --from-file=prometheus-config -n kube-system

这会在 kube-system 命名空间中创建名为 ama-metrics-prometheus-config-node-windows 的 configmap。 每个 Azure Monitor 指标 Windows DaemonSet pod 将会在 30-60 秒后重启以应用新的配置。要查看配置验证、处理或合并是否存在任何问题,可以查看 ama-metrics-win-node Windows Deamonset Pod

确保在运行以下命令之前将 Prometheus 配置文件命名为 prometheus-config,因为该文件名用作配置映射设置名称。

这会在 kube-system 命名空间中创建名为 ama-metrics-prometheus-config 的 configmap。 Azure Monitor 指标 pod 将会重启以应用新的配置。要查看配置验证、处理或合并是否存在任何问题,可以查看 ama-metrics Pod。

此处提供了 ama-metrics-prometheus-config 配置映射示例。

故障排除

如果在 kube-system 命名空间中成功创建了 configmap(ama-metrics-prometheus-config 或 ama-metrics-prometheus-config-node),但仍然看不到抓取自定义目标,请使用 kubectl 日志检查 ama-metrics-prometheus-config configmap 的副本 pod 日志或 ama-metrics-prometheus-config-node configmap 的 DaemonSet pod 日志中是否存在错误,并确保在带有前缀 prometheus-config-merger开始合并默认和自定义 Prometheus 配置部分中没有错误

注意

高级设置:为 daemonset 配置自定义 Prometheus 抓取作业

ama-metrics副本 Pod 使用自定义的 Prometheus 配置并抓取指定目标。 对于具有大量节点和 Pod 以及要抓取的大量指标的群集,可以将一些适用的自定义抓取目标从单个ama-metrics副本 Pod 卸载到ama-metrics DaemonSet Pod。

ama-metrics-prometheus-config-node configmap类似于副本集 configmap,且可以创建以在每个节点上具有静态抓取配置。 抓取配置应仅面向单个节点,而不应使用服务发现/pod 注释。 否则,每个节点会尝试抓取所有目标,并对 Kubernetes API 服务器进行多次调用。

通过将 static_configs 用于目标,使用 $NODE_IP 环境变量并指定要抓取的端口,自定义抓取目标可以遵循相同的格式。 DaemonSet 的每个 pod 都会获取配置,抓取指标,然后针对该节点发送。

示例:- 下面的node-exporter配置是 DaemonSet Pod 的默认目标之一。 它使用 $NODE_IP 环境变量,该变量已为每个 ama-metrics 加载项容器设置,以针对节点上的特定端口:

- job_name: nodesample
  scrape_interval: 30s
  scheme: http
  metrics_path: /metrics
  relabel_configs:
  - source_labels: [__metrics_path__]
    regex: (.*)
    target_label: metrics_path
  - source_labels: [__address__]
    replacement: '$NODE_NAME'
    target_label: instance
  static_configs:
  - targets: ['$NODE_IP:9100']

后续步骤