本文档的前提是已有一个安装好的Thanos集群。
组件安装
Go安装:
Download and install - go.dev (google.cn)
prom-label-proxy安装:
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安装
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地址)即可。