裸金属环境部署Thanos遇连接问题:Querier无法访问Sidecar的Store API
从你提供的docker-compose配置来看,有几个关键的配置问题可能导致Querier无法访问Sidecar的10901端口,我逐一给你分析:
1. Docker Compose网络配置语法错误
你的thanos-sidecar服务里写的是network:,但正确的语法应该是networks:(复数形式)。这个错误会导致Sidecar没有加入到指定的thanos网络中,而Querier在thanos网络里自然无法找到Sidecar实例。
修正后的配置片段:
thanos-sidecar: # ... 其他配置 ... networks: - thanos
同时要确保你的Prometheus服务也加入了thanos网络,否则Sidecar也无法连接到Prometheus的9090端口。
2. TSDB路径的引号问题
你在Sidecar命令里写的--tsdb.path="/prometheus",这里的双引号是多余的。在Docker的command参数中,引号会被解析为路径的一部分,导致Sidecar尝试寻找名为"/prometheus"(带引号)的目录,而你的卷是挂载到/prometheus,这会导致Sidecar无法找到TSDB目录,启动失败或无法正常暴露Store API。
修正后的command参数:
command: ['sidecar', '--tsdb.path=/prometheus', '--prometheus.url=http://prometheus:9090']
3. Prometheus访问地址的优化
你当前用的是容器名metrics_prometheus_1:9090来访问Prometheus,在Docker Compose的同一个网络中,直接使用服务名(比如你的Prometheus服务如果叫prometheus)会更稳定,因为容器名可能会随重启变化,而服务名是固定的。
所以把--prometheus.url=http://metrics_prometheus_1:9090改成--prometheus.url=http://prometheus:9090(前提是你的Prometheus服务在docker-compose里的名称是prometheus)。
4. 验证Sidecar状态
修正配置后,重启Sidecar服务,然后查看启动日志确认没有报错:
docker logs <你的sidecar容器名>
日志里如果出现类似level=info msg="starting sidecar"和connected to prometheus的信息,说明Sidecar已经正常启动并连接到Prometheus,Store API的10901端口也应该正常监听了。
最后验证Querier连接
重启Querier服务后,访问http://localhost:19192进入Thanos Querier的UI,尝试查询指标(比如up),如果能看到Prometheus的实例数据,说明连接成功。
内容的提问来源于stack exchange,提问作者swetad90

