node_exporter源码阅读

基于prometheus的监控系统搭建起来之后,对于多样化的业务线来说,
定制化的采集监控指标必将是业务线产品经理的又一个需求方向,所以,作为平台开发者来说,
预判产品经理的预判也是一项基本的职业技能🤣,即:think deeper
基于此,先把node_exporter的源码一窥究竟.
本篇文章主要是源码阅读,概念和指标相关的介绍需要读者自行去了解,不过不了解也不影响本篇文章的阅读
1.目录结构
总的来说,node_exporter的目录结构还是非常简单的:
node_exporter.go文件即项目的主入口collector文件夹即存放各种采集指标的文件夹
其余的就是一些文档和辅助脚本,源码阅读时可以忽略;
2.项目主入口 – node_exporter.go
2.1定义了一个结构体–handler
1 | // handler的实例由newHandler来创建 |
prometheus对于node_exporter采集数据的获取是通过向node_exporter发送拉取请求来实现的,
而这个拉取请求就是通过http协议来交互的.所以这个handler和我们web项目中的handler是一个概念,
即都实现了http.Handler接口:
1 | // ServeHTTP implements http.Handler. |
2.2从主入口函数main开始
1 | func main() { |
2.3handler的创建者–newHandler
1 |
|
1 | // 根据filters入参创建对应的http.Handler |
3.node_exporter/自研exporter必须要实现的一个接口–prometheus.Collector
这里涉及到github.com/prometheus/client_golang/prometheus的源码,留到讲自研exporter的时候会剖析,
client_golang是prometheus的官方go库,既可以用于集成现有应用,也可以作为连接Prometheus HTTP API的基础库
1 | // Collector is the interface implemented by anything that can be used by |
3.1node_exporter中prometheus.Collector接口的实现者–NodeCollector
1 |
|
4.结束语
整体来看node_exporter的源码可阅读性还是非常高的.接下来将会写一篇自研exporter的实践;