写点什么

Prometheus 的使用:编写自己的 exporter

用户头像
Rayzh
关注
发布于: 2020 年 12 月 24 日
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地址时会返回以下内容:

# HELP node_cpu Seconds the cpus spent in each mode.# TYPE node_cpu counternode_cpu{cpu="cpu0",mode="idle"} 262142.1090415
复制代码

Exporter 返回的样本数据,主要由三个部分组成:样本的一般注释信息(HELP),样本的类型注释信息(TYPE)和样本。Prometheus 会对 Exporter 响应的内容逐行解析。

官方支持的 Exporter 可以参考 https://prometheus.io/docs/instrumenting/exporters/

三、自定义 Exporter

自定义 Exporter 可以按照如下几个步骤:

1、获取监控目标的指标。比如使用 memcached python 客户端连接 memcached 实例,执行 stats 命令获取到当前 memcached 实例的运行指标。

class MemcacheStat:    def __init__(self, hostport):        self.mc = memcache.Client(hostport, debug=0)
def stats(self): stat = self.mc.get_stats() res = stat[0][1] ret = dict()
ret['curr_items'] = res['curr_items'] ret['uptime'] = res["uptime"] ret['curr_connections'] = res['curr_connections'] ret['cmd_get'] = res['cmd_get'] ret['get_hits'] = res['get_hits'] ret['cmd_set'] = res['cmd_set'] ret['storebytes'] = res['bytes'] ret['limit_maxbytes'] = res['limit_maxbytes']
return ret
复制代码

2、暴露 HTTP 服务。按照 Prometheus 的规范,使用如 Flask、Fastapi 等库开发/metrics GET 接口。

@app.route("/metrics")def memcachedResponse():    crr_items.set(stats['curr_items'])    uptime.set(stats['uptime'])    crr_connections.set(stats['curr_connections'])    cmd_get.set(stats['cmd_get'])    get_hits.set(stats['get_hits'])    cmd_set.set(stats['cmd_set'])    storebytes.set(stats['storebytes'])    limit_maxbytes.set(stats['limit_maxbytes'])
return Response(generate_latest(REGISTRY), mimetype="text/plain")
复制代码

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


用户头像

Rayzh

关注

我知道我需要什么 2018.11.13 加入

主业是搞运维的,重心在容器生态和大数据生态上。 期待和大家的交流。

评论

发布
暂无评论
Prometheus的使用:编写自己的exporter