使用prom-label-proxy实现Prometheus Thanos的基于标签的多租户读

本文档介绍了如何通过安装Go、prom-label-proxy和Caddy,配置Prometheus的external_labels,来实现多租户查询隔离。每个租户通过特定的Caddy端口访问Prometheus数据,确保只查询到对应租户的数据。在Grafana中配置数据源以访问Caddy地址,从而完成租户级别的数据隔离。

本文档的前提是已有一个安装好的Thanos集群。

组件安装

Go安装:

Download and install - go.dev (google.cn)

prom-label-proxy安装:

prometheus-community/prom-label-proxy: A proxy that enforces a given label in a given PromQL query. (github.com)

go env -w GOPROXY=https://goproxy.cn
go get github.com/prometheus-community/prom-label-proxy
# 使用go env命令查看GOPATH,编译好的可执行文件在GOPATH的bin目录下
cd ~/go/bin
./prom-label-proxy --help

Caddy安装

Install — Caddy Documentation

yum install yum-plugin-copr
yum copr enable @caddy/caddy
yum install caddy

组件配置

假设Prometheus拥有如下external_labels(使用已有标签区分租户或者单独添加租户tenant标签均可):

# 租户OrgA prometheus.yml
global:
  external_labels:
    region: eu-west
    tenant="OrgA"
    replica: 0

# 租户OrgB prometheus.yml
global:
  external_labels:
    region: eu-east
    tenant="OrgB"
    replica: 0

启动prom-label-proxy:

nohup ./prom-label-proxy -label tenant -upstream http://<thanos_query_ip>:<thanos_query_port> -insecure-listen-address 0.0.0.0:8080 &

label参数的含义为所有发送给后端thanos query的请求url必须携带tenant=abc参数,否则会报错。

配置并启动caddy:

# vi /etc/caddy/Caddyfile
:8081 {
rewrite * ?{query}&tenant=OrgA
reverse_proxy localhost:8080
}

:8082 {
rewrite * ?{query}&tenant=OrgB
reverse_proxy localhost:8080
}

# 启动caddy
systemctl start caddy

其中8081端口提供给租户OrgA,8082端口提供给租户OrgB,即可保证每个租户只能查询到自身数据。

Grafana配置:

为Grafana中不同的Org添加各自的数据源(填写caddy地址)即可。

读路径结构

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洒满阳光的午后

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值