Prometheus是做什么的_云原生监控工具原理解析

老磊吖_7362

老磊吖_7362

2026-01-29

365人浏览

原创

Prometheus是专为云原生设计的时间序列监控系统,专注指标采集与告警;采用Pull模型实现可控采集、动态适配与故障可视,短生命周期任务需Pushgateway中转;remote_write可将数据持久化至SLS MetricStore,但需严格配置URL、认证及队列参数;PromQL使用须遵循标签聚合规则、函数类型约束与时间窗口语义,避免标签爆炸。

prometheus是做什么的_云原生监控工具原理解析

Prometheus 是一个专为云原生环境设计的时间序列数据库+监控告警系统,核心作用是拉取、存储、查询和告警——不是日志系统,也不是全链路追踪工具,它只管「指标」(metrics)。

为什么用 Pull 模型而不是 Push?

绝大多数监控系统(如 Zabbix)靠客户端主动上报,但 Prometheus 反其道而行:它自己定时去 http://target:port/metrics 抓数据。这样做的好处很实在:

  • 服务端完全掌控采集节奏,避免瞬时大量 Push 导致接收端雪崩
  • 天然适配 Kubernetes 等动态环境——只要服务发现能列出 endpoint,Prometheus 就能自动跟进,不用每个 Pod 都配推送地址
  • 抓取失败直接体现在 up{job="xxx"} 这个内置指标里,宕机、网络不通、exporter 崩溃一目了然

坏处也明显:如果目标实例生命周期极短(比如几秒的批处理任务),根本来不及被拉到,就得靠 Pushgateway 中转——但注意,Pushgateway 不是通用替代方案,滥用会导致指标陈旧、重复、难以关联实例标签。

remote_write 到日志服务,本质是“换存储”而非“换用途”

本地 TSDB 默认只存 15 天,且单机扩展性有限。把数据通过 remote_write 发往阿里云 SLS 的 MetricStore,其实是把 Prometheus 当成一个“采集+规则引擎”,把持久化和查询卸给后端。关键点在于:

  • url 必须严格匹配格式:https://{project}.{sls-endpoint}/prometheus/{project}/{metricstore}/api/v1/write,少一个路径段或写错大小写都会返回 404 Not Found
  • basic_auth 的 username 是阿里云 AccessKey ID,password 是 AccessKey Secret——不能填成 RAM 子账号的密钥,也不能误用 STS 临时 Token
  • queue_config 参数直接影响稳定性:capacity: 20480 是内存队列上限,max_samples_per_send: 2048 控制每次发多少样本;若网络抖动频繁,max_backoff 设太小会导致重试风暴,设太大又会积压延迟

这不是“备份”,而是生产级长期存储方案。一旦启用,alert.rules 和 recording rules 仍由 Prometheus Server 执行,只是原始样本落盘位置变了。

seo-keyword-analyzer
seo-keyword-analyzer

分析关键词进行SEO优化;研究搜索量、竞争程度和排名难度;生成关键词建议、内容创意及优化建议。

下载

PromQL 查询快,但别把它当 SQL 用

很多人第一次写 sum by (instance) (rate(http_requests_total[5m])) 觉得很酷,但很快会撞上两个现实:

  • 所有聚合操作(sum、avg、count)必须带 by 或 without 显式声明标签保留逻辑,否则报错 many-to-many matching not allowed
  • rate() 只接受计数器(Counter),对仪表盘(Gauge)用 rate() 会得到 0 或 NaN;想看内存使用率变化趋势,得用 delta(memory_usage_bytes[1h]) 或直接查原始值
  • 时间范围选择器(如 [5m])不是“过去 5 分钟”,而是“当前时刻往前推 5 分钟的数据窗口”,所以 irate() 更适合突刺类指标,rate() 更稳但有延迟

真正卡住人的,往往不是语法,而是标签爆炸(label explosion):比如给每个 HTTP 请求加 trace_id 标签,几十万唯一值会让 TSDB 内存暴涨、查询变慢甚至 OOM。Prometheus 的强大,始终建立在“合理打标”这个前提上。

它不解决日志检索,也不做分布式追踪,更不保证金融级精度。把它的能力边界划清楚,比堆功能更重要。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
golang如何定义变量
golang如何定义变量

golang定义变量的方法:1、声明变量并赋予初始值“var age int =值”;2、声明变量但不赋初始值“var age int”;3、使用短变量声明“age :=值”等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

519

5

golang有哪些数据转换方法
golang有哪些数据转换方法

golang数据转换方法:1、类型转换操作符;2、类型断言;3、字符串和数字之间的转换;4、JSON序列化和反序列化;5、使用标准库进行数据转换;6、使用第三方库进行数据转换;7、自定义数据转换函数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

616

5

golang常用库有哪些
golang常用库有哪些

golang常用库有:1、标准库;2、字符串处理库;3、网络库;4、加密库;5、压缩库;6、xml和json解析库;7、日期和时间库;8、数据库操作库;9、文件操作库;10、图像处理库。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

1216

5

golang和python的区别是什么
golang和python的区别是什么

golang和python的区别是:1、golang是一种编译型语言,而python是一种解释型语言;2、golang天生支持并发编程,而python对并发与并行的支持相对较弱等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.03.05

791

5

golang是免费的吗
golang是免费的吗

golang是免费的。golang是google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的开源编程语言,采用bsd开源协议。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.05.21

1766

6

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

2025.06.09

5054

18

golang相关判断方法
golang相关判断方法

本专题整合了golang相关判断方法,想了解更详细的相关内容,请阅读下面的文章。

2025.06.10

2334

13

golang数组使用方法
golang数组使用方法

本专题整合了golang数组用法,想了解更多的相关内容,请阅读专题下面的文章。

2025.06.17

4206

17

golang数组大全
golang数组大全

本专题整合了golang数组相关问题解决方法,想了解更多相关内容,请阅读下面的文章。

2025.06.20

5326

22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
SQL 教程
SQL 教程

共61课时 | 7.5万人学习

Gradle 安全最佳实践
Gradle 安全最佳实践

共0课时 | 0人学习

Gradle Wrapper 使用与安全指南
Gradle Wrapper 使用与安全指南

共0课时 | 0人学习