Prometheus:如何用正则表达式替换 Consul 服务器端口?
Prometheus: How to replace Consul server ports with regex?
当 Prometheus 使用 Consul 的自动发现功能获取要监控的目标列表时,它也会获取 Consul 服务器本身。这太棒了——我们想用 Prometheus 监控这些人。问题是 Consul 使用端口 8300 报告这些节点,不是我们用来监视目标的端口。
如何将从 Consul 收到的端口替换为其他端口?我知道 Prometheus relabel_configs 可以做到这一点,但我还没有成功配置它。
我终于弄明白了。下面是一个工作示例。正如 documentation 指定的那样,地址关键字可能不适用于所有设置 - 您可能想尝试使用“<__meta_consul_address>:<__meta_consul_service_port>”。
- source_labels: ['__address__']
separator: ':'
regex: '(.*):(8300)'
target_label: '__address__'
replacement: ':9126'
如果您想通过附加注释动态定义端口,即:
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: :
target_label: __address__
prometheus 中的源标签与 ;
连接,在这种情况下我们将有 ie。 (如果您的服务器默认侦听 8080):http://10.52.9.79:8080;8888
在正则表达式中我们有:
- 第一组-所有没有
:
的符号,即://10.52.9.79
- 具有原始端口的第二个非捕获组(如果存在)
- 第三组带有来自注释的端口
因此,您根据注释设置了原始地址和端口。例如,如果您有 Spring 启动应用程序并且您想使用与默认应用程序端口不同的管理端口,这可能很有用。
当 Prometheus 使用 Consul 的自动发现功能获取要监控的目标列表时,它也会获取 Consul 服务器本身。这太棒了——我们想用 Prometheus 监控这些人。问题是 Consul 使用端口 8300 报告这些节点,不是我们用来监视目标的端口。
如何将从 Consul 收到的端口替换为其他端口?我知道 Prometheus relabel_configs 可以做到这一点,但我还没有成功配置它。
我终于弄明白了。下面是一个工作示例。正如 documentation 指定的那样,地址关键字可能不适用于所有设置 - 您可能想尝试使用“<__meta_consul_address>:<__meta_consul_service_port>”。
- source_labels: ['__address__']
separator: ':'
regex: '(.*):(8300)'
target_label: '__address__'
replacement: ':9126'
如果您想通过附加注释动态定义端口,即:
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: :
target_label: __address__
prometheus 中的源标签与 ;
连接,在这种情况下我们将有 ie。 (如果您的服务器默认侦听 8080):http://10.52.9.79:8080;8888
在正则表达式中我们有:
- 第一组-所有没有
:
的符号,即://10.52.9.79
- 具有原始端口的第二个非捕获组(如果存在)
- 第三组带有来自注释的端口
因此,您根据注释设置了原始地址和端口。例如,如果您有 Spring 启动应用程序并且您想使用与默认应用程序端口不同的管理端口,这可能很有用。