云原生时代,如何构建高效分布式监控系统

文章目录

  • 一.监控现状
  • 二.Thanos原理分析
    • Sidecar
    • Querier
    • Store
    • Compactor
  • 三.Sidecar or Receiver
    • Thanos Receiver工作原理
  • 四.分布式运维架构

一.监控现状

Prometheus是CNCF基金会管理的一个开源监控项目,由于其良好的架构设计和完善的生态,迅速成为了监控领域事实上的标准,尤其是在云原生领域。
Prometheus的优势有很多,服务自动发现,社区众多exporter基本涵盖了所有的开源软件,与k8s深度结合。对于一家小型公司,Prometheus够用了,足以应对所有监控需求。
但随着监控数据量的不断增多,Prometheus的局限性逐渐显现出来了:

  1. 扩展性差,Prometheus自身的TSDB是一个单机的数据库,不支持分布式
  2. 扩展性差的第二个方面在于Prometheus对大量metrics的数据分析能力很差,内存使用 量成线性增长
  3. Prometheus不支持降采样,单机存储捉襟见肘

Prometheus社区也意识到了这个问题,因此推出了prometheus高可用的解决方案—Thanos

二.Thanos原理分析

分层是一个很好的思想,如果划分一层解决不了的问题,利用分层的思想能将复杂问题化整为零。

长短期指标分离:短期指标用来提供给告警系统高频查询近期数据,长期指标用来提供给人查询时间集。在这里插入图片描述
Thanos架构图如上图所示,主要由四个组件组成:Querier、Slidercar、Store和Compactor。

Sidecar

每个Prometheus节点都配置了一个Sidecar组件,通过k8s的部署可以将Prometheus和Sidecar容器集成到一个容器中,Sidecar主要有两个作用和一个后来新增的可选功能,一是用来代理Querier对Prometheus本地数据的读取;二是将Prometheus本地的监控数据(一般是未压缩的块)通过对象存储接口保存到对象存储中,Sidecar每30s读取一次本地元数据,看是否有新的监控数据产生,如果有则读取本地数据块将其上传到对象存储,标记最新的读取时间并且通过本地的JSON文件保存相关信息,包含块的元信息,例如统计信息,时间范围和压缩机制,避免重复上传。

Querier

Querier是Thanos实现多集群监控以及全局视图的关键。Querier接收HTTP的PromQL查询,组件负责数据查询汇聚,查询流程如下图:
简而言之,就是从基础StoreAPI查询所需的数据返回结果。Querier是完全无状态的并且可以水平扩展。Thanos Querier本质上允许在单个Prometheus Query端点下聚合和可选地对多个度量后端进行重复数据删除。对于Querier来说,可以整个Store API的所有内容,因此可以从任意数量的不同存储中聚合数据,例如:* Prometheus(需要包含Sidecar) * 对象存储 * 记录规则和警报规则 * 符合Promtheus远程读写的标准的数据库 * 另外一个Querier * 非Prometheus系统,例如OpenTSDB Querier不仅可以从多个后端获取数据,将他们汇总还可以对其中的重复数据删除,必须为整个集群选择固定的单个或多个副本标签,然后在启动时将其传递给查询节点。仅通过给定副本标签区分的两个或多个序列将合并为一个时间序列。这也掩盖了单个数据源收集方面的差距。
在这里插入图片描述

Store

Store在对象存储中的历史数据之上实现StoreAPI,使对象存储中的数据可以作为Querier查询的后端。Store主要有两个作用,一个在对象存储中数据实现StoreAPI,使对象存储中的数据可以被查询,二是充当一个API网关,可以负责所有StoreAPI的服务发现,因此Store不需要大量的本地磁盘空间。它在启动的时候加入Thanos集群,并发布它可以安全访问的数据。他在本地磁盘上保留有关所有远程块的少量信息,并使它与桶同步。

Compactor

Compator是一个批处理组件,主要针对对象存储的数据压缩,可以将历史的小对象(block,块)合并压缩成大文件对象,对其数据并且删除这些小文件,从而节省存储占用。
Compator是Thanos实现无限存储的关键组件。

Compator主要有两个作用,一个是负责对数据的压缩,另一个是负责历史数据的降准。

三.Sidecar or Receiver

Thanos支持两种方式与Prometheus集成:Sidecar和Receiver
Thanos Sidecar工作原理
在这里插入图片描述
如上图所示,为了实现高可用,Prometheus实例与sidecar组件一起运行,sidecar每隔一段时间抓取prometheus数据,存储在对象存储中。此外Sidecar在Prometheus的远程读API上实现了Thanos的Store API,从而可以从Thanos Queries组件中查询Prometheus的数据。因此 Queries组件在Store API中查询历史数据,最新未上传数据可通过Sidecar查询下层Prometheus数据。

Thanos Receiver工作原理

在这里插入图片描述
Receiver 是作为一个单独的 StatefulSet 来运行的,在这种方法中,Thanos 的所有其他组件都以与 Sidecar 方式相同的方式存在和运行,但 Receiver 取代了 Sidecar 组件,TSDB 的查询和传输到对象存储的方式发生了巨大的变化。

Receiver 组件实现了 Prometheus 的远程写 API,直接接收 Prometheus 的数据,Receiver 将数据上传到对象存储 Bucket 中去,并且也有自己的保留期,Querier 被配置为通过 Store 查询 Receiver 和存储桶上的数据。
Receiver 则是基于 push 的模式,TSDB 由 Prometheus 实例本身远程写入到 Receiver,从而使 Prometheus 最接近无状态。然后数据从 Receiver 进一步上传到对象存储。

结论:具体应该选用哪种类型,要根据具体的业务场景:如果Sidecar数量非常多且Sidecar距离Queries比较远,每次查询Querise都会调用Sidecar,会消耗很多资源,并且速度很慢,而我们看监控大多数都是看最新的数据。
而Receiver模式下,数据实时push到Receiver组件中,Querise组件无需去sidecar中查询最新数据了。但这种模式下大量的数据汇总到Receiver组件,也会增加Receiver的压力,需要给Receiver较多的计算和存储资源。当然设计这个组件时肯定会考虑这个问题,Receiver 实现了一致性哈希,支持集群部署,所以即使规模很大也不会成为性能瓶颈。
没有完美的方案,具体应用哪种模式,需要我们压测和取舍。

四.分布式运维架构

上一节我们了解了Thanos的力量和能力,总结一下:Thanos提供了可靠、低成本的规模化历史数据存储,在上层提供了统一的全局查询视图,通过降准采样特性满足长时间范围的数据查询分析,全局的告警规则。特别适合集团—子公司这种数据架构的应用场景

注意⚠️:Thanos的每个组件都可以部署多个副本,实现高可用
我们通过架构图描述整个的监控架构
在这里插入图片描述

Thanos部署实战可参考:
http://www.dockone.io/article/10053
https://blog.csdn.net/csdnzxm/article/details/120279085

参考文档:
http://dockone.io/article/9988
http://dockone.io/article/6019
https://mp.weixin.qq.com/s/YFx1cY5IsrcHzXFEEu8Z6A
https://zhuanlan.zhihu.com/p/383969247
https://blog.csdn.net/csdnzxm/article/details/120279085
https://blog.csdn.net/u012140251/article/details/121454958

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/893482.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DAY3,模拟终端

题目 实现一个终端的功能,注意需要带有cd功能 思路 如何 C语言执行shell命令? 使用进程替换exec函数;;使用system函数。 如何 切换工作目录? 使用chdir函数切换工作目录。 其…

一键视频转文字/音频转文字,浏览器右键提取B站视频文案,不限时长免费无限次可用

上篇文章阿虚分享了自己的「短视频」笔记方案 短视频文件小,易存储,所以阿虚建议是直接将原视频插入到笔记当中 而长视频文件大,很难像短视频一样操作。阿虚之前的建议是提取重要部分视频转长截图,或者视频转GIF 但上述方案仔细…

【C++】详细讲解继承(上)

C面向对象的三大特性:封装,继承,多态。现在我们就介绍一下继承。 1.继承的概念及定义 1.1 继承的概念 继承机制是⾯向对象程序设计使代码可以 复⽤ 的最重要的⼿段。我们前面接触到的都是 函数 层次的复用,遇到过的 类 层次的复…

AIGC专栏18——EasyAnimateV5.1版本详解 应用Qwen2 VL作为文本编码器,支持轨迹控制与相机镜头控制

AIGC专栏18——EasyAnimateV5.1版本详解 应用Qwen2 VL作为文本编码器,支持轨迹控制与相机镜头控制 学习前言相关地址汇总源码下载地址HF测试链接MS测试链接 测试效果Image to VideoText to Video轨迹控制镜头控制 EasyAnimate详解技术储备Qwen2 VLStable Diffusion …

1905电影网中国地区电影数据分析(一) - 数据采集、清洗与存储

文章目录 前言一、数据采集步骤及python库使用版本1. python库使用版本2. 数据采集步骤 二、数据采集网页分析1. 分析采集的字段和URL1.1 分析要爬取的数据字段1.2 分析每部电影的URL1.2 分析每页的URL 2. 字段元素标签定位 三、数据采集代码实现1. 爬取1905电影网分类信息2. 爬…

【25】Word:林涵-科普文章❗

目录 题目​ NO1.2.3 NO4.5.6 NO7.8 NO9.10 NO11.12 不连续选择:按住ctrl按键,不连续选择连续选择:按住shift按键,选择第一个,选择最后一个。中间部分全部被选择 题目 NO1.2.3 布局→纸张方向:横向…

P6周:VGG-16算法-Pytorch实现人脸识别

🍨 本文为🔗365天深度学习训练营中的学习记录博客🍖 原作者:K同学啊 我的环境 语言环境:Python 3.8.12 编译器:jupyter notebook 深度学习环境:torch 1.12.0cu113 一、前期准备 1.设置GPU im…

【Rust自学】14.4. 发布crate到crates.io

喜欢的话别忘了点赞、收藏加关注哦(加关注即可阅读全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 14.4.1. 创建并设置crates.io账号 在发布任何 crate 之前,你需要在 crates.io并…

数据结构——实验八·学生管理系统

嗨~~欢迎来到Tubishu的博客🌸如果你也是一名在校大学生,正在寻找各种编程资源,那么你就来对地方啦🌟 Tubishu是一名计算机本科生,会不定期整理和分享学习中的优质资源,希望能为你的编程之路添砖加瓦⭐&…

IBM湖仓一体与向量数据库:访问MinIO控制台(Accessing the MinIO console)

_1、从密钥中复制S3凭证并保存 (Copy the S3 credentials from the secret and save it ) oc extract secret/ibm-lh-config-secret -n ${PROJECT_CPD_INST_OPERANDS} --to- --keysenv.properties | grep -E "LH_S3_ACCESS_KEY|LH_S3_SECRET_KEY&q…

Ragas-RAG能力评测

Ragas是一个框架,它可以帮助你从不同的方面评估你的问答(QA)流程。它为你提供了一些指标来评估你的问答系统的不同方面,具体包括: 评估检索(context)的指标:提供了上下文相关性&…

基于ESP32-IDF驱动GPIO输出控制LED

基于ESP32-IDF驱动GPIO输出控制LED 文章目录 基于ESP32-IDF驱动GPIO输出控制LED一、点亮LED3.1 LED电路3.2 配置GPIO函数gpio_config()原型和头文件3.3 设置GPIO引脚电平状态函数gpio_set_level()原型和头文件3.4 代码实现并编译烧录 一、点亮LED 3.1 LED电路 可以看到&#x…

使用ffmpeg提高mp4压缩比,减小文件体积【windows+ffmpeg+batch脚本】

文章目录 关于前情提要FFmpeg是什么使用脚本运行FFmpeg首先,下载ffmpeg.exe然后在视频相同位置写一个bat脚本运行压缩脚本 关于 个人博客,里面偶尔更新,最近比较忙。发一些总结的帖子和思考。 江湖有缘相见🤝。如果读者想和我交…

Vue3初学之Element Plus Dialog对话框,Message组件,MessageBox组件

Dialog的使用&#xff1a; 控制弹窗的显示和隐藏 <template><div><el-button click"dialogVisible true">打开弹窗</el-button><el-dialogv-model"dialogVisible"title"提示"width"30%":before-close&qu…

自然语言处理(NLP)-总览图学习

文章目录 自然语言处理&#xff08;NLP&#xff09;-总览图学习1.一张总览图的学习1. 语音学&#xff08;Phonology&#xff09;2. 形态学&#xff08;Morphology&#xff09;3. 句法学&#xff08;Syntax&#xff09;4. 语义学&#xff08;Semantics&#xff09;5. 推理&#…

机器学习 vs 深度学习

目录 一、机器学习 1、实现原理 2、实施方法 二、深度学习 1、与机器学习的联系与区别 2、神经网络的历史发展 3、神经网络的基本概念 一、机器学习 1、实现原理 训练&#xff08;归纳&#xff09;和预测&#xff08;演绎&#xff09; 归纳: 从具体案例中抽象一般规律…

谈谈RTMP|RTSP播放器视频view垂直|水平反转和旋转设计

技术背景 我们在做RTMP|RTSP播放器的时候&#xff0c;有这样的技术诉求&#xff0c;有的摄像头出来的数据是有角度偏差的&#xff0c;比如“装倒了”&#xff0c;或者&#xff0c;图像存在上下或者左右反转&#xff0c;这时候&#xff0c;就需要播放器能做响应的处理&#xff…

论文阅读--Qwen22.5技术报告

Qwen2 1 引言 所有模型都是在超过7 trillion token&#xff08;7万亿&#xff09;的高质量、大规模数据集上预训练的 2 Tokenizer & Model 2.1 Tokenizer 沿用Qwen&#xff08;Bai等人&#xff0c;2023a&#xff09;的做法&#xff0c;我们采用了基于字节级字节对编码…

FPGA中场战事

2023年10月3日,英特尔宣布由桑德拉里维拉(Sandra Rivera)担任“分拆”后独立运营的可编程事业部首席执行官。 从数据中心和人工智能(DCAI)部门总经理,转身为执掌该业务的CEO,对她取得像AMD掌门人苏姿丰博士类似的成功,无疑抱以厚望。 十年前,英特尔花费167亿美元真金白银…

【jmeter】下载及使用教程【mac】

1.安装java 打开 Java 官方下载网站https://www.oracle.com/java/technologies/downloads/选择您想要下载的 Java 版本&#xff0c;下载以 .dmg 结尾的安装包&#xff0c;注意 JMeter 需要 Java 8下载后打开安装包点击“安装”按钮即可 2.下载jmeter 打开 Apache JMeter 官方…