关于thanos的介绍可以参考这篇官方博客的翻译文档,本文不作部署操作介绍。下图是thanos的官方架构图,主要有5个组件:

  • Query:可以近似看作是Prometheus的实现,用于采集其他组件的数据,如sidecar和store gateway。Query的UI与Prometheus基本相同。
  • Store  Gateway:用于获取来自对象存储的历史数据,它使得Query可以获取历史数据,并通过Grafana展示。
  • Compact:用于历史数据的压缩和降准采样,提高在Grafana上执行Zoom-in/Zoom-out时的效率。
  • Ruler:配置告警相关的内容,Ruler的UI与Alertmanager原生的UI基本相同。
  • Sidecar:与Prometheus部署,一来为Query提供未持久化到对象存储的数据;二来将超期的数据持久化到对象存储。

通常thanos管理多集群时,除Sidecar组件需要在每个集群内部署,其余组件仅部署一份,用于处理多个集群的数据。需要注意的是,thanos的StoreAPI采用的是gRPC协议,只能走四层通信,像在openshift 3.11版本下无法通过router(ingress)暴露给集群外部的Query等组件。规避办法为采用nodePort方式暴露,但通常nodePort并不是一个很好的方式,因为它占用了主机的端口。

从使用上看,thanos使用上最主要的作用就是实现了数据的持久化以及历史数据的提取,其实现的StoreAPI也可以作为可移植的功能。

TIPS:

  • 目前thanos还不能支持阿里OSS,但很快会支持,代码合入进展可以参考该PR,如果有需要,可以从dockerhub上下载我自己打包的镜像。oss配置文件如下:
type: ALIYUNOSS
config:
endpoint: ""
bucket: ""
access_key_id: ""
access_key_secret: ""
  • 可以在源码中使用make build编译源码
  • 可以使用下述校验对象存储状态,如thanos bucket ls --objstore.config-file=/etc/thanos/oss.yml 列出所有的bucket信息
  bucket verify [<flags>]
Verify all blocks in the bucket against specified issues bucket ls [<flags>]
List all blocks in the bucket bucket inspect [<flags>]
Inspect all blocks in the bucket in detailed, table-like way
  • Query,Ruler,Store_Gateway和Compact的docker-compose启动方式可以参考如下yaml文件
version: '3.1'

volumes:
grafana_data: {}
minio_data: {}
store_data: {}
compactor_data: {} services:
thanos-querier:
image: ${thanos-image}
extra_hosts:
- "{$bucket_name}.${oss_backend}:${oss_backend_ip}}" #ali-yun需要添加这一行解析
- "${oss_backend}:${oss_backend_ip}}"
command:
- 'query'
- '--grpc-address=0.0.0.0:10901' # Query storeAPI
- '--http-address=0.0.0.0:10902' # Query UI
- '--query.replica-label=replica'
- '--store=${prometheus_sidecar_lb}:${prometheus_sidecar_lb_port}'
- '--store=thanos-store-gateway:10901'
privileged: true
ports:
- :
restart: always thanos-store-gateway:
image: ${thanos-image}
extra_hosts:
- "{$bucket_name}.${oss_backend}:${oss_backend_ip}}"
- "${oss_backend}:${oss_backend_ip}}"
volumes:
- ./thanos/:/etc/thanos/
- store_data:/data
command:
- 'store'
- '--grpc-address=0.0.0.0:10901'
- '--http-address=0.0.0.0:10902'
- '--data-dir=/data'
- '--objstore.config-file=/etc/thanos/bucket_config.yaml' # Object store config file
privileged: true
restart: always thanos-compactor:
image: ${thanos-image}
extra_hosts:
- "{$bucket_name}.${oss_backend}:${oss_backend_ip}}"
- "${oss_backend}:${oss_backend_ip}}"
volumes:
- ./thanos/:/etc/thanos/
- compactor_data:/data
command:
- 'compact'
- '--log.level=debug'
- '--data-dir=/data'
- '--objstore.config-file=/etc/thanos/bucket_config.yaml'
- '--http-address=0.0.0.0:10902'
- '--wait'
privileged: true
restart: always grafana:
image: ${grafana-image}
user: ""
ports:
- :
volumes:
- grafana_data:/var/lib/grafana
restart: always thanos-ruler:
image: ${thanos-image}
volumes:
- ./thanos/:/etc/thanos/
command:
- 'rule'
- '--grpc-address=0.0.0.0:10901' # Ruler Store API
- '--http-address=0.0.0.0:10902' # Ruler UI
- '--log.level=debug'
- '--data-dir=/data'
- '--eval-interval=15s'
- '--query=thanos-querier:10902'
- '--alertmanagers.url=http://alertmanager:9093'
- '--rule-file=/etc/thanos/*.rules.yaml'
- '--objstore.config-file=/etc/thanos/bucket_config.yaml'
- "--label=monitor_cluster=\"poc-ocp01\""
- "--label=replica=\"r1\""
ports:
- :
privileged: true
depends_on:
- thanos-querier
restart: always alertmanager:
image: ${alertmanager-image}
ports:
- :
volumes:
- ./thanos/:/etc/alertmanager/
restart: always
privileged: true
command:
- '--data.retention=120h'
- '--web.listen-address=0.0.0.0:9093'
- '--config.file=/etc/alertmanager/alertmanager.yaml'
- '--storage.path=/alertmanager'

TIPS:

  • 创建alertmanager高可用集群可以参见这里
  • prometheusruler都需要配置external label,否则可能会出现数据冲突
  • store-gateway可能会发生OOM,可以尝试使用--max-time命令限制查找的metric的范围。参见该issue
  • compactor建议配置--consistencyDelay参数,防止由于畸形报文导致compactor崩溃

使用thanos管理Prometheus持久化数据的更多相关文章

  1. 从零入门 Serverless | Serverless 应用如何管理日志 & 持久化数据

    作者 | 竞霄 阿里巴巴开发工程师 本文整理自<Serverless 技术公开课>,关注"Serverless"公众号,回复"入门",即可获取 Se ...

  2. 解决持久化数据太大,单个节点的硬盘无法存储的问题;解决运算量太大,单个节点的内存、CPU无法处理的问题

    需要学习的技术很多,要自学新知识也不是一件容易的事,选择一个自己比较感兴趣的会是一个比较好的开端,于是,打算学一学分布式系统. 带着问题,有目的的学习,先了解整体架构,在深入感兴趣的细节,这是我的计划 ...

  3. [Docker] 容器持久化数据的首选机制 Volume

    Volume 是 docker 容器生成持久化数据的首选机制.bind mounts 依赖主机机器的目录机构,volume 完全由 docker 管理.volume 较 bind mounts 有几个 ...

  4. 解决Vuex刷新页面数据丢失问题 ---- vuex-persistedstate持久化数据

    何为Vuex?用处是什么?为什么刷新丢失? Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化 ...

  5. Docker 基础知识 - 使用卷(volume)管理应用程序数据

    卷(volumes)是 Docker 容器生产和使用持久化数据的首选机制.绑定挂载(bind mounts)依赖于主机的目录结构,卷(volumes)完全由 Docker 管理.卷与绑定挂载相比有几个 ...

  6. 使用ehcache持久化数据到磁盘 并且在应用服务器重启后不丢失数据

    使用ehcache时如何持久化数据到磁盘,并且在应用服务器重启后不丢失数据1.如何持久化到磁盘使用cache.flush(),每次写入到cache后调用cache.flush() ,这样ehcache ...

  7. 管理我的数据之GDBM

    管理我的数据之GDBM 作者 He YiJun – storysnail<at>gmail.com 团队 ls 版权 转载请保留本声明! 本文档包含的原创代码根据General Publi ...

  8. 完整的定时任务解决方案Spring集成+定时任务本身管理+DB持久化+集群

    完整的定时任务解决方案Spring集成+定时任务本身管理+DB持久化+集群 maven依赖 <dependency> <groupId>org.quartz-scheduler ...

  9. Windows Server 2008R2配置MySQL Cluster并将管理节点和数据节点配置成windows服务

    说明:将mysql的管理节点和数据节点配置成windows服务是为了防止有人手误关闭管理节点或数据节点的dos命令窗口,管理节点或数据节点的命令窗口误关闭可能会造成mysql某台或某几台mysql不能 ...

随机推荐

  1. CentOS6 + MapServer7.4编译

    先升级gcc 1.python3.6 ./configure --enable-shared --enable-profiling make –j 20 make install 2.proj-4.9 ...

  2. python计算不规则图形面积算法

    介绍:大三上做一个医学影像识别的项目,医生在原图上用红笔标记病灶点,通过记录红色的坐标位置可以得到病灶点的外接矩形,但是后续会涉及到红圈内的面积在外接矩形下的占比问题,有些外接矩形内有多个红色标记,在 ...

  3. Linux 配置程序包源 Nuget

    编辑文件NuGet.Config vi ~/.nuget/NuGet/NuGet.Config 新增源 <add key="fz" value="http://19 ...

  4. vue实现word,pdf文件的导出功能

    vue实现word或pdf文档导出的功能,我的项目是:后端返回一个文档流(下图),然后前端对文档流做处理进行下载,代码如下: import axios from 'axios'; axios.get( ...

  5. AOD.NET实现数据库事物Transaction

    在开始介绍文章主要内容前先简单说一下事务 1.事务介绍 事务是一种机制.是一种操作序列,它包含了一组数据库操作命令,这组命令要么全部执行,要么全部不执行.因此事务是一个不可分割的工作逻辑单元.在数据库 ...

  6. AI 的架构与核心

    AI 的架构 人工智能的架构分为三层:应用层.技术层和基础层. 应用层聚焦在人工智能和各行业各领域的结合.技术层是算法.模型和技术开发.基础层则是计算能力和数据资源. 数据收集:获取什么类型的数据,数 ...

  7. jQuery中$符号的作用

    jQuery中$符号的作用 1.查找作为jQuery包装器,利用选择器来选择DOM元素(这个也是最强大的功能) 例如:$("table tr:nth-child(even)") 基 ...

  8. Django 简单的验证码

    创建一个 Django 项目:yanzhengma 和 应用 app01 修改 urls.py 文件 from django.contrib import admin from django.urls ...

  9. 服务器CPU很高,频繁FullGC排查小总结

    可以分为如下步骤: ①通过 top 命令查看 CPU 情况,如果 CPU 比较高,则通过 top -Hp 命令查看当前进程的各个线程运行情况. 找出 CPU 过高的线程之后,将其线程 id 转换为十六 ...

  10. 7、Topic

    Topics In the previous tutorial we improved our logging system. Instead of using a fanout exchange o ...