Prometheus 架构全面解析
在本指南中,我们将详细介绍 Prometheus 架构。
Prometheus 是一个用 Golang 编写的开源监控和告警系统,能够收集和处理来自各种目标的指标。您还可以查询、查看、分析指标,并根据阈值收到警报。
此外,在当今世界,可观测性对每个组织来说都变得至关重要,而 Prometheus 是开源领域的关键可观测性工具之一。
在这篇博客中,我们将了解 Prometheus 的所有关键组件,以及它们如何协同工作以使整个监控系统正常工作。
Prometheus 架构
以下是 Prometheus 架构的高级概述。
Prometheus 主要由以下部分组成。
- Prometheus 服务器
- 服务发现
- 时序数据库(TSDB)
- 目标
- 导出器
- 推送网关
- 警报管理器
- 客户端库
- PromQL系列
让我们详细看一下每个组件。
Prometheus 服务器
Prometheus 服务器是基于指标的监控系统的大脑。服务器的主要工作是使用拉取模型从各种目标收集指标。
Target 只不过是服务器、pod、端点等,我们将在下一主题中详细介绍。
使用 Prometheus 从目标收集指标的一般术语称为抓取(pull)。
Prometheus 会根据 Prometheus 配置文件中提到的抓取间隔定期抓取指标。
下面是一个示例配置。
global:scrape_interval: 15s evaluation_interval: 15s scrape_timeout: 10s rule_files:- "rules/*.rules"scrape_configs:- job_name: 'prometheus'static_configs:- targets: ['localhost:9090'] - job_name: 'node-exporter'static_configs:- targets: ['node-exporter:9100'] alerting:alertmanagers:- static_configs:- targets: ['alertmanager:9093']
时序数据库(TSDB)
prometheus 接收的指标数据会随时间变化(CPU、内存、网络 IO 等)。它称为时间序列数据。因此,Prometheus 使用时间序列数据库 (TSDB) 来存储其所有数据。
默认情况下,Prometheus 将其所有数据以有效的格式(块)存储在本地磁盘中。随着时间的流逝,它会压缩所有旧数据以节省空间。它还具有保留策略来删除旧数据。
Prometheus 还提供远程存储选项。这主要是存储可扩展性、长期存储、备份和灾难恢复等所必需的。
Prometheus 目标
Target 是 Prometheus 抓取指标的来源。目标可以是服务器、服务、Kubernetes Pod、应用程序端点等。
默认情况下,prometheus 在目标路径下查找指标。可以在目标配置中更改默认路径。这意味着,如果您未指定自定义指标路径,Prometheus 会在 /metrics
下查找指标。/metrics
目标配置位于配置文件的scrape_configs下。下面是一个示例配置。Prometheus
scrape_configs:- job_name: 'node-exporter'static_configs:- targets: ['node-exporter1:9100', 'node-exporter2:9100']- job_name: 'my_custom_job'static_configs:- targets: ['my_service_address:port']metrics_path: '/custom_metrics'- job_name: 'blackbox-exporter'static_configs:- targets: ['blackbox-exporter1:9115', 'blackbox-exporter2:9115']metrics_path: /probe- job_name: 'snmp-exporter'static_configs:- targets: ['snmp-exporter1:9116', 'snmp-exporter2:9116']metrics_path: /snmp
从目标端点,prometheus 需要特定文本格式的数据。每个指标都必须位于新行上。
通常,这些指标使用在目标上运行的 prometheus 导出器在目标节点上公开。
Prometheus 导出器
导出器就像在目标上运行的代理。它将指标从特定系统转换为 prometheus 理解的格式。
它可以是 CPU、内存等系统指标,也可以是 Java JMX 指标、MySQL 指标等。
默认情况下,这些转换后的指标由导出器在目标的 /metrics
路径(HTTPS 端点)上公开。
例如,如果要监视服务器的 CPU 和内存,则需要在该服务器上安装节点导出器,并且节点导出器会在 /metrics
上以 prometheus 指标格式公开 CPU 和内存指标。
一旦 Prometheus 提取了指标,它将组合指标名称、标签、值和时间戳,为该数据提供结构。
有很多社区导出器可用,但只有其中一些得到了 Prometheus 的正式批准。如果需要更多自定义项,则需要创建自己的导出器。
Prometheus 将导出器分为各个部分,例如数据库、硬件、问题跟踪器和持续集成、消息传递系统、存储、公开 Prometheus 指标的软件、其他第三方实用程序等。
您可以从官方文档中查看每个类别的出口商列表。
在 Prometheus 配置文件中,所有导出器的详细信息都将在 .scrape_configs
scrape_configs:- job_name: 'node-exporter'static_configs:- targets: ['node-exporter1:9100', 'node-exporter2:9100']- job_name: 'blackbox-exporter'static_configs:- targets: ['blackbox-exporter1:9115', 'blackbox-exporter2:9115']metrics_path: /probe- job_name: 'snmp-exporter'static_configs:- targets: ['snmp-exporter1:9116', 'snmp-exporter2:9116']metrics_path: /snmp
Prometheus 服务发现
Prometheus 使用两种方法从目标中抓取指标。
- 静态配置:当目标具有静态 IP 或 DNS 端点时,我们可以将这些端点用作目标。
- 服务发现:在大多数自动缩放系统和分布式系统(如 Kubernetes)中,目标不会有静态终结点。在这种情况下,将使用 prometheus 服务发现来发现目标端点,并将目标自动添加到 prometheus 配置中。
在继续之前,让我展示一个使用 Prometheus 配置文件的 Kubernetes 服务发现块的小示例。kubernetes_sd_configs
scrape_configs:- job_name: 'kubernetes-apiservers'kubernetes_sd_configs:- role: endpointsscheme: httpstls_config:ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crtbearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/tokenrelabel_configs:- source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]action: keepregex: default;kubernetes;https
Kubernetes 是动态目标的完美示例。在这里,您不能使用静态目标方法,因为 Kubernetes 集群中的目标(Pod)本质上是短暂的,并且很可能是短暂的。
Kubernetes 中还有基于文件的服务发现。它适用于静态目标,但经典静态配置与静态配置之间的主要区别在于,在这种情况下,我们创建单独的 JSON 或 YAML 文件并将目标信息保存在其中file_sd_configs
。Prometheus 将读取文件以识别目标。static_configs
file_sd_configs
不仅这两个,还有各种服务发现方法可用,例如 consul_sd_configs(prometheus 从 consul 获取目标详细信息)、ec2_sd_configs等。
要了解有关配置详细信息的更多信息,请访问官方文档。
Prometheus 推送网关
默认情况下,Prometheus 使用拉取机制来获取指标。
但是,在某些情况下,需要将指标推送到 prometheus。
让我们举一个在 Kubernetes cronjob 上运行的批处理作业的例子,该作业每天根据某些事件运行 5 分钟。在这种情况下,Prometheus 将无法使用拉取机制正确抓取服务级别指标。
因此,为了等待 prometheus 拉取指标,我们需要将指标推送到 prometheus。为了推送指标,prometheus 提供了一个名为 Pushgateway 的解决方案。 它是一种中间网关。
Pushgateway 需要作为独立组件运行。批处理作业可以将指标推送到 pushgateway 端点,Pushgateway 会公开这些指标。然后 prometheus 从 Pushgateway 中抓取这些指标。
Pushgateway 将指标数据临时存储在内存存储中。它更像是一个临时缓存。
Pushgateway 配置也将在配置中的部分下进行配置。scrape_configs
Prometheus
scrape_configs:- job_name: "pushgateway"honor_labels: truestatic_configs:- targets: [pushgateway.monitoring.svc:9091]
要将指标发送到 Pushgateway,您需要使用 prometheus 客户端库并检测应用程序或脚本以公开所需的指标。
Prometheus 客户端库
Prometheus 客户端库是软件库,可用于检测应用程序代码,以 Prometheus 理解的方式公开指标。
如果需要自定义检测或想要创建自己的导出器,可以使用客户端库。
一个非常好的用例是需要将指标推送到 Pushgateway 的批处理作业。批处理作业需要使用客户端库进行检测,以 prometheus 格式公开需求指标。
以下示例公开了名为 batch_job_records_processed_total
的自定义指标。Python Client Library
from prometheus_client import start_http_server, Counter
import time
import randomRECORDS_PROCESSED = Counter('batch_job_records_processed_total', 'Total number of records processed by the batch job')def process_record():time.sleep(random.uniform(0.01, 0.1))RECORDS_PROCESSED.inc()def batch_job():for _ in range(100):process_record()if __name__ == '__main__':start_http_server(8000)print("Metrics server started on port 8000")batch_job()print("Batch job completed")while True:time.sleep(1)
此外,在使用客户端库时,HTTP 服务器prometheus_client
端点中公开指标。/metrics
Prometheus 几乎为每种编程语言提供了客户端库,如果您想创建客户端库,也可以这样做。
要了解有关创建指南的更多信息并查看客户端库列表,您可以参考官方文档。
Prometheus 警报管理器
Alertmanager是Prometheus监控系统的关键部分。它的主要工作是根据 Prometheus 警报配置中设置的指标阈值发送警报。
警报由 Prometheus 触发并发送到 Alertmanager。它反过来将警报发送到警报管理器配置中配置的相应通知系统/接收器(电子邮件、松弛等)。
此外,警报管理器还负责以下工作。
- 警报重复数据删除:静默重复警报的过程。
- 分组:将相关警报分组到其他位置的过程。
- 静音:静音警报,用于维护或误报。
- 路由:根据严重性将警报路由到适当的接收器。
- 禁止:当存在中等高严重性警报时停止低严重性警报的过程。
下面是警报规则的示例配置。
groups:
- name: microservices_alertsrules:- record: http_latency:average_latency_secondsexpr: sum(http_request_duration_seconds_sum) / sum(http_request_duration_seconds_count)- alert: HighLatencyAlertexpr: http_latency:average_latency_seconds > 0.5for: 5mlabels:severity: criticalannotations:summary: "High latency detected in microservices"description: "The average HTTP latency is high ({{ $value }} seconds) in the microservices cluster."
这是 Alertmanager 配置文件的路由配置示例
routes:
- match:severity: 'critical'receiver: 'pagerduty-notifications'- match:severity: 'warning'receiver: 'slack-notifications'
警报管理器支持大多数消息和通知系统,例如 Discord、电子邮件、Slack 等,以将警报作为通知发送给接收者。
PromQL系列
PromQL 是一种灵活的查询语言,可用于从 Prometheus 查询时间序列指标。
我们可以直接从用户界面使用查询,也可以使用命令通过命令行界面进行查询。Prometheus
curl
Prometheus 用户界面
通过 CLI 查询
curl "http://54.186.154.78:30000/api/v1/query?query=$(echo 'up' | jq -s -R -r @uri)" | jq .
此外,当您将 prometheus 作为数据源添加到 Grafana 时,您可以使用 PromQL 查询和创建 Grafana 仪表板,如下所示。
结论
本文解释了 Prometheus 架构的主要组件,并将提供 Prometheus 配置的基本概述,您可以使用该配置执行更多操作。
每个组织的要求都不同,Prometheus 在不同环境中的实现也各不相同,例如 VM 和 Kubernetes。如果您了解基础知识和关键配置,则可以在任何平台上轻松实现它。
相关文章:
Prometheus 架构全面解析
在本指南中,我们将详细介绍 Prometheus 架构。 Prometheus 是一个用 Golang 编写的开源监控和告警系统,能够收集和处理来自各种目标的指标。您还可以查询、查看、分析指标,并根据阈值收到警报。 此外,在当今世界,可观…...
把批量M3U8网络视频地址转为MP4视频
在数字媒体时代,视频格式的转换已成为一项常见的需求。尤其对于那些经常处理网络视频的用户来说,将M3U8格式的视频转换为更常见的MP4格式是一项必备技能。幸运的是,现在有了固乔剪辑助手这款强大的工具,这一过程变得异常简单。下面…...
联合 Maxlinear 迈凌 与 Elitestek 易灵思 - WPI 世平推出基于 FPGA 芯片的好用高效电源解决方案
近期 WPI 世平公司联合 Maxlinear 迈凌电源产品搭配 Elitestek 易灵思 FPGA 共同合作推出基于 FPGA 芯片的好用高效电源解决方案。 Elitestek 易灵思 FPGA 核心产品有 2 大系列 : Trion 系列与钛金系列。Trion 系列主要特点是 : 1. 40nm 工艺 2. 超低功耗 ( 可低至竞争对手的 …...
Keycloak - docker 运行 前端集成
Keycloak - docker 运行 & 前端集成 这里的记录主要是跟我们的项目相关的一些本地运行/测试,云端用的 keycloak 版本不一样,不过本地我能找到的最简单的配置是这样的 docker 配置 & 运行 keycloak keycloak 有官方(Red Hat Inc.)的镜像&#…...
架构篇27:如何设计计算高可用架构?
文章目录 主备主从集群小结计算高可用的主要设计目标是:当出现部分硬件损坏时,计算任务能够继续正常运行。因此计算高可用的本质是通过冗余来规避部分故障的风险,单台服务器是无论如何都达不到这个目标的。所以计算高可用的设计思想很简单:通过增加更多服务器来达到计算高可…...
Python 有用的库模块
简介 Python中有许多常用的库或者模块,在写代码的时候或多或少会遇到,本文对其进行总结,方便日后查阅。 pprint Python中的pprint模块是用于打印数据结构(如字典,列表等)的模块,提供了一种以…...
vivado DDS学习
实现DDS通常有两种方式,一种是读取ROM存放的正弦/余弦信号的查表法,另一种是用DDS IP核。这篇学习笔记中,我们要讲解说明的是VIVADO DDS IP核的应用。 目前本篇默认Phase Generator and SIN/COS LUT(DDS)的standard模式…...
微信小程序(十六)slot插槽
注释很详细,直接上代码 上一篇 温馨提醒:此篇需要自定义组件的基础,如果不清楚请先看上一篇 新增内容: 1.单个插槽 2.多个插槽 单个插糟 源码: myNav.wxml <view class"navigationBar custom-class">…...
gtest 单元测试
文章目录 前言一、Google Test介绍1.1 gtest源码下载编译1.2 常用API介绍1.3 gtest运行参数介绍 二、Google Mock参考资料 前言 Google Test(简称gtest)是一个开源的C单元测试框架。和常见的测试工具一样,gtest提供了单体测试常见的工具和组…...
掌握assert的使用:断言在错误检查和调试中不可或缺
断言在错误检查和调试中不可或缺 一、简介二、断言的基本语法和用法三、错误检查与断言四、 调试与断言五、避免滥用断言六、总结 一、简介 断言是一种在程序中用于检查特定条件是否满足的工具。一般用于验证开发者的假设,如果条件不成立,就会导致程序报…...
概念杂记--到底啥是啥?(数据库篇)
文章目录 1.聚集索引(clustered index)2.非聚集索引(Non-clustered index)3.聚集索引和非聚集索引区别?4.覆盖索引(covering index)5、复合索引 (Composite Index)6.索引…...
Ubuntu20.4 Mono C# gtk 编程习练笔记(四)
连续实时绘图 图看上去不是很清晰,KAZAM录屏AVI尺寸80MB, 转换成gif后10MB, 按CSDN对GIF要求,把它剪裁缩小压缩成了上面的GIF,图像质量大不如原屏AVI,但应该能说明原意:随机数据随时间绘制在 gtk 的 drawin…...
1 月 26日算法练习
文章目录 九宫幻方穿越雷区走迷宫 九宫幻方 小明最近在教邻居家的小朋友小学奥数,而最近正好讲述到了三阶幻方这个部分,三阶幻方指的是将1~9不重复的填入一个33的矩阵当中,使得每一行、每一列和每一条对角线的和都是相同的。 三阶幻方又被称…...
今日AI大热潮,明日智能风向标
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
03 SB实战 -微头条之首页门户模块(跳转某页面自动展示所有信息+根据hid查询文章全文并用乐观锁修改阅读量)
1.1 自动展示所有信息 需求描述: 进入新闻首页portal/findAllType, 自动返回所有栏目名称和id 接口描述 url地址:portal/findAllTypes 请求方式:get 请求参数:无 响应数据: 成功 {"code":"200","mes…...
Abaqus许可分析工具
在当今的知识产权保护和许可管理领域,一款高效、精准的许可分析工具对于企业来说至关重要。Abaqus许可分析工具凭借其强大的功能和卓越的性能,成为了企业优化知识产权许可管理的得力助手。 一、Abaqus许可分析工具的核心优势 1.全面性:Abaqus…...
【开发工具】从eclipse到idea的过度
背景 随着eclipse相比以前性能慢了不少,idea在开发工具领域越战越猛,市场份额也逐年增加,其体验得了软件工程师的热爱。 概要 本文只是做了一个简要的记录,简单描述下本人从eclipse到idea的过度的心态。 正文 在大厂都会研发自…...
【QT+QGIS跨平台编译】之十一:【libzip+Qt跨平台编译】(一套代码、一套框架,跨平台编译)
文章目录 一、libzip介绍二、文件下载三、文件分析四、pro文件五、编译实践一、libzip介绍 libzip是一个开源C库,用于读取,创建和修改zip文件。 libzip可以从数据缓冲区,文件或直接从其他zip归档文件直接复制的压缩数据中添加文件。在不关闭存档的情况下所做的更改可以还原…...
openlayers+vue实现缓冲区
文章目录 前言一、准备二、初始化地图1、创建一个地图容器2、引入必须的类库3、地图初始化4、给地图增加底图 三、创建缓冲区1、引入需要的工具类库2、绘制方法 四、完整代码总结 前言 缓冲区是地理空间目标的一种影响范围或服务范围,是对选中的一组或一类地图要素(点、线或面…...
(大众金融)SQL server面试题(3)-客户已用额度总和
今天,面试了一家公司,什么也不说先来三道面试题做做,第三题。 那么,我们就开始做题吧,谁叫我们是打工人呢。 题目是这样的: DEALER_INFO经销商授信协议号码经销商名称经销商证件号注册地址员工人数信息维…...
c语言笔记
1. c语言部分算法列举 1.1 找数 二分查找(前提是数据必须有序) 1.2 求极值 1.3 数组逆序 1.4 排序法(***重点***) 1.4.1 选择排序法 1.4.2 冒泡排序法 1.4.3 插入排序法 2. 字符型数组 2.1 使用格式 char s[10]; …...
6轴机器人运动正解-逆解控制【1】——三种控制位姿的方式
概览: 通过运动学正解控制机器人运动通过运动学逆解控制机器人运动一个简单的物体搬运(沿轨迹运动) 后续会陆续更新(本例仅供学习交流用) 一、6轴机器人 二、运动正解控制 通过修改各个轴的角度,实现末…...
c# Microsoft UI Automation
Microsoft UI Automation(UIA)是一种用于自动化Windows应用程序用户界面(UI)的框架。它允许开发人员编写自动化测试脚本、辅助技术应用程序和其他需要与应用程序交互的工具。以下是一些关于Microsoft UI Automation的重要信息&…...
C#-前后端分离连接mysql数据库封装接口
C#是世界上最好的语言 新建项目 如下图所示选择框红的项目 然后新建 文件夹 Common 并新建类文件 名字任意 文件内容如下 因为要连接的是mysql数据库 所以需要安装 MySql.Data.MySqlClient 依赖; using MySql.Data.MySqlClient; using System.Data;namespace WebApplication1.…...
yolov8 opencv dnn部署自己的模型
源码地址 本人使用的opencv c github代码,代码作者非本人 使用github源码结合自己导出的onnx模型推理自己的视频 推理条件 windows 10 Visual Studio 2019 Nvidia GeForce GTX 1070 opencv4.7.0 (opencv4.5.5在别的地方看到不支持yolov8的推理,所以只使用opencv…...
插槽(64-67)
文章目录 插槽1.插槽 - 默认插槽(组件内可以定制一处结构)2.插槽 - 后备内容(默认值)3.插槽 - 具名插槽(组件内可以定制多处结构)4.作用域插槽(插槽的一个传参语法) 插槽 插槽分类:默认插槽和具名插槽 1.插槽 - 默认插槽(组件内可以定制一处结构) 作用…...
C# LING查询语法学习,扩展方法的使用
class Program { #region 示例1:不使用LINQ查询数组 //static void Main(string[] args) //{ // int[] nums { 1, 7, 2, 6, 5, 4, 9, 13, 20 }; // List<int> list new List<int>(); // foreach (int item in nums) …...
自然语言推断:微调BERT
微调BERT 自然语言推断任务设计了一个基于注意力的结构。现在,我们通过微调BERT来重新审视这项任务。自然语言推断是一个序列级别的文本对分类问题,而微调BERT只需要一个额外的基于多层感知机的架构,如下图中所示。 本节将下载一个预训练好的…...
立创EDA学习:设计收尾工作
布线整理 ShiftM,关闭铺铜显示 调整结束后再使用快捷键”ShiftM“打开铺铜 过孔 在空白区域加上一些GND过孔,连接顶层与底层的铺铜。放置好”过孔“后,隐藏铺铜,观察刚才放置的过孔有没有妨碍到其他器件 调整铺铜 先打开铺铜区&…...
ShardingSphere之ShardingJDBC客户端分库分表上
目录 什么是ShardingSphere? 客户端分库分表与服务端分库分表 ShardingJDBC客户端分库分表 ShardingProxy服务端分库分表 ShardingSphere实现分库分表的核心概念 ShardingJDBC实战 什么是ShardingSphere? ShardingSphere是一款起源于当当网内部的应…...
紧固件网站建设/小程序开发多少钱
欢迎来到 OpenBTS 社区 这是 OpenBTS 公众版的站点,Range Network 贡献给大家的一款 SDR/GSM/VoIP 协议栈相关的自由及开源软件(FOSS)。 使用“guest”作为用户名及“guestpass”作为相关密码便可登录并编辑该站点。如若有意成为该站点的常…...
大连网站设计开发/创建app平台
《零基础学机器学习》读书笔记二之机器学习开发思路 一、机器学习快速上手路径(续) 1.2 快捷的云实战学习模式 1.2.1 开发第一个机器学习程序 机器学习项目的目标,就是根据已有的数据样本,对其特征进行推理归纳,得…...
flash学习网站/网站优化排名公司
其实很多人都知道求职市场对大龄程序员不“友好”,在其他行业,年龄越大意味着经验越丰富,也会收到用人单位的争抢。君不见,公司里头发花白的人,往往是专家级别的人才,但为何到了程序员这一行业,…...
wordpress 悬浮框/域名免费注册0元注册
成员变量:是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。类变量:也声明在类中,方法体之外,但必须声明为static类型。1.生命周期不同成员变…...
dedecms手机网站制作/北京网站优化服务
分布式拒绝服务(DDoS:Distributed Denial of Service)攻击指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DoS攻击,从而成倍地提高拒绝服务攻击的威力。通常,攻击者使用一个偷窃帐号将DDoS主控程…...
先网站开发后软件开发/seo自学网官方
RequestMapping 是一个用来处理请求地址映射的注解,可用于类或方法上。 用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径; 用于方法上,表示在类的父路径下追加方法上注解中的地址将会访问到该方法,此处需…...