Prometheus 的使用:编写自己的 exporter
以 memcached 为例
一、监控指标
列出需要搜集的指标和含义:
curr_items : 当前 key 数量
uptime : 运行时间
curr_connections : 当前连接数
cmd_get : get 命令执行次数
cmd_set : set 命令执行次数
get_hits : get 命令命中次数
storebytes : 存储内存大小
limit_maxbytes : 最大内存
二、Exporter 介绍
Prometheus Exporter 以一个 HTTP 的服务的形式,将采集到的指标以 Prometheus 的规范,返回监控的样本数据。以 Node Exporter 为例,当访问/metrics
地址时会返回以下内容:
Exporter 返回的样本数据,主要由三个部分组成:样本的一般注释信息(HELP),样本的类型注释信息(TYPE)和样本。Prometheus 会对 Exporter 响应的内容逐行解析。
官方支持的 Exporter 可以参考 https://prometheus.io/docs/instrumenting/exporters/ 。
三、自定义 Exporter
自定义 Exporter 可以按照如下几个步骤:
1、获取监控目标的指标。比如使用 memcached python 客户端连接 memcached 实例,执行 stats 命令获取到当前 memcached 实例的运行指标。
2、暴露 HTTP 服务。按照 Prometheus 的规范,使用如 Flask、Fastapi 等库开发/metrics
GET 接口。
3、Prometheus 配置连接这个 Exporter。
四、展示和报警
采集到上述指标后,可以在 Grafna 中编写 PromSQL 去制作可视化的图标。比如内存使用率、item 数等等。
比如 uptime 可以通过 max(max_over_time(uptime{instance=~"$instance"}[$__interval])) 获取。对于每个数据的展示方式可以根据实际业务关注的点去做优化,以上仅仅是示例。
报警使用的是 Grafna 的 Alert 模块,配置自己的 Alert channels 去接受报警信息。
五、写在最后
编写自己的 exporter 在业务重要指标监控中有重要的作用。可以从项目的维度提取出关注的 metrics,制作自己的监控大屏。本篇文章代码地址:https://github.com/Rayzhsre/memcached_exporter
评论