
一、概述
作为指标监控领域的独角兽,同时市场上很少见相关领域的描述,所以最近计划开一个系列来记录下源码解读过程方便回(ZHUANG)溯(BI),总之会尽可能的详细,但受限于篇幅,难免有模糊之处,希望大家能留言探讨。
二、Prometheus架构
具体的图可以到官方文档(https://github.com/prometheus/prometheus)上去找,使用说明也在官方文档中,不能用那个来水一篇,那样就和这系列的本意相悖,所以大量的基础的用法之类的有可能会在解析到具体模块中时提及,更全面的就见诸官方文档了。
三、源码和编译环境准备
我们使用的是release-2.17,代码地址如上,编译环境go13、yarn、nodejs
四、重要的源码目录结构说明
cmd目录是prometheus的入口和promtool规则校验工具的源码
discovery是prometheus的服务发现模块,主要是scrape targets,其中包含consul, zk, azure, file,aws, dns, gce等目录实现了不同的服务发现逻辑,可以看到静态文件也作为了一种服务发现的方式,毕竟静态文件也是动态发现服务的一种特殊形式
config用来解析yaml配置文件,其下的testdata目录中有非常丰富的各个配置项的用法和测试
notifier负责通知管理,规则触发告警后,由这里通知服务发现的告警服务,之下只有一个文件,不需要特别关注
pkg是内部的依赖
- relabel :根据配置文件中的relabel对指标的label重置处理
- pool:字节池
- timestamp:时间戳
prompb定义了三种协议,用来处理远程读写的远程存储协议,处理tsdb数据的rpc通信协议,被前两种协议使用的types协议,例如使用es做远程读写,需要远程端实现远程存储协议(grpc),远程端获取到的数据格式来自于types中,就是这么个关系
promql处理查询用的promql语句的解析
rules负责告警规则的加载、计算和告警信息通知
scrape是核心的根据服务发现的targets获取指标存储的模块
storge处理存储,其中fanout是存储的门面,remote是远程存储,本地存储用的下面一个文件夹
tsdb时序数据库,用作本地存储
- rulefmt:rule格式的验证
- runtime:获取运行时信息在程序启动时打印
五、重要的组件说明
第四部分按照目录描述了各个package的功能,在此基础上,prometheus的启动也可以看作十个不同职能组件的启动。
Scrape manager, 拉取指标的核心组件
Rule manager,告警处理组件
TSDB,本地存储组件
Notifier manager,通知组件
ScrapeDiscovery manager,用于target的动态发现
NotifyDiscovery manager,用于告警服务的动态发现
Web handler,查询的接口和页面的提供
六、最后
我们启动prometheus的所有前置工作就到此结束了,这时候拿到源码虽然对细节还不是特别了解,但是已经应该很清楚每一块的功能点了,之间的依赖关系也有些模糊的印象了,这样的话我们的第一篇就算是大功告成了,下一篇我们就正式开始启动Prometheus




