如何在普罗米修斯中使用 relable_config 为指标添加前缀
How to add prefix to metrics using relable_config in prometheus
最终 运行 在具有 Prometheus 和 Grafana 的 Docker 环境中使用 Harvest2。
问题是,在同一个 Prometheus 数据库中还有其他系统报告,而 NetApp Harvest 不会在其指标名称上添加前缀,例如 netapp_ 到每个 netapp 指标。以这种方式找到正确的指标真是太痛苦了。
我想使用 Prometheus_config 的 relable_config 选项作为解决方法。
目前我对收获轮询器有以下配置:
- job_name: harvest
scrape_interval: 1m
scrape_timeout: 1m
metrics_path: /metrics
relabel_configs:
- action: replace
source_labels: [__name__]
regex: (.*)
target_label: __name__
replacement: 'netapp_'
- action: keep
source_labels:
- "custom_labels"
- "custom_labels"
- "custom_labels"
- "custom_labels"
regex: '.+;.+;.+;.+'
file_sd_configs:
- refresh_interval: 10s
files:
- targets/harvest.yml
但这会导致 harvest pollers 根本不会出现在 Grafana/Prometheus 中。关于如何添加所需前缀的任何想法?
此配置有两个问题,但原因相同。此外,在这种情况下添加前缀可能不是最好的主意。请务必阅读此答案末尾的注释。
问题是 relabel_configs
包含应该在抓取 之前应用 的重新标记配置。例如,您可以更改 __address__
,这样 Prometheus 将联系其他主机而不是服务发现提供的主机。当然,__name__
此时不可用,因为Prometheus还没有抓取任何东西。
解决方法是将__name__
移动到metric_relabel_configs
。在此步骤中,指标已收集但尚未摄取,您可以更改它们 __name__
。这是一个向所有抓取的指标添加 super_
前缀的示例:
metric_relabel_configs:
- source_labels: [__name__]
target_label: __name__
replacement: super_
与问题中的第二次重新标记几乎相同:
- action: keep
source_labels:
- "custom_labels"
- "custom_labels"
- "custom_labels"
- "custom_labels"
regex: '.+;.+;.+;.+'
尚未抓取指标,因此还没有自定义标签。这有效地删除了所有目标,因为 none 具有提到的标签。如果您认为需要重新标记(不需要为标签名称添加前缀),则必须将其放在 metric_relabel_configs
.
下
为什么向标签名称添加前缀可能不是最好的主意
问题在于,由于标签名称不同,您将无法对重命名的指标使用相同的 dashboard/alerts。您将不得不为这些指标制作单独的仪表板或使用奇怪且无效的查询,例如:
{__name__=~".*my_metric_without_prefix"}
最好只添加一个标签,将一组指标与另一组指标区分开来。您可以添加自己的新标签或使用不同的作业来抓取这些指标。在最后一种情况下,您可以通过 job
标签将一组指标与另一组指标区分开来。
最终 运行 在具有 Prometheus 和 Grafana 的 Docker 环境中使用 Harvest2。
问题是,在同一个 Prometheus 数据库中还有其他系统报告,而 NetApp Harvest 不会在其指标名称上添加前缀,例如 netapp_ 到每个 netapp 指标。以这种方式找到正确的指标真是太痛苦了。
我想使用 Prometheus_config 的 relable_config 选项作为解决方法。 目前我对收获轮询器有以下配置:
- job_name: harvest
scrape_interval: 1m
scrape_timeout: 1m
metrics_path: /metrics
relabel_configs:
- action: replace
source_labels: [__name__]
regex: (.*)
target_label: __name__
replacement: 'netapp_'
- action: keep
source_labels:
- "custom_labels"
- "custom_labels"
- "custom_labels"
- "custom_labels"
regex: '.+;.+;.+;.+'
file_sd_configs:
- refresh_interval: 10s
files:
- targets/harvest.yml
但这会导致 harvest pollers 根本不会出现在 Grafana/Prometheus 中。关于如何添加所需前缀的任何想法?
此配置有两个问题,但原因相同。此外,在这种情况下添加前缀可能不是最好的主意。请务必阅读此答案末尾的注释。
问题是 relabel_configs
包含应该在抓取 之前应用 的重新标记配置。例如,您可以更改 __address__
,这样 Prometheus 将联系其他主机而不是服务发现提供的主机。当然,__name__
此时不可用,因为Prometheus还没有抓取任何东西。
解决方法是将__name__
移动到metric_relabel_configs
。在此步骤中,指标已收集但尚未摄取,您可以更改它们 __name__
。这是一个向所有抓取的指标添加 super_
前缀的示例:
metric_relabel_configs:
- source_labels: [__name__]
target_label: __name__
replacement: super_
与问题中的第二次重新标记几乎相同:
- action: keep
source_labels:
- "custom_labels"
- "custom_labels"
- "custom_labels"
- "custom_labels"
regex: '.+;.+;.+;.+'
尚未抓取指标,因此还没有自定义标签。这有效地删除了所有目标,因为 none 具有提到的标签。如果您认为需要重新标记(不需要为标签名称添加前缀),则必须将其放在 metric_relabel_configs
.
为什么向标签名称添加前缀可能不是最好的主意
问题在于,由于标签名称不同,您将无法对重命名的指标使用相同的 dashboard/alerts。您将不得不为这些指标制作单独的仪表板或使用奇怪且无效的查询,例如:
{__name__=~".*my_metric_without_prefix"}
最好只添加一个标签,将一组指标与另一组指标区分开来。您可以添加自己的新标签或使用不同的作业来抓取这些指标。在最后一种情况下,您可以通过 job
标签将一组指标与另一组指标区分开来。