author:魏静崎
2025年6月23日
K8s学习
Promethus
特性
优点
1.1.1 易于管理
Prometheus 核心部分只有一个单独的二进制文件,不存在任何的第三方依赖(数据库,缓存等等)。唯一需要的就是本地磁盘,因此不会有潜在级联故障的风险。
Prometheus 基于 Pull 模型的架构方式,可以在任何地方(本地电脑,开发环境,测试环境)搭建我们的监控系统。
对于一些复杂的情况,还可以使用 Prometheus 服务发现(Service Discovery)的能力动态管理监控目标。
1.1.2 监控服务的内部运行状态
Pometheus 鼓励用户监控服务的内部状态,基于Prometheus 丰富的 Client 库,用户可以轻松的在应用程序中添加对Prometheus 的支持,从而让用户可以获取服务和应用内部真正的运行状态。
1.1.3 强大的数据模型
所有采集的监控数据均以指标(metric)的形式保存在内置的时间序列数据库当中(TSDB,Time Series DB)。所有的样本除了基本的指标名称以外,还包含一组用于描述该样本特征的标签。
1.1.4 强大的查询语言 PromQL
Prometheus 内置了一个强大的数据查询语言 PromQL。 通过 PromQL 可以实现对监控数据的查询、聚合。同时 PromQL 也被应用于数据可视化(如 Grafana)以及告警当中。
1.1.5 高效
对于监控系统而言,大量的监控任务必然导致有大量的数据产生。而Prometheus 可以高效地处理这些数据,对于单一Prometheus Server 实例而言它可以处理:数以百万的监控指标、每秒处理数十万的数据点
1.1.6 可扩展
可以在每个数据中心、每个团队运行独立的Prometheus Sevrer。Prometheus 对于联邦集群的支持,可以让多个 Prometheus 实例产生一个逻辑集群,当单实例 Prometheus Server 处理的任务量过大时,通过使用功能分区(sharding)+联邦集群(federation)可以对其进行扩展。
架构
![[90fdb7a4da244aca94cd01d897358bdf_515dcc10344ddcd6b1039ae4542d21fd.png]]
1、存储计算层
Prometheus Server,主服务器,负责收集和存储时间序列数据,负责实现对监控数据的获取,存储以及查询。
client libraies:应用程序代码插桩,将监控指标嵌入到被监控应用程序中
Retrieval 组件为取数组件,它会主动从 PushGateway 或者 Exporter 拉取指标数据。
Service discovery,可以动态发现要监控的目标。
TSDB,数据核心存储与查询。
HTTP server,对外提供 HTTP 服务。
2、采集层
采集层分为两类,一类是生命周期较短的作业,还有一类是生命周期较长的作业。
Pushgateway:推送网关,为支持short-lived 作业提供一个推送网关。
exporter:简单说是采集端,通过 http 服务的形式保留一个 url 地址,prometheus server 通过访问该 exporter 提供的 endpoint 端点,即可获取到需要采集的监控数据。
短作业:直接通过 API,在退出时间指标推送给PushGateway 。
长作业:Retrieval 组件直接从 Job 或者 Exporter 拉取数据。
无论哪种方式,Server端都是pull的。
3、应用层
应用层主要分为两种,一种是AlertManager,另一种是数据可视化。
AlertManager
对接Pagerduty,是一套付费的监控报警系统。可实现短信报警、5 分钟无人 ack 打电话通知、仍然无人 ack,通知值班人员 Manager…Emial,发送邮件… …
数据可视化
Prometheus build-in WebUI、Grafana、其他基于API 开发的客户端
PromQL
Prometheus 通过指标名称(metrics name)以及对应的一组标签(labelset)唯一定义一条时间序列。指标名称反映了监控样本的基本标识,而 label 则在这个基本特征上为采集到的数据提供了多种特征维度。用户可以基于这些特征维度过滤,聚合,统计从而产生新的计算后的一条时间序列。
PromQL 是 Prometheus 内置的数据查询语言,其提供对时间序列数据丰富的查询,聚合以及逻辑运算能力的支持。并且被广泛应用在Prometheus的日常应用当中,包括对数据查询、可视化、告警处理当中。
数据类型包括
- 瞬时向量 (Instant vector) - 某一时刻的时间序列集合
- 范围向量 (Range vector) - 一段时间范围内的时间序列集合
- 标量 (Scalar) - 简单的数字值
- 字符串 (String) - 简单的字符串值
支持sum、avg、stddev(标准差)、irate(瞬时增长速率)等内置函数,支持数学运算,布尔预算等
- 本文作者: 魏静崎
- 本文链接: https://slightwjq.github.io/2025/06/23/Promethus/
- 版权声明: 该文章来源及最终解释权归作者所有