在 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_interval
、scrape_timeout
和 external_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']