使用thanos管理Prometheus持久化数据
关于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:
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高可用集群可以参见这里
- prometheus和ruler都需要配置external label,否则可能会出现数据冲突
- store-gateway可能会发生OOM,可以尝试使用--max-time命令限制查找的metric的范围。参见该issue
- compactor建议配置--consistencyDelay参数,防止由于畸形报文导致compactor崩溃
使用thanos管理Prometheus持久化数据的更多相关文章
- 从零入门 Serverless | Serverless 应用如何管理日志 & 持久化数据
作者 | 竞霄 阿里巴巴开发工程师 本文整理自<Serverless 技术公开课>,关注"Serverless"公众号,回复"入门",即可获取 Se ...
- 解决持久化数据太大,单个节点的硬盘无法存储的问题;解决运算量太大,单个节点的内存、CPU无法处理的问题
需要学习的技术很多,要自学新知识也不是一件容易的事,选择一个自己比较感兴趣的会是一个比较好的开端,于是,打算学一学分布式系统. 带着问题,有目的的学习,先了解整体架构,在深入感兴趣的细节,这是我的计划 ...
- [Docker] 容器持久化数据的首选机制 Volume
Volume 是 docker 容器生成持久化数据的首选机制.bind mounts 依赖主机机器的目录机构,volume 完全由 docker 管理.volume 较 bind mounts 有几个 ...
- 解决Vuex刷新页面数据丢失问题 ---- vuex-persistedstate持久化数据
何为Vuex?用处是什么?为什么刷新丢失? Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化 ...
- Docker 基础知识 - 使用卷(volume)管理应用程序数据
卷(volumes)是 Docker 容器生产和使用持久化数据的首选机制.绑定挂载(bind mounts)依赖于主机的目录结构,卷(volumes)完全由 Docker 管理.卷与绑定挂载相比有几个 ...
- 使用ehcache持久化数据到磁盘 并且在应用服务器重启后不丢失数据
使用ehcache时如何持久化数据到磁盘,并且在应用服务器重启后不丢失数据1.如何持久化到磁盘使用cache.flush(),每次写入到cache后调用cache.flush() ,这样ehcache ...
- 管理我的数据之GDBM
管理我的数据之GDBM 作者 He YiJun – storysnail<at>gmail.com 团队 ls 版权 转载请保留本声明! 本文档包含的原创代码根据General Publi ...
- 完整的定时任务解决方案Spring集成+定时任务本身管理+DB持久化+集群
完整的定时任务解决方案Spring集成+定时任务本身管理+DB持久化+集群 maven依赖 <dependency> <groupId>org.quartz-scheduler ...
- Windows Server 2008R2配置MySQL Cluster并将管理节点和数据节点配置成windows服务
说明:将mysql的管理节点和数据节点配置成windows服务是为了防止有人手误关闭管理节点或数据节点的dos命令窗口,管理节点或数据节点的命令窗口误关闭可能会造成mysql某台或某几台mysql不能 ...
随机推荐
- 记netmvc中Html.BeginForm的一个大坑
在asp.net mvc中,很常使用using(Html.BeginForm()){}来生成表单提交 不传入参数时,默认提交到原始url 最坑的是,此表单自动提交时,会将所在页面的原始url的参数也一 ...
- Python分页
# -*-coding:utf-8-*- # Author:Ds from django.utils.safestring import mark_safe from django.http.requ ...
- 快速上手Mac效率神器Alfred以及Alfred常用操作
前言 Alfred,想必大家就算没用过也耳闻过.Alfred是一个让你可以丢掉鼠标的神器.很多读者可能之前认为Alfred的学习成本高,或者感觉它太复杂,而望之却步.其实Alfred并非高不可攀,本文 ...
- Qt播放音视频文件报错DirectShowPlayerService::doRender: Unresolved error code 0x80040266或DirectShowPlayerService::doSetUrlSource: Unresolved error code 0x80004005 ()
使用QMediaPlayer和QVideoWidget QHBoxLayout *m_layout=newQHBoxLayout(this); QMediaPlayer *m_player = new ...
- 7.InfluxDB-InfluxQL基础语法教程--INTO子句
本文翻译自官网,官网地址:(https://docs.influxdata.com/influxdb/v1.7/query_language/data_exploration/) 通过INTO子句,可 ...
- Jmeter在chrome浏览器中录制脚本
利用blazemeter插件可以录制chrome浏览器中的操作,并生成jmx文件,导入到jmeter中使用 1. 下载blazemeter 地址:https://pan.baidu.com/s/1V ...
- 数据库操作之DBUtils
概述 DBUtils是Java编程中的数据库操作实用工具,小巧简单实用. DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码. DBUtils三个核心功能介绍 QueryRunne ...
- CF704D Captain America(上下界网络流)
传送门 题意: 二维平面给出\(n\)个点,现在可以给每个点进行染色,染红色的代价为\(r\),染蓝色的代价为\(b\). 之后会有\(m\)个限制,形式如:\(t_i\ l_i\ d_i\),当\( ...
- Appium基础:Desired Capabilities详讲
Desired Capabilities在启动session的时候是必须提供的,先看如下代码: Desired Capabilities本质上是key value的对象,他告诉appium serve ...
- 201871010112-梁丽珍《面向对象程序设计(java)》第十一周学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...