Thanos prometheus 集群以及多租户解决方案docker-compose 试用(一)
prometheus 是一个非常不多的metrics 监控解决方案,但是对于ha 以及多租户的处理并不是很好,当前有好多解决方案
- cortex
- Thanos
- prometheus+ influxdb
- Timebala
- M3db
以下结合github 上的一个docker-compose项目学习下Thanos 的集群方案
Thanos 参考架构图

简单说明
thanos 包含了sidecar,store api,query,compact 组件,sidecar 和每个promethues关联,同时配置prometheus 都配置了不同的label
以下是一个简单的组件通信图,可以参考https://improbable.io/games/blog/thanos-prometheus-at-scale 查看详细说明

docker-compose 运行
- docker-compose文件
version: '3.7'
services:
#
# one prometheus and its sidecar
#
prometheus1:
image: prom/prometheus:v2.9.2
command:
- --web.enable-lifecycle
- --config.file=/etc/prometheus/prometheus.yml
- --storage.tsdb.path=/prometheus
- --web.console.libraries=/usr/share/prometheus/console_libraries
- --web.console.templates=/usr/share/prometheus/consoles
- --storage.tsdb.min-block-duration=1m # small just to not wait hours to test :)
- --storage.tsdb.max-block-duration=1m # small just to not wait hours to test :)
volumes:
- ./prometheus1.yaml:/etc/prometheus/prometheus.yml
- ./data1:/prometheus
ports:
- "9090:9090"
depends_on:
- minio
sidecar1:
image: improbable/thanos:v0.4.0
volumes:
- ./data1:/var/prometheus
- ./bucket_config.yaml:/bucket_config.yaml
command:
- sidecar
- --tsdb.path=/var/prometheus
- --prometheus.url=http://prometheus1:9090
- --objstore.config-file=/bucket_config.yaml
- --http-address=0.0.0.0:19191
- --grpc-address=0.0.0.0:19090
depends_on:
- minio
#
# another prometheus and its sidecar
#
prometheus2:
image: prom/prometheus:v2.9.2
command:
- --web.enable-lifecycle
- --config.file=/etc/prometheus/prometheus.yml
- --storage.tsdb.path=/prometheus
- --web.console.libraries=/usr/share/prometheus/console_libraries
- --web.console.templates=/usr/share/prometheus/consoles
- --storage.tsdb.min-block-duration=1m # small just to not wait hours to test :)
- --storage.tsdb.max-block-duration=1m # small just to not wait hours to test :)
volumes:
- ./prometheus2.yaml:/etc/prometheus/prometheus.yml
- ./data2:/prometheus
ports:
- "9091:9090"
depends_on:
- minio
sidecar2:
image: improbable/thanos:v0.4.0
volumes:
- ./data2:/var/prometheus
- ./bucket_config.yaml:/bucket_config.yaml
command:
- sidecar
- --tsdb.path=/var/prometheus
- --prometheus.url=http://prometheus2:9090
- --objstore.config-file=/bucket_config.yaml
- --http-address=0.0.0.0:19191
- --grpc-address=0.0.0.0:19090
depends_on:
- minio
grafana:
image: grafana/grafana
ports:
- "3000:3000"
# to search on old metrics
storer:
image: improbable/thanos:v0.4.0
volumes:
- ./bucket_config.yaml:/bucket_config.yaml
command:
- store
- --data-dir=/var/thanos/store
- --objstore.config-file=bucket_config.yaml
- --http-address=0.0.0.0:19191
- --grpc-address=0.0.0.0:19090
depends_on:
- minio
# downsample metrics on the bucket
compactor:
image: improbable/thanos:v0.4.0
volumes:
- ./bucket_config.yaml:/bucket_config.yaml
command:
- compact
- --data-dir=/var/thanos/compact
- --objstore.config-file=bucket_config.yaml
- --http-address=0.0.0.0:19191
- --wait
depends_on:
- minio
# querier component which can be scaled
querier:
image: improbable/thanos:v0.4.0
labels:
- "traefik.enable=true"
- "traefik.port=19192"
- "traefik.frontend.rule=PathPrefix:/"
command:
- query
- --http-address=0.0.0.0:19192
- --store=sidecar1:19090
- --store=sidecar2:19090
- --store=storer:19090
- --query.replica-label=replica
#
# s3 compatible storage
#
minio:
image: minio/minio
ports:
- 9000:9000
environment:
- MINIO_ACCESS_KEY=minio
- MINIO_SECRET_KEY=miniostorage
volumes:
- ./minio_data:/data
command: server /data
# a simple exporter to test some metrics
domain_exporter:
image: caarlos0/domain_exporter:v1
ports:
- "9222:9222"
# a load balancer to reverse-proxy to all queriers
traefik:
image: traefik
restart: always
ports:
- 80:80
- 8080:8080
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./traefik.toml:/traefik.toml
networks:
default:
driver: bridge
- 简单说明
通过traefik 提供统一的访问入口,每个prometheus 都关联一个thanos sidecar,启动包含了一个简单的domain_exporter 方便测试的
每个prometheus 通过静态配置的方式,添加了服务的监控,对于对象存储使用了开源的minio,注意如果需要让store启动成功,需要
进入minio创建对应的bucket
启动&&测试
- 启动
docker-compose up -d
- 创建minio bucket

为了保证store 启动成功,需要再运行下docker-compose up -d storer
- 效果
统一入口(thanos 提供),界面如原生prometheus 基本一样,都是有差异,比如去重,还有就是status 中关于服务发现以及rule target 的配置没了
(因为thanos 统一处理了,不需要了) 
原有prometheus 界面(可以通过9090,9091 查看) 
grafana 界面 
说明:
对于grafana prometheus 的配置,我们不使用以前的,直接使用thanos 提供的就可以了,配置如下: 
minio 对象存储对于metrics 的存储(方便长时间的metrics 存储以及查询) 
说明
以上是一个简单的docker-compose部署,从使用上对于thanos有一个简单的了解,学习简单的使用,更多的关于个组件的详细细节还需要查看
官方文档学习。
参考资料
https://github.com/mattbostock/timbala
https://github.com/cortexproject/cortex
https://github.com/thanos-io/thanos
https://github.com/influxdata/influxdb
https://github.com/m3db/m3
https://github.com/rongfengliang/thanos-playground
Thanos prometheus 集群以及多租户解决方案docker-compose 试用(一)的更多相关文章
- Prometheus集群介绍-1
Prometheus监控介绍 公司做教育的,要迁移上云,所以需要我这边从零开始调研加后期维护Prometheus:近期看过二本方面的prometheus书籍,一本是深入浅出一般是实战方向的:官方文档主 ...
- 负载均衡集群中的session解决方案【转】
通常面临的问题 从用户端来解释,就是当一个用户第一次访问被负载均衡代理到后端服务器A并登录后,服务器A上保留了用户的登录信息:当用户再次发送请求时, 根据负载均衡策略可能被代理到后端不同的服务器,例如 ...
- 【MySQL】MySQL-主从复制-集群方案-数据一致性问题解决方案 && MySQL备份的各种姿势
1.写性能如何保证:分库分表 2.读性能如何保证:主从结构,实时备份 3.一致性问题怎么解决: 3.1.微博案例:Redis缓存,热数据查询走Redis,主从的延迟通过Redis消除 3.2.支付宝的 ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之集群部署环境规划(一)
0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.环境规划 软件 版本 ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之部署master/node节点组件(四)
0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 1.部署master组件 ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录
0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.感谢 在此感谢.net ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之自签TLS证书及Etcd集群部署(二)
0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.服务器设置 1.把每一 ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之flanneld网络介绍及部署(三)
0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.flanneld介绍 ...
- quartz集群分布式(并发)部署解决方案-Spring
项目中使用分布式并发部署定时任务,多台跨JVM,按照常理逻辑每个JVM的定时任务会各自运行,这样就会存在问题,多台分布式JVM机器的应用服务同时干活,一个是加重服务负担,另外一个是存在严重的逻辑问题, ...
随机推荐
- Java学习:List接口
List接口 java.util.list接口 extends Collection接口 List接口的特点: 有序的集合,存储元素和取出元素的顺序是一致的(存储123 取出123) 有索引,包含了一 ...
- MOOC 数据库笔记(五):关系演算
关系演算 概述 (这部分的内容大多与离散数学有关,我没有相关基础,所以现在只是简单看一下) 关系演算是以数理逻辑中的谓词演算为基础的. 关系演算是描述关系运算的另一种思维方式. SQL语言是继承了关系 ...
- phpstorm 2016.3.2 的最新破解方法
v2.0 最新的方式 第一:下载PHPStorm20173.2:(下载链接:windows) 第二:直接用浏览器打开 http://idea.lanyus.com/ ,点击页面中的“获得注册码”,然后 ...
- 更新.net core 3.0,dotnet ef命令无法使用的解决办法
之前项目采用.net core 2.2 实现,今天更新vs2019,系统.net core也被升级到3.0,在cmd中使用dotnet ef命令出现 “无法执行,因为找不到指定的命令或文件.可能的原因 ...
- Python 的 12 个学习方式
Python 是世界上最受欢迎的编程语言之一,它受到了全世界各地的开发者和创客的欢迎.大多数 Linux 和 MacOS 计算机都预装了某个版本的 Python,现在甚至一些 Windows 计算机供 ...
- 30、filter数组去重
eg: let arr=[1,0,0,9,7,7,5,2] let data=arr.filter((item,index,self)=> self.indexOf(item)===index ...
- 解决Ubuntu18.10 网络图标经常消失连不上网问题
我不知道是什么原因,Ubuntu虚拟机经常会出现无法上网的问题? 此时右上角没有网络标志,Settings->NetWork也只有VPN一项,不知道咋用. 在网上终于找到了方法,亲测有效:htt ...
- 财产PROPRETIE英语PROPRETIE房地产
property Alternative forms propretie English English Wikipedia has articles on: Property (disambigua ...
- android启动时间慢的问题
[转]对于Android的性能这方面评估,大部分都是有超级兔子去比跑分的,还是不能反映全面的问题.就我知道的而言,应用启动时间是很影响用户体验的一个性能方面问题. 最近的一个项目,别人都说应用启动慢 ...
- MongoDB的集群模式--Sharding(分片)
分片是数据跨多台机器存储,MongoDB使用分片来支持具有非常大的数据集和高吞吐量操作的部署. 具有大型数据集或高吞吐量应用程序的数据库系统可能会挑战单个服务器的容量.例如,高查询率会耗尽服务器的CP ...