Promethues 之 Thanos
Promethues简介和原理
请看我之前写的 Prometheus简介,原理和安装
https://www.cnblogs.com/you-men/p/12839535.html
官方架构问题
官方架构存在一个最大的问题数据量一上去需要尽快拆分,例如在使用中发现Es的Export会拉取大量metrics直接导致单机Prom不堪重负「io巨高」当然指标太多也不是好事这个会在最后讨论下如果避免,所以需要拆分集群「此处不讨论官方的联邦策略,这个扩展性并没有那么好,依然需要拆分多套联邦集群」
顺着正常思路我们一定是先拆分集群,我也没有逃出这个方法开始着手拆分,拆了历史数据还在老集群还要搬数据大量的Ops工作啊「哪怕写了自动化脚本,回车还是要人敲的吧」,拆完了看着不错哦,但是另外的问题来了,要通知Dev我们拆了地址变了,随之而来的是大量的通知「心很累」。metrics还是很多总不能没事就拆吧,而且历史保留时间我们是7天慢慢发现用户要查7天前的就再见了「无法支持」。
当然我们也有联邦集群,在联合部署中,全局Prometheus服务器可以在其他Prometheus服务器上聚合数据,这些服务区可能分布在多个数据中心。每台服务器只能看到一部分度量指标。为了处理每个数据中心的负载,可以在一个数据中心内运行多台Prometheus服务器,并进行水平分片。在分片设置中,从服务器获取数据的子集,并由主服务器对其进行聚合。在查询特定的服务器时,需要查询拼凑数据的特定从服务器。默认情况下,Prometheus存储15天的时间序列数据。为了无限期存储数据,Prometheus提供了一个远程端点,用于将数据写入另一个数据存储区。不过,在使用这种方法时,数据去重是个问题。其他解决方案(如Cortex)提供了一个远程写入端点和兼容的查询API,实现可伸缩的长期存储。
综上问题主要是:拆分之痛、全局查询、数据去重、历史数据查询、AlertManager无高可用
**
业务发展快不是Ops推脱的理由,某天躺在床上刷刷微信发现神器尽然已经有了「虽然还只是一个测试版本」Thanos,果断开始调研发现可以啊基本解决了上面提及的多个痛点。「团队中也来两个了新的小伙伴 Go专职研发、监控系统小达人、感谢两位的帮助」心中无比激动,开始动手了。
Thanos是啥
Improbable团队开源了Thanos,一组通过跨集群联合、跨集群无限存储和全局查询为Prometheus增加高可用性的组件。Improbable部署了一个大型的Prometheus来监控他们的几十个Kubernetes集群。默认的Prometheus设置在查询历史数据、通过单个API调用进行跨分布式Prometheus服务器查询以及合并多个Prometheus数据方面存在困难。
Thanos通过使用后端的对象存储来解决数据保留问题。Prometheus在将数据写入磁盘时,边车的StoreAPI组件会检测到,并将数据上传到对象存储器中。Store组件还可以作为一个基于gossip协议的检索代理,让Querier组件与它进行通信以获取数据。
Thanos还提供了时间序列数据的压缩和降采样(downsample)存储。Prometheus提供了一个内置的压缩模型,现有较小的数据块被重写为较大的数据块,并进行结构重组以提高查询性能。Thanos在Compactor组件(作为批次作业运行)中使用了相同的机制,并压缩对象存储数据。Płotka说,Compactor也对数据进行降采样,“目前降采样时间间隔不可配置,不过我们选择了一些合理的时间间隔——5分钟和1小时”。压缩也是其他时间序列数据库(如InfluxDB和OpenTSDB)的常见功能。
Thanos通过一种简单的可无缝接入当前系统的方案解决这些问题。其主要功能点通过Sidecar、Querier、Store和Compactor来实现,这里做一个简单介绍。
+
Tenant's Premise | Provider Premise
|
| +------------------------+
| | |
| +-------->+ Object Storage |
| | | |
| | +-----------+------------+
| | ^
| | S3 API | S3 API
| | |
| | +-----------+------------+
| | | | Store API
| | | Thanos Store Gateway +<-----------------------+
| | | | |
| | +------------------------+ |
| | |
| +---------------------+ |
| | |
+--------------+ | +-----------+------------+ +---------+--------+
| | | Remote | | Store API | |
| Prometheus +------------->+ Thanos Receiver +<-------------+ Thanos Querier |
| | | Write | | | |
+--------------+ | +------------------------+ +---------+--------+
| ^
| |
+--------------+ | |
| | | PromQL |
| User +----------------------------------------------------------------+
| | |
+--------------+ |
+
把Prometheus的数据弄一份存到Min io, Prometheus里面默认保存24小时
Sidecar
Sidecar作为一个单独的进程和已有的Prometheus实例运行在一个server上,互不影响。Sidecar可以视为一个Proxy组件,所有对Prometheus的访问都通过Sidecar来代理进行。通过Sidecar还可以将采集到的数据直接备份到云端对象存储服务器。「会消耗原有实例所在集群的资源,上线前可以先把原有server机器升配下」
Querier
所有的Sidecar与Querier直连,同时Querier实现了一套Prometheus官方的HTTP API从而保证对外提供与Prometheus一致的数据源接口,Grafana可以通过同一个查询接口请求不同集群的数据,Querier负责找到对应的集群并通过Sidecar获取数据。Querier本身也是水平可扩展的,因而可以实现高可部署,而且Querier可以实现对高可部署的Prometheus的数据进行合并从而保证多次查询结果的一致性,从而解决全局视图和高可用的问题。「配合云的AutoScaling」
Store
Store实现了一套和Sidecar完全一致的API提供给Querier用于查询Sidecar备份到云端对象存储的数据。因为Sidecar在完成数据备份后,Prometheus会清理掉本地数据保证本地空间可用。所以当监控人员需要调取历史数据时只能去对象存储空间获取,而Store就提供了这样一个接口。Store Gateway只会缓存对象存储的基本信息,例如存储块的索引,从而保证实现快速查询的同时占用较少本地空间。
Comactor
Compactor主要用于对采集到的数据进行压缩,实现将数据存储至对象存储时节省空间。
Ruler
Ruler主要是管理多个AlertManager告警规则配置统一管理的问题「推荐使用集群版本的AlertManager,多个AlertManager之前放一个SLB即可」
Thanos优点
优点
对比官方的解决方案,这个东西可以支持跨集群查询、数据去重、历史数据查询、告警规则统一管理,当然还有别的大家自己脑补。
Thanos问题
store开始只能查询8次还不记得多少次就不行了,还有查询实例时间长了也不行了,需要注意「让研发哥哥解决了,如何解决的回头再放出来,最近官方新发布,貌似修改的这个问题,需要测试下。」使用的是Ceph「其实s3和oss也是可以的,只要支持s3协议即可」,ceph也有坑「这个我不懂了,有专人盯着的这边不讨论」,sidecar组件如果启动在原有就很忙的Prometheus边上之前需要谨慎「把原有OOM过一次」,建议还是先拆了再搞。此组件已经引起官方关注,预祝早日合并到官方去。
容器外&容器内
大概率的很多同学肯定存在容器外面与容器内部两套环境、或者多容器环境。这边写下不成熟的小建议系统给到各位帮助,实现方法有两种「应该还有更多」,Thanos使用的是Gossip进行自动发现其实在容器内外发现上面还是有点麻烦的。
**前提: **Thanos在容器里面MacVlan模式,Pod分配固定IP,漂移时保持IP不变。「容器网络不懂的,大家自己Google下」
SLB
通过k8s api定时判断thanos所在pod情况,如果发生变化调用云的api进行slb更新。「笨办法」
Cousul
万物揭注册原则,全部注册到cousul上面去「其实还是要自己写一个小东西去完成注册」
指标过多
这个问题其实很纠结,Export吐那么多真的都能看的过来吗,目测不可能,需要在Pull那边做相应的控制,只看自己需要的其实对于Dev要求变高了。自己吐的么更是要精准,我是一个DBA吧很多时候面试都会问我你看那些指标啊,CPU、内存、IO、连接数还不够你看吗,指标不是越多越好谁没事都看一遍「闲得慌吗,存着不是浪费计算资源吗,DevOps的大环境下是不是Dev还是需要一些基本看监控能力呢,不要变成只会打字的研发,不淘汰你淘汰谁呢……」
规范
依然要老生常谈规范这个事情,不要一上来就喊着要秒级监控「真的没必要 谁看啊」,定义到各个指标的命名规范其实比这套东西更为重要 ,让研发去理解其实很难的,大家都被业务压的喘不过气来,还有谁会去接受Ops的东西。
运维平台竟可能融合这套东西中最麻烦的几项比如,添加监控、添加告警尽可能傻瓜式。定义到接口是Pull还是Push,规范最重要,生产线能流畅的运转不是代码写的有多好「当然这个也很重要」,是各个接口之间的规范、文档、代码中的注释、要不换了人撸你代码、搞你系统的时候咋弄。意识习惯才是重要的,技术好坏是个人意识,习惯才是个人修养。
Promethues 之 Thanos的更多相关文章
- Thanos prometheus 集群以及多租户解决方案docker-compose 试用(一)
prometheus 是一个非常不多的metrics 监控解决方案,但是对于ha 以及多租户的处理并不是很好,当前有好多解决方案 cortex Thanos prometheus+ influxdb ...
- April Fools Day Contest 2019 A. Thanos Sort
A. Thanos Sort time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- 使用thanos管理Prometheus持久化数据
关于thanos的介绍可以参考这篇官方博客的翻译文档,本文不作部署操作介绍.下图是thanos的官方架构图,主要有5个组件: Query:可以近似看作是Prometheus的实现,用于采集其他组件的数 ...
- promethues exporter+ grafana 监控pg+mysql
这篇文章本来是打算使用pmm 进行数据库监控的,但是居然参考官方文档使用docker 运行起来有点问题,所以直接改用 exporter 进行处理,但是比pmm 弱好多 pmm 的参考架构 说明,以上图 ...
- Promethues实战-简易教程系列
1.监控概述 2.Promethues基础 3.Promethues初体验
- 使用Thanos实现Prometheus指标联邦
本文来自Rancher Labs Prometheus是CNCF中已经毕业的项目之一,主要用于监控和告警.在Kubernetes生态中,它是应用最为广泛的监控和告警工具之一.Rancher用户可以通过 ...
- 详细教程丨使用Prometheus和Thanos进行高可用K8S监控
本文转自Rancher Labs 介 绍 Prometheus高可用的必要性 在过去的几年里,Kubernetes的采用量增长了数倍.很明显,Kubernetes是容器编排的不二选择.与此同时,Pro ...
- Kubernetes+Promethues+Cloud Alert实践分享
前言 容器集群管理系统 Kubernetes(简称K8s),为容器化的应用提供部署运行.容器编排.负载均衡.服务发现和动态伸缩等一系列完整功能,Prometheus 对 K8s 支持非常棒,能够自动发 ...
- 打造云原生大型分布式监控系统(四): Kvass+Thanos 监控超大规模容器集群
概述 继上一篇 Thanos 部署与实践 发布半年多之后,随着技术的发展,本系列又迎来了一次更新.本文将介绍如何结合 Kvass 与 Thanos,来更好的实现大规模容器集群场景下的监控. 有 Tha ...
随机推荐
- NOI Online #2 提高组 游记
没 NOI Online 1 挂的惨就来写游记吧,不知道为啥 NOI Online 1 民间数据测得 60 分的 T1 最后爆零了... 昏昏沉沉的醒来,吃了早饭,等到 \(8:30\) 进入比赛网页 ...
- 算法——单词拆分 II
给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中.返回所有这些可能的句子. 链接: leetcode. 解题思路 ...
- 使用plesk遇到的问题
按照plesk使用指南中,"快速建站"的部分,配置一番后,还是访问不了网站. 后来解决了,原因如下: 主域名没有解析,只解析了,带www的子域名 80端口没开
- Big Sur 11.0.1 让2K屏幕开启Hidpi
首先来个成果图: 一.复制显示器配置文件 终端输入命令:cd /System/Library/Displays/Contents/Resources/Overrides 接着输入:open . 打开D ...
- Vue 组件化开发的思想体现
现实中的组件化思想化思想体现 标准(同一的标准) 分治(多人同时开发) 重用(重复利用) 组合(可以组合使用) 编程中的组件化思想 组件化规范:Web Components 我们希望尽可能多的重用代码 ...
- Kudu的特点
Kudu的特点 0.原理 列式存储管理器 一个列式存储数据的地方,跟mysql差不多,只是mysql是行式存储. 他是一个集群,能分布式存储. 查询也是写sql语句. 列式存储效率高. 1.为什么会有 ...
- 工具-Redis-与Python一起使用(99.6.3)
@ 目录 1.安装 2.使用 以下为对应的方法 3.使用string为例子 关于作者 1.安装 pip install redis 2.使用 pip install redis from redis ...
- vulstudy靶机搭建(kali)
安装 安装docker apt-get install docker.io //# 安装docker pip install docker-compose //# 安装docker-compose g ...
- 关于ABAP和JSON互相转换
关于ABAP数据结构和JSON格式转换,需要用到标准的类/UI2/CL_JSON一下两个方法, DESERIALIZE是把JSON格式转换成ABAP数据结构,SERIALIZE是把ABAP数据结构转换 ...
- [C#] (原创)一步一步教你自定义控件——05,Label(原生控件)
一.前言 技术没有先进与落后,只有合适与不合适. 自定义控件可以分为三类: 一类是"无中生有".就如之前文章中的的那些控件,都是继承基类Control,来实现特定的功能效果: 一类 ...