Prometheus:如何用正则表达式替换Consul服务器端口?

时间:2016-11-01 07:16:48

标签: consul prometheus

当Prometheus使用Consul的自动发现功能获取要监控的目标列表时,它也会自动获得Consul服务器。这很棒 - 我们希望用普罗米修斯来监控这些人。问题是Consul使用端口8300报告这些节点,这是我们用来监视目标的端口。

如何将从Consul收到的端口替换为其他东西?我知道这可以通过Prometheus relabel_configs 实现,但我还没有成功配置它。

2 个答案:

答案 0 :(得分:6)

我最终想通了。下面是一个工作实例。正如documentation指定的那样,地址关键字可能不适用于所有设置 - 您可能想要尝试“< __ meta_consul_address>:< __ meta_consul_service_port>”代替。

   - source_labels: ['__address__']
     separator:     ':'
     regex:         '(.*):(8300)'
     target_label:  '__address__'
     replacement:   '${1}:9126'

答案 1 :(得分:0)

如果您想通过附加注释来动态定义端口,即:

for meth in object_methods:
    print(meth)
    try:
        print('obj.meth for obj', obj, 'and method', meth, ':') 
        obj.meth
    except AttributeError as e:
        print('obj.meth for obj', obj, 'and method', meth, ': AttributeError:', e)

您可以使用以下转换:

__add__
obj.meth for obj my_string and method __add__ :
obj.meth for obj my_string and method __add__ : AttributeError: 'str' object has no attribute 'meth'
__class__
obj.meth for obj my_string and method __class__ :
obj.meth for obj my_string and method __class__ : AttributeError: 'str' object has no attribute 'meth'
. . .

普罗米修斯的源标签与 selector: matchLabels: app: my-service template: metadata: labels: app: my-service annotations: prometheus: "true" prometheus/port: "8888" 结合在一起,在这种情况下,我们将拥有ie。 (如果您的服务器默认监听8080):- source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_port] action: replace regex: ([^:]+)(?::\d+)?;(\d+) replacement: ${1}:${2} target_label: __address__

在正则表达式中,我们有:

  • 第一组-所有没有;的符号,即:http://10.52.9.79:8080;8888
  • 具有原始端口的第二个非捕获组(如果存在)
  • 带有注释端口的第三组

因此,您可以通过注释设置原始地址和端口。例如,如果您具有Spring Boot应用程序,并且想要使用与默认应用程序端口不同的管理端口,则可能很有用。