SpringBoot自定义prometheus监控

1.

 放干货之前容许我说一些废话(其实觉得也是干货)

从数据层面,可以把prometheus理解成一个简单的数据库,每个metrices可以配置不同的标签,对应着一系列数值,但是如果给这些数值赋予各种业务的,资源的,服务性能的意义,并结合AlertManager,prometheus简直是个神器啊

网上文章很多,入门比较容易,但是我本人学习的时候有个地方理解了比较久,在promethues的graph页,如果查询metrics_name{tag1:"value1",...},可以查到数据,数据以线图展示,这个比较好理解,就是把这个系列每个时间点的数值绘制了出来,但是我要查五分钟内的:metrics_name{tag1:"value1",...}[5m],图表就无法展示了,一度无法理解,这个不就是应该展示前5分钟的数据吗,出现这种疑惑其实是没有理解prometheus真正用法,在prometheus里,永远要把数据想象成每一秒的数值,图表展示的必须是 【时间(精确到秒)】,【这一秒的数值】,是一个一维数组,而metrics_name{tag1:"value1",...}[5m]查出来的是一个二维数组【时间(精确到秒)】,【这一秒前五分钟内的所有数值】,自然就无法绘制线图了,所以我们要对这个数据的第二维度做一些聚合,例如做个sum,或者统计一下count,或者算一下增长量increase,或者平均增长量rate,或者瞬间增长量irate,就再次将二维数组变成了一维数组,就可以在graph中做展现了,栗子:

increase(metrics_name{tag1:"value1",...}[5m])

 

实战

 

假如我有一个定时器,springboot写的,每24小时执行一次,我希望通过prometheus做到少同步一次就告警。

大致思路使用Counter类型,每次执行成功count+1,prometheus增加rules,超过25小时(留一些余地)发现这个metrices增长量小于1说明没同步,就告警。直接贴代码不细说了,比较好理解,唯一不好的地方是组件把关键的接口暴露在/prometheus了,而我需要它在/metrics接口,而且组件默认暴露的接口中也有/metrics,但是不是prometheus需要的数据,所以在配置文件中设置只暴露prometheus,并自己新增/metrics做了一个转发,这个比较生硬,而且组件会默认收集jvm等相关信息暴露给prometheus,我在配置文件里关掉了

 

<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-actuator</artifactId>

</dependency>

<dependency>

    <groupId>io.micrometer</groupId>

    <artifactId>micrometer-registry-prometheus</artifactId>

</dependency>

1

2

3

4

5

6

7

8

如果是格式yml配置文件:

 

management:

  metrics:

    binders:

      jvm:

        enabled: false

      files:

        enabled: false

      integration:

        enabled: false

      logback:

        enabled: false

      processor:

        enabled: false

      uptime:

        enabled: false

  endpoints:

    web:

      exposure:

        include: ["prometheus"]

      base-path: "/"

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

如果是格式properties配置文件:

 

management.metrics.binders.files.enabled=false

management.metrics.binders.integration.enabled=false

management.metrics.binders.jvm.enabled=false

management.metrics.binders.logback.enabled=false

management.metrics.binders.processor.enabled=false

management.metrics.binders.uptime.enabled=false

management.endpoints.web.exposure.include[0]=prometheus

management.endpoints.web.base-path=/

1

2

3

4

5

6

7

8

@Configuration

public class PromConfig {

 

  @Autowired

  PrometheusMeterRegistry registry;

 

  @Bean

  public Counter getCounter() {

    Counter counter = Counter.builder("goods_rank_sync_count")

        .tags("status", "success")

        .description("Number of successful goods rank sync")

        .register(registry);

    return counter;

  }

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

@GetMapping("metrics")

public void metrics(HttpServletResponse response) throws IOException {

  response.sendRedirect("/prometheus");

}

1

2

3

4

数据同步成功时调用:counter.increment();

--------------------- 

作者:hugeo-coala 

来源:CSDN 

原文:https://blog.csdn.net/u010588262/article/details/83094560 

版权声明:本文为博主原创文章,转载请附上博文链接!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值