当前位置: 首页 > news >正文

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

文章目录

  • 一.监控现状
  • 二.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

相关文章:

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

文章目录 一.监控现状二.Thanos原理分析SidecarQuerierStoreCompactor 三.Sidecar or ReceiverThanos Receiver工作原理 四.分布式运维架构 一.监控现状 Prometheus是CNCF基金会管理的一个开源监控项目,由于其良好的架构设计和完善的生态,迅速成为了监控…...

什么是CIDR技术? 它是如何解决路由缩放问题的

什么是CIDR技术? 它是如何解决路由缩放问题的 一. 什么是 CIDR?二. CIDR 是如何工作的?1. 高效地址分配2. 路由聚合(Route Aggregation)3. 精确满足需求 三. CIDR 的计算详解1. 子网掩码计算2. 地址范围计算3. 可用 IP…...

Unity URP 获取/设置 Light-Indirect Multiplier

Unity URP 获取/设置 Light-Indirect Multiplier 他喵的代码的字段名称叫:bounceIntensity ~~~~~~...

用Python和Tkinter标准模块建立密码管理器

用Python和Tkinter标准模块建立密码管理器 创建一个简单的密码管理器应用程序,帮助用户存储和管理他们的密码。使用Python的tkinter模块来创建一个图形用户界面(GUI)。 本程序支持 添加、查看、搜索、复制、修改、删除 功能。 本程序使用 …...

PyQt5菜单加多页签实现

pyqt tabs标签_哔哩哔哩_bilibili 代码实现 # coding:utf-8 import sys from PyQt5.QtCore import Qt from PyQt5 import QtCore,QtWidgets from PyQt5.QtWidgets import QApplication,QWidget from QhTabs01 import Ui_Form from PyQt5.Qt import *class QhLiangHuaGUI(QWidg…...

关注搜索引擎蜘蛛压力

以前在建站的时候,他们说蜘蛛来抓取的频率越多越好,因为蜘蛛来抓取说明了网站更新速度快,受搜索引擎的欢迎,但是在最近的网站统计中,发现很多蜘蛛爬取的频次非常的高,比如有的蜘蛛一天能来网站几万次&#…...

Python3 OS模块中的文件/目录方法说明三

一. 简介 前面文章简单学习了Python3中 OS模块中的文件/目录的部分函数。 本文继续来学习 OS模块中文件、目录的操作方法:os.fdopen()方法、os.fpathconf() 方法、os.fstat() 方法、os.fstatvfs() 方法。 二. Python3 OS模块中的文件/目录方法说明三 1. os.fdop…...

2024年终总结:技术成长与突破之路

文章目录 前言一、技术成长:菜鸟成长之路1. 学习与实践的结合2. 技术分享与社区交流 二、生活与事业的平衡:技术之外的思考1. 时间管理与效率提升2. 技术对生活的积极影响 三、突破与展望:未来之路1. 技术领域的突破2. 未来规划与目标 四、结…...

mysql-06.JDBC

目录 什么是JDBC: 为啥存在JDBC: JDBC工作原理: JDBC的优势: 下载mysql驱动包: 用java程序操作数据库 1.创建dataSource: 2.与服务端建立连接 3.构造sql语句 4.执行sql 5.关闭连接,释放资源 参考代码: 插…...

使用python调用JIRA6 进行OAuth1认证获取AccessToken

Jira配置应用程序链接 1) 创建应用程序链接 登录 JIRA 管理后台。转到 Administration > Applications > Application Links。在输入框中输入外部应用程序的 URL(例如 GitLab 或自定义应用),然后点击 Create new link。 2) 配置 Con…...

HTML5使用favicon.ico图标

目录 1. 使用favicon.ico图标 1. 使用favicon.ico图标 favicon.ico一般用于作为网站标志,它显示在浏览器的地址栏或者标签上 制作favicon图标 选择一个png转ico的在线网站,这里以https://www.bitbug.net/为例。上传图片,目标尺寸选择48x48&a…...

黑龙江锅包肉:酸甜香酥的东北经典

黑龙江锅包肉:酸甜香酥的东北经典 黑龙江锅包肉,作为东北菜的代表之一,尤其在黑龙江省哈尔滨市享有极高的声誉。这道美食不仅承载着丰富的历史文化内涵,更以其鲜明的地域特色,成为了黑龙江省乃至整个东北地区的标志性菜肴。 历史渊源 锅包肉的历史可以追溯到清朝光绪年间,其…...

Unity阿里云OpenAPI 获取 Token的C#【记录】

获取Token using UnityEngine; using System; using System.Text; using System.Linq; using Newtonsoft.Json.Linq; using System.Security.Cryptography; using UnityEngine.Networking; using System.Collections.Generic; using System.Globalization; using Cysharp.Thr…...

winfrom项目,引用EPPlus.dll实现将DataTable 中的数据保存到Excel文件

最近研究不安装office也可以保存Excel文件,在网上查询资料找到这个方法。 第一步:下载EPPlus.dll文件(自行去网上搜索下载) 第二步:引用到需要用的项目中,如图所示: 第三步:写代码…...

【C++基础】多线程并发场景下的同步方法

如果在多线程程序中对全局变量的访问没有进行适当的同步控制(例如使用互斥锁、原子变量等),会导致多个线程同时访问和修改全局变量时发生竞态条件(race condition)。这种竞态条件可能会导致一系列不确定和严重的后果。…...

C语言#define TSLP0 (TSLP_Regdef *)TSENSORO BASE ADDR)的含义?

在C语言中,#define指令用于定义宏。宏是一种预处理器指令,它允许你为代码片段指定一个名称,以便在编译时进行替换。 从你的描述来看,似乎你想定义一个名为 TSLP0 的宏,其值是某个寄存器地址。假设 TSENSORO_BASE_ADDR…...

微信小程序wxs实现UTC转北京时间

微信小程序实现UTC转北京时间 打脸一刻:最近在迭代原生微信小程序,好一段时间没写原生的,有点不习惯; 咦,更新数据咋不生效呢?原来还停留在 this.xxx; 哟,事件又没反应了&#xff1f…...

提示词的艺术 ---- AI Prompt 进阶(提示词框架)

提示词的艺术 ---- AI Prompt 进阶(提示词框架) 写在前面 上周发布了一篇《提示词的艺术----AI Prompt撰写指南》,旨在帮助读者理解提示词的作用,以及简单的提示词撰写指南。本篇作为进阶内容,将给出常用的提示词框架…...

WPF常见面试题解答

以下是WPF(Windows Presentation Foundation)面试中常见的问题及解答,涵盖基础概念、高级功能和实际应用,帮助你更好地准备面试: 基础概念 什么是WPF? WPF是微软开发的用于构建桌面应用程序的UI框架&#x…...

TypeScript 学习

TypeScript 类型 准备本地环境 初始化 TypeScript 项目, 生成 package.json 文件: npm init -y安装 typescript: yarn add typescript -D初始化 TypeScript 配置文件: npx tsc--init输出: Created a new tsconfig.json with:target: es2016module: commonjsstrict: true…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求&#xff…...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

软件工程 期末复习

瀑布模型:计划 螺旋模型:风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合:模块内部功能紧密 模块之间依赖程度小 高内聚:指的是一个模块内部的功能应该紧密相关。换句话说,一个模块应当只实现单一的功能…...

[QMT量化交易小白入门]-六十二、ETF轮动中简单的评分算法如何获取历史年化收益32.7%

本专栏主要是介绍QMT的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写100篇左右。 QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步。 文章目录 相关阅读1. 策略概述2. 趋势评分模块3 代码解析4 木头…...

项目进度管理软件是什么?项目进度管理软件有哪些核心功能?

无论是建筑施工、软件开发,还是市场营销活动,项目往往涉及多个团队、大量资源和严格的时间表。如果没有一个系统化的工具来跟踪和管理这些元素,项目很容易陷入混乱,导致进度延误、成本超支,甚至失败。 项目进度管理软…...

项目研究:使用 LangGraph 构建智能客服代理

概述 本教程展示了如何使用 LangGraph 构建一个智能客服代理。LangGraph 是一个强大的工具,可用于构建复杂的语言模型工作流。该代理可以自动分类用户问题、分析情绪,并根据需要生成回应或升级处理。 背景动机 在当今节奏飞快的商业环境中&#xff0c…...