开发自己的分布式监控PrometheusExporter时遇到的坑-创新互联
这里说下我在开发自己的Prometheus Exporter时遇到的几个坑,所谓的坑,其实是在开发过程中需要注意到的几个关键点,如果忽略,那么可能会产生错误和非预期的结果。
创新互联公司是由多位在大型网络公司、广告设计公司的优秀设计人员和策划人员组成的一个具有丰富经验的团队,其中包括网站策划、网页美工、网站程序员、网页设计师、平面广告设计师、网络营销人员及形象策划。承接:成都网站制作、成都网站设计、网站改版、网页设计制作、网站建设与维护、网络推广、数据库开发,以高性价比制作企业网站、行业门户平台等全方位的服务。如果对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,开发过程中需要注意一下几点:
Exporter的整体文本数据格式:
Exporter的返回的是文本内容,其中以行为单位,空行将被忽略, 文本内容最后一行为空行;
文本内容以“# HELP”开头的行为注释,表示帮助信息,以“# TYPE”开头的行表示此Metric的类型;
exporter有四种数据类型,分别为:counter/gauge/histogram/summary。
Exporter每一行文本的格式
在每一行文本的最后不能有空格,否则会不识别
在每一Metric行代表一个Key、Value对,Value的值是float类型,如果有两个Value值,最后
一个会被认为是时间戳进行保存,比如:
http_requests_total{method="post",code="200"} 1027 1395066363000
Metrics的Label的value值必须要用双引号“”引起来
Exporter的Content-Type必须是text类型:
这里我flask返回页面的Content-Type设置为:text/plain
4. Prometheus有自己的python的client:
项目地址如下:
https://github.com/prometheus/client_python
如果不想重复造轮子,可以选择用官网提供的lient端。
5. Exporter接口的响应时间
默认Prometheus是每隔15秒抓取一次数据,每次的timeout超时时间是10s,这个也可以在配置文件里自定义。要注意Exporter的接口响应时间一定要比server配置里的小。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
本文名称:开发自己的分布式监控PrometheusExporter时遇到的坑-创新互联
本文路径:http://azwzsj.com/article/dpodch.html