开发自己的分布式监控Prometheus Exporter时遇到的坑

简介:

   这里说下我在开发自己的Prometheus Exporter时遇到的几个坑,所谓的坑,其实是在开发过程中需要注意到的几个关键点,如果忽略,那么可能会产生错误和非预期的结果。

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,开发过程中需要注意一下几点:

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

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

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

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

  2. Exporter每一行文本的格式

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

    2. 在每一Metric行代表一个Key、Value对,Value的值是float类型,如果有两个Value值,最后

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

        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配置里的小。



      本文转自Jx战壕  51CTO博客,原文链接:http://blog.51cto.com/xujpxm/1969879,如需转载请自行联系原作者





相关文章
|
3月前
|
编解码 Prometheus 运维
Prometheus 的监控方法论
【1月更文挑战第24天】
|
3月前
|
存储 Prometheus 监控
Prometheus vs. ELK Stack:容器监控与日志管理工具的较量
随着容器化技术的广泛应用,容器监控与日志管理成为了关键任务。本文将对两种常用工具进行比较与选择,分别是Prometheus和ELK Stack。Prometheus是一款开源的监控系统,专注于时序数据的收集和告警。而ELK Stack则是一套完整的日志管理解决方案,由Elasticsearch、Logstash和Kibana三个组件组成。通过比较它们的特点、优势和适用场景,读者可以更好地了解如何选择适合自己需求的工具。
|
2月前
|
Prometheus 监控 Kubernetes
如何用 Prometheus Operator 监控 K8s 集群外服务?
如何用 Prometheus Operator 监控 K8s 集群外服务?
|
2月前
|
Prometheus 监控 Kubernetes
Prometheus Operator 与 kube-prometheus 之二 - 如何监控 1.23+ kubeadm 集群
Prometheus Operator 与 kube-prometheus 之二 - 如何监控 1.23+ kubeadm 集群
|
27天前
|
NoSQL Java Redis
【分布式技术专题】「分布式技术架构」手把手教你如何开发一个属于自己的分布式锁的功能组件(二)
【分布式技术专题】「分布式技术架构」手把手教你如何开发一个属于自己的分布式锁的功能组件
15 0
|
27天前
|
缓存 应用服务中间件 数据库
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(多级缓存设计分析)
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(多级缓存设计分析)
31 1
|
2月前
|
Prometheus 监控 Cloud Native
使用 Prometheus 配置 SLO 监控和告警
使用 Prometheus 配置 SLO 监控和告警
|
3月前
|
Prometheus 监控 Java
微服务框架(二十四)Prometheus 监控埋点
此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。 本文为Prometheus 监控埋点 本系列文章中所使用的框架版本为Spring Boot 2.0.3-REL...
|
3月前
|
Prometheus 监控 Cloud Native
微服务框架(二十二)Prometheus + Grafana 可视化监控
此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。 本文为Prometheus + Grafana 可视化监控的介绍,下篇为Prometheus + Grafana...
|
3月前
|
Prometheus 监控 Cloud Native
微服务框架(十九)Spring Boot 可视化监控 Prometheus + Grafana
  此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。   本文为Spring Boot 通过 micrometer 的监控门面,实现Prometheus + G...

热门文章

最新文章