5

当 Prometheus 使用 Consul 的自动发现功能来获取要监控的目标列表时,它也会自己获取 Consul 服务器。这很棒——我们想用 Prometheus 监控这些家伙。问题是 Consul 使用端口 8300 报告这些节点,这不是我们用来监控目标的端口。

如何将从 Consul 收到的端口替换为其他端口?我知道 Prometheus relabel_configs可以做到这一点,但我还没有成功配置它。

4

2 回答 2

12

我终于想通了。下面是一个工作示例。正如文档指定的那样,地址关键字可能不适用于所有设置 - 您可能想尝试“<__meta_consul_address>:<__meta_consul_service_port>”。

   - source_labels: ['__address__']
     separator:     ':'
     regex:         '(.*):(8300)'
     target_label:  '__address__'
     replacement:   '${1}:9126'
于 2016-11-01T07:22:53.223 回答
3

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

  selector:
    matchLabels:
      app: my-service
  template:
    metadata:
      labels:
        app: my-service
      annotations:
        prometheus: "true"
        prometheus/port: "8888"

您可以使用以下转换:

- source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_port]
    action: replace
    regex: ([^:]+)(?::\d+)?;(\d+)
    replacement: ${1}:${2}
    target_label: __address__

prometheus 中的源标签被加入,;在这种情况下,我们将拥有 ie。(如果您的服务器默认监听 8080):http://10.52.9.79:8080;8888

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

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

结果,您从注释中设置了原始地址和端口。例如,如果您有 Spring Boot 应用程序并且您想使用与默认应用程序端口不同的管理端口,这可能会很有用。

于 2019-02-17T12:21:22.970 回答