运维监控系统实战笔记
秦晓辉
快猫星云联合创始人,Open-Falcon、Nightingale、Categraf 核心研发
9147 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 25 讲
运维监控系统实战笔记
15
15
1.0x
00:00/00:00
登录|注册

05|Prometheus中有哪些关键设计?

你好,我是秦晓辉。
上一讲我们介绍了如何搭建 Prometheus 系统,演示了基本的使用方法,这一讲我们深入进去,梳理一下 Prometheus 的关键设计,看看这些设计是如何奠定 Prometheus 江湖地位的。

标准先行,注重生态

Prometheus 最重要的规范就是指标命名方式,数据格式简单易读,在第 2 讲中我们已经聊过了,它用标签集来标识指标。有些监控系统会把一些特殊的字段单独提出来,最典型的就是 hostname 字段,这种做法在一些特定场景会显得更有效。但是显然,统一的标签集表达方式是最通用、最灵活的。
虽然标签集很灵活,但是在实际落地时,我强烈建议你在公司推行一个标签定义规范,标签 Key 不能随便起名,该有的标签也不能缺失。既减少了理解成本,也保证了数据的规整完备,便于后续做数据分析。比如,对于应用层面的监控,可以要求必须具备这几个信息。
指标名称 metric
Prometheus 内置建立的规范就是叫 metric(即 __name__)。如果是 Counter 类型,单调递增的值,指标名称以 _total 结尾。
服务名称 service
服务名称 service 要全局唯一,比如 n9e-webapi,p8s-alertmanager,一般是系统名称加上模块名称,组成最终的服务名称。如果公司比较大,就需要一个全局的服务目录做参考,否则不同的团队可能会起相同的名称,我们可以考虑使用 Git 里的 GroupName + RepoName。系统名称最好也单独做成一个标签,比如 system=n9e system=p8s。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Prometheus监控系统的关键设计包括标准先行、拉模式使用和监控目标动态发现机制。标准先行方面,Prometheus注重简单易读的指标命名方式和数据格式,通过标签集标识指标,建议公司推行标签定义规范以减少理解成本。拉模式使用方面,Prometheus主要使用拉模式获取指标,辅以推模式,并强调拉模式的解耦优势。监控目标动态发现机制方面,Prometheus内置了多种服务发现机制,以应对基础设施动态化的挑战。此外,Prometheus的配置管理简单直观,使用Yaml文件,便于自动化和推行IaC管理模式。而PromQL作为查询语言,为二次计算提供了灵活的支持。这些关键设计使Prometheus成为一个灵活、高效的监控系统,适用于各种复杂的监控场景。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《运维监控系统实战笔记》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(13)

  • 最新
  • 精选
  • 叶夏
    可以把Prometheus的配置yaml和告警规则yaml单独放到一个代码仓库中,把这个仓库向有需要的人开放,如果他们想要添加某一个规则,就自己修改提交PR,提交PR的部署到测试环境,验证没有问题,prometheus owner 审核PR之后合并到master分支中,这个时候在自动部署到生产环境,我们是这么做的,感觉蛮好的

    作者回复: 👍

    2023-01-19归属地:江苏
    2
    25
  • 那时刻
    Prometheus 数据的存储按冷热数据进行分离,最近的数据肯定是看的最多的,所以缓存在内存里面,为了防止宕机而导致数据丢失因而引入 wal 来做故障恢复。数据超过一定量之后会从内存里面剥离出来以 chunk 的形式存放在磁盘上这就是 head chunk。对于更早的数据会进行压缩持久化变成 block 存放到磁盘中。 对于 block 中的数据由于是不会变的,数据较为固定,所以每个 block 通过 index 来索引其中的数据,并且为了加快数据的查询引用倒排索引,便于快速定位到对应的 chunk。

    作者回复: 👍

    2023-01-18归属地:北京
    7
  • Ishmael
    我觉得最绝的还是限制值必须为float这点,限制死了之后保证了数据的高压缩度,进一步保证了计算性能和存储空间的节省。同时wal和分级存储也很绝,kv设计的思路也很不错。tag这个设计在实际接入中帮了大忙。

    作者回复: 👍

    2023-01-19归属地:四川
    5
  • 胡飞
    在k8s模式下部署,配置采用yaml缺点就出来了,一套环境大家都有弄,改错了,甚至缩进写错了都会造成pod重启失败。后面采用servicemonitor/podmonitor 感觉就好多了

    作者回复: 👍🏻

    2023-01-29归属地:上海
    1
  • Ppppppp
    对于一些特殊场景导致的promql 0/0 的情况,在老东家遇到过windows实例 cpu利用率偶尔出现0/0的情况。 这种0/0好像promql没有很好的处理方法(后来排查问题大概率是镜像有bug),当时是用"or"临时解决了问题 现在想想,采集侧是否可以加入数据预处理呢?比如说遇到极度不合理的数值给他一个默认值?希望秦老师解答 🤣🤣🤣🤣

    作者回复: 采集侧可以处理,也可以不处理,差别不太大 :)

    2023-03-05归属地:江苏
  • lei
    在pull的时候是单线程还是多线程,这方面会出现瓶颈吗

    作者回复: target多了会有瓶颈,如果有瓶颈了可以拆分采集器

    2023-02-14归属地:浙江
  • Geek_a99361
    Prometheus使用本地存储的方式有一些局限性,远端存储有什么推荐?比如 clickhouse或者influxDB

    作者回复: 后面的章节会介绍如何扩展Prometheus的存储,个人推荐VictoriaMetrics

    2023-01-29归属地:北京
  • irving
    telegraf是拉模式吗?telegraf中的各个plugin都要配置influxdb的地址,应该是push模式吧

    作者回复: 是推模式,不是各个plugin都配置influxdb的地址,所有input的plugin都无需配置influxdb地址,只要配置一个output的plugin写入后端时序库就可以了

    2023-01-29归属地:上海
  • hshopeful
    基于gorilla的时序数据压缩算法很经典

    作者回复: 👍

    2023-01-19归属地:湖北
  • peter
    Q1:Prometheus是用什么开发的?JAVA吗? Q2:Prometheus代码规模有多大?百万行代码?

    作者回复: prometheus用go写的,我没做具体统计,整体代码量不大

    2023-01-18归属地:北京
收起评论
显示
设置
留言
13
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部