Prometheus自动发现Exporter方案实现

  • 1. 基础准备
    • 1.1 环境准备
    • 1.2 物料准备
  • 2. 注册中心拉起
  • 3. 自动发现Exporter模板的拉起
    • 3.1 关键配置修改(application-prod.yml)
    • 3.2 声明ExporterMetric
    • 3.3 书写业务逻辑
  • 4. Prometheus方面的配置
    • 4.1 简单自动发现配置
    • 4.2 指定服务自动发现
    • 4.3 附带服务名标示自动发现
  • 5.最终效果

1. 基础准备

1.1 环境准备

JAVA运行环境

1.2 物料准备

  • 基于consul的注册中心或者针对consul做了适配的eureka注册中心
    ps:方便大家操作,我已经打包好了注册中心,直接下载就好Eureka-server-0.0.2-RELEASE
  • 已经搭建完成的promethues
    ps: 关于搭建promethues的教程,请自行百度
  • 需要自动发现的Exporter
    ps: 这里我提供了通用的Exporter模板,直接下载就好promethues-demo

2. 注册中心拉起

  • 方式1:自己搭建Consul注册中心
  • 方式2: 借助提供的Eureka-server-0.0.2-RELEASE.jar完成
    ps: 关于如何启动jar包就不详细说明了,默认启动端口为11111

3. 自动发现Exporter模板的拉起

3.1 关键配置修改(application-prod.yml)

cz:swagger:config:app-name: exporter-demoapp-version: 0.0.1app-description: prometheus-exporter的demoapp-developer-email: chenz74@chinauicom.cnapp-developer-name: XXbase-package: com.example
eureka:client:serviceUrl:defaultZone: http://10.11.5.51:11111/eureka/#    #健康检查(需要spring-boot-starter-actuator依赖)#    healthcheck:#      enabled: trueinstance:# 续约到期时间(默认90秒)lease-expiration-duration-in-seconds: 10# 续约更新时间间隔(默认30秒)lease-renewal-interval-in-seconds: 10prefer-ip-address: true
#超时时间
feign:httpclient:connection-timeout: 30000
management:endpoints:web:exposure:include: "*"endpoint:info:enabled: truehealth:show-details: always
frequency: '0 0/1 * * * ?'
spring:application:name: ${cz.swagger.config.app-name}

修改defalutZone为注册中心地址,视业务情况修改指标刷新频率frequency,根据exporter功能指定cz开头的服务相关信息。

3.2 声明ExporterMetric

MetricFactory.java

package com.example.promethuesdemo.metric;import io.prometheus.client.CollectorRegistry;
import io.prometheus.client.Gauge;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;/*** @author chenzhen* Created by chenzhen on 2020/6/17.*/
@Component
public class MetricFactory {@Autowiredprivate CollectorRegistry collectorRegistry;@Bean("tcp_avg_client_delay")public Gauge tcpClientDelay(){return Gauge.build().name("tcp_avg_client_delay").labelNames("province","area","center").help("一分钟内平均(synack和ack之间的时间差,单位ms)").register(collectorRegistry);}}

一个指标即为一个bean,多个指标声明多个bean。

3.3 书写业务逻辑

Timer.java

package com.example.promethuesdemo.time;import io.prometheus.client.Gauge;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;import java.util.logging.Logger;/*** @author chenzhen* Created by chenzhen on 2020/6/23.*/
@Component
@Slf4j
public class Timer {@Qualifier("tcp_avg_client_delay")@Autowiredprivate Gauge tcpAvgClientDelay;@Scheduled(cron = "${frequency}")public void frequencySip(){log.info("刷新sip指标");//todo 书写指标获取逻辑tcpAvgClientDelay.labels("A","B","C").set(1);log.info("刷新完毕");}
}

4. Prometheus方面的配置

普罗官方配置详解

4.1 简单自动发现配置

  - job_name: 'consul-prometheus'scheme: httpmetrics_path: '/actuator/prometheus'consul_sd_configs:#consul 地址- server: '10.11.5.51:11111'scheme: httpservices: []

关键参数释义

  • job_name 作业名,可以理解为组名,其下可以有多个实例配置
  • scheme 默认为http
  • metrics_paht 获取到监控指标的接口(Exporter对外暴露的数据接口)
  • consul_sd_configs 自动注册配置
  • server 注册中心地址
  • scheme 交互方式

4.2 指定服务自动发现

  - job_name: 'consul-prometheus'scheme: httpmetrics_path: '/actuator/prometheus'consul_sd_configs:#consul 地址- server: '10.11.5.51:11111'scheme: httpservices: [SERVIER-A,SERVICE-B]

关键参数释义

  • services 指定使用自动注册的服务名

4.3 附带服务名标示自动发现

  - job_name: 'consul-prometheus'relabel_configs:- source_labels: [__meta_consul_service_]regex: __meta_consul_service.*replacement: service_nameaction: labelmapscheme: httpmetrics_path: '/actuator/prometheus'consul_sd_configs:#consul 地址- server: '10.11.5.51:11111'scheme: httpservices: []

关键参数释义

  • relabel_configs relabel_config的作用就是将metrics中 label 的值做一个替换,具体的替换规则由配置决定
  • source_labels 源label,要要操作的指标
  • regex: 正则匹配
  • replacement 替换内容
  • action 行为
    ps:
    replace:将regex与连接的source_labels匹配。然后,将target_label设置为replacement,在replacement中将匹配组引用(1,{1},1,{2},…)替换为它们的值。如果正则表达式不匹配,则不进行替换。
    keep:删除正则表达式与连接的source_labels不匹配的目标。
    drop:删除正则表达式与连接的source_labels匹配的目标。
    hashmod:将target_label设置为连接的source_labels散列的模数。
    labelmap:将regex与所有标签名称匹配。然后将匹配标签的值复制到替换中使用匹配组引用(1,{1},1,{2},…)替换给出的标签名称中,替换为匹配标签的值
    labeldrop:将regex与所有标签名称匹配。匹配的任何标签都将从标签集中删除。
    labelkeep:将regex与所有标签名称匹配。任何不匹配的标签都将从标签集中删除。

5.最终效果

新增的Exporter服务无需再在promtheus做任何配置,普罗可以自动采集相关指标.
访问prometheus的/targets接口查看所有的exporter信息

Prometheus自动发现Exporter实现方案(一看就懂)相关推荐

  1. 总结:Prometheus服务发现机制

    一.介绍 当我们使用各类exporter分别对系统.数据库和HTTP服务进行监控指标采集,对于所有监控指标对应的Target的运行状态和资源使用情况,都是用Prometheus的静态配置功能 stat ...

  2. SpringCloud 入门教程(四): 分布式环境下自动发现配置服务

    前一章, 我们的Hello world应用服务,通过配置服务器Config Server获取到了我们配置的hello信息"hello world". 但自己的配置文件中必须配置co ...

  3. Prometheus监控神技--自动发现配置

    一.自动发现类型 在上一篇文中留了一个坑: 监控某个statefulset服务的时候,我在service文件中定义了个EP,然后把pod的ip写死在配置文件中,这样,当pod重启后,IP地址变化,就监 ...

  4. CC00339.CloudKubernetes——|KuberNetes运维.V56|——|Prometheus.v01|自动发现.v01|创建secret|

    一.自动发现配置:创建secret ### --- 配置Prometheus-additional.yaml配置文件 ~~~ 创建prometheus-additional配置文件[root@k8s- ...

  5. prometheus+consul 服务自动发现监控

    prometheus+consul 服务自动发现监控 搭建prometheus监控平台请参考:https://blog.csdn.net/han949417140/article/details/11 ...

  6. zabbix===》微信报警、聚合图形、自动发现自动注册、监控NFS、MySQL、web服务、URL地址

    一.企业微信号申请 https://work.weixin.qq.com/ 1.注册 因为我们没有企业,所以我们选择组织. 下一步, 按需填好相应信息 2.配置微信企业号 设置好相应信息,后记录下企业 ...

  7. Prometheus服务发现+Grafana炫酷的界面展示

    目录 部署service discovery 相关概念 prometheus 服务发现机制 基于文件服务发现 文件发现的作用 基于DNS自动发现 基于consul发现 相关概念 安装consul_1. ...

  8. Prometheus 服务发现

    文章目录 一.Prometheus 部署 二.部署监控其他节点 1. 主配置文件解析 2. server 节点配置 3. 加入slave节点监控 4. 验证是否加入成功 三.表达式浏览器 1. 表达式 ...

  9. 3306 端口 要不要修改_zabbix 自动发现并监控所有端口

    背景 端口监控是很普遍的一个需求,当一台机器上跑了几十个服务,就想着能不能自动发现并监控所有的端口呢? 毕竟我们的宗旨是能自动绝不手动,摸鱼才是工作的真谛. 实施 解决方案基于 Linux 命令 ss ...

  10. zabbix 监控项自动发现过滤_Zabbix监控之配置Linux自动发现与自动注册报警

    1.关于linux客户端的部署上篇已经介绍不清楚的可以去看一下(Zabbix监控之agent和邮件报警配置) 1.1.一.配置自动发现: 1.1.1.1.1.打开Zabbix Web管理界面,创建Za ...

最新文章

  1. String和StringBuilder
  2. 敏捷软件开发实践——估算与计划(01)
  3. java 10-4 Scanner方法
  4. 数字通信介绍(4) OFDM为何如此热门?
  5. python pandas空值与缺失值处理
  6. 使用Docker启动Grafana环境
  7. android edittext 不滚动,EditText 设置可以垂直滑动但是不可输入
  8. 2018春考计算机技能考试题目,2018年山东省春季高考技能考试信息技术类专业考试(样题).PDF...
  9. 【二分法】计蒜客:求方程的近似解
  10. at指令代码 stm32f030_汇编语言程序设计第二篇——80X86汇编语言伪指令
  11. 串口连接设置超级终端管理交换机
  12. 在线URL编码加密工具
  13. Java设计模式:简单工厂模式(附实例代码)每天一学设计模式
  14. HTML第五章课后作业,第五章 组合逻辑电路 课后习题答案详解 资料资料资料.pdf...
  15. 苹果计算机格式化磁盘,MAC格式化移动硬盘
  16. 爬楼梯 java_爬楼梯问题java实现
  17. 数据库范式之间的转换 - 保持函数依赖分解与有/无损分解
  18. 利用代码快速批量取消微博的关注
  19. TEZ和MR简要区别
  20. 程序员:用代码改变世界

热门文章

  1. 由sqlite在手机上的存储位置,引发的onCreate在哪里执行的小结
  2. jQuery-可收缩面板
  3. 用CALayer实现下载进度条
  4. 如何在代码里打开Android手机通知状态栏
  5. MySQL Oracle默认排序_PostgreSQL、MySQL、Oracle,查询的默认排序是怎样的?
  6. 一个java文件里可以有多个类嘛?
  7. 计算机外围设备哪两类,计算机原理2010年4月真题(02384)
  8. OpenCV-图像处理(08、模糊图像一)
  9. 虚拟机与ubuntu(一):VirtureBox虚拟机安装和ubuntu14搭建
  10. 请确保dx环境安装正常后进行开播_虎牙直播助手常见问题汇总