开发本身的分布式监控Prometheus Exporter时遇到的坑

   这里说下我在开发本身的Prometheus Exporter时遇到的几个坑,所谓的坑,实际上是在开发过程当中须要注意到的几个关键点,若是忽略,那么可能会产生错误和非预期的结果。node

3c74000376a36ad3643e

  若是对Prometheus不了解的,能够自行谷歌或百度一下,或者能够看下我以前的一篇文章。Prometheus是基于Pull的工做模式,须要按期的从Agent端收集数据,并入库,这里的Agent被称为Exporter。官网和社区里目前不少成熟的expoter能够选择,好比监控linux机器的node_exporter、监控mysql的mysqld_exporter等等。这里的大多数都是用Go语言写的,其实理解了Exporter和Prometheus的工做原理以后就知道,exporter其实就是将收集的数据转化为文本格式,并对外暴露接口,提供 http 请求,因此很容本身实现一个,没必要拘泥于用那种语言,你能够用Java、PHP或者Python等任何你擅长的。我这里用Python Flask框架写了一个监控vSphere Datastore的Exporter,开发过程当中须要注意一下几点:python

  1. Exporter的总体文本数据格式:mysql

    Exporter的返回的是文本内容,其中以行为单位,空行将被忽略, 文本内容最后一行为空行;linux

    文本内容以“# HELP”开头的行为注释,表示帮助信息,以“# TYPE”开头的行表示此Metric的类型;git

    exporter有四种数据类型,分别为:counter/gauge/histogram/summary。github

  2. Exporter每一行文本的格式sql

    1. 在每一行文本的最后不能有空格,不然会不识别flask

    2. 在每一Metric行表明一个Key、Value对,Value的值是float类型,若是有两个Value值,最后框架

      一个会被认为是时间戳进行保存,好比:ide

        http_requests_total{method="post",code="200"} 1027 1395066363000

    3. Metrics的Label的value值必需要用双引号“”引发来

  3. Exporter的Content-Type必须是text类型:

    1. 这里我flask返回页面的Content-Type设置为:text/plain

wKioL1nOacaAjHXsAADhjtwMq_o354.png

    4. Prometheus有本身的python的client:

   项目地址以下:

https://github.com/prometheus/client_python

  若是不想重复造轮子,能够选择用官网提供的lient端。

  5. Exporter接口的响应时间

     默认Prometheus是每隔15秒抓取一次数据,每次的timeout超时时间是10s,这个也能够在配置文件里自定义。要注意Exporter的接口响应时间必定要比server配置里的小。

相关文章
相关标签/搜索