gpt4 book ai didi

monitoring - 在 Prometheus 中重新标记

转载 作者:行者123 更新时间:2023-12-03 12:57:01 28 4
gpt4 key购买 nike

设置

Prometheus 节点导出器已注册为具有各种标签的 consul 代理的服务。提供给领事代理的示例服务定义:

{
"service":{
"id": "server-stats",
"name": "server-stats",
"tags": [
"a=1_meow",
"b=2_woof",
"c=3_moo",
"monkey"
],
"port": 9100,
"checks": [
{
"name": "Process #1",
"script": "/path/to/healthcheck/script.sh",
"interval": "5s"
}
]
}
}

Prometheus 设置为查找此 server-stats 服务并使用 Consul 提供的配置(主机地址和端口)从服务器中抓取统计信息。上述标签在 __meta_consul_tags 中以逗号分隔列表的形式提供,可用于重新标记。

Prometheus 重标配置:

relabel_configs:
- source_labels: [__meta_consul_tags]
separator: ','
#regex: '(.+)=(.+)'
regex: '([a-z_]+)=([a-z_]+|\d+)'
target_label: ${1}
replacement: ${2}

问题

我正在尝试向 Prometheus 公开标签,以便我们可以根据标签获取统计信息和图表。牢记上述服务配置,除了 Prometheus 内部所做的任何事情之外,我希望每个指标都有以下标签:a=1_meowb=2_woofc=3_moo 并忽略 monkey,因为它只是一个字符串。如果存在需要 = 的解决方案,我可以从标签列表中删除 monkey。上面编写的重新标记配置根本不会暴露任何标签,并且似乎被忽略了。在日志级别设置为调试的情况下运行 Prometheus 也不会产生任何结果。

相关文档

最佳答案

理解错误

我认为我对 prometheus 中标签的工作原理的理解有误。我的不正确理解是:

  1. 在应用 regex 之前,字符串首先会在 separator 上进行拆分(否则它的用途是什么?),
  2. 每个子字符串都有 regex 对其进行评估,
  3. 如果声明并找到匹配组,它们将作为可用于 target_labelreplacement 字段的索引值。
  4. 如果 regex 不匹配,则该子字符串将被忽略。
  5. 因为 regex 预计会在拆分后应用到每个子字符串上,所以会导致多个子字符串产生多个标签。

正确理解

但是,从 brian-brazil的帖子链接在他的answer和 Prometheus 的文档,似乎发生了以下情况:

  1. 所有 __meta 标记组合成一个长的 separator 分隔行。
  2. regex 仅在该行上应用一次。
  3. 如果 regex 匹配并包含组,则它们从 1 开始编入索引,并可用于 target_labelreplacement
  4. separator 似乎在本节中被忽略了,即使你提到它。

根据正确理解配置

根据这个想法和问题中的示例,我能够制作以下有效的配置

relabel_configs:
- source_labels: [__meta_consul_tags]
regex: '.*,a=([a-z0-9_]+),.+'
target_label: 'a'
replacement: ${1}

- source_labels: [__meta_consul_tags]
regex: '.*,b=([a-z0-9_]+),.+'
target_label: 'b'
replacement: ${1}

- source_labels: [__meta_consul_tags]
regex: '.*,c=([a-z0-9_]+),.+'
target_label: 'c'
replacement: ${1}

- source_labels: [__meta_consul_tags]
regex: '.*,d=([a-z0-9_]+),.+'
target_label: 'd'
replacement: ${1}

注意事项

我相信这两种方法(brian-brazil 在 his blogpost 中写的方法,以及我在上面使用的方法)都有一些警告——我们要么需要事先知道我们想要的所有标签,要么有一定数量的标签。这意味着如果开发人员想要将不同的或更多的标签与他/她的服务相关联,他/她将需要使用 ops,因为一般流程将无法处理它。我认为这是一个应该解决的小问题。

关于monitoring - 在 Prometheus 中重新标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44339461/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com