如何用超简单方法写一个Prometheus的Exporter
前言
想要监控公司生产环境一些节点的运行状态,目前公司做的有监控平台,可以拿到各个节点的运行数据,但是是看不到趋势的,只能看到当前时间点的状态,为了能够看到数据的趋势,为服务器的扩缩容做更好的决策,需要写一个 Prometheus 的 Exporter 将监控平台的数据导出
监控平台需要登录,数据有 API 接口、json ,具体登录平台拿 json 数据的过程不表
实践
一般来说,用 Go 来写 Prometheus 的 Exporter 是用 Prometheus 官方的实现:https://github.com/prometheus/client_golang 来做,简单看了下网上的示例,如果要实现动态 label 则很麻烦,需要实现一个自己的 Controller ,如果只暴露一两个指标,就很方便,我们希望能够用服务器的主机名和服务器的 IP ,以及客户的名称作为 label ,方便后面做可视化的时候筛选指标。那么有没有什么简单一点的方式呢
哎,还真有,来介绍下今天的主角:https://github.com/VictoriaMetrics/metrics 用它的时候和写这篇文章的时候才刚刚过 400 star,和官方的 Exporter 差 4k 多 star ,知名度差不少
VictoriaMetrics 类似 Prometheus,也是一个开源的时序数据库,可以简单的认为是 Prometheus Plus,Victoria/Metrics
是 VictoriaMetrics 提供的 prometheus/client_golang
的轻量实现,用它,可以不用去实现自己的 Controller ,轻松的导出指标给 Prometheus
来看下 Victoria/Metrics
是怎么动态的导出数据的,来看核心方法
// 动态更新数据 |
是不是比官方的实现要简单太多了,接下来咱们看导出到 HTTP 的写法,来看下列伪代码
// 起 HTTP Server 略 |
强烈安利 Victoria/Metrics
这个包,用过的都说好~
补充
如果单纯做监控用上面这个就很好,如果你正好用了 Gin 框架,不妨试试 github.com/penglongli/gin-metrics
这个包,用法可以参考我写的 CocoaSyncer
的 PrometheusExporter()
方法(传送门),可以在 Gin 框架的基础上方便的集成自己的一些业务数据