springboot项目通过prometheus和grafana实现监控和报警
一、prometheus
1.1、什么是prometheus?

1.2、安装prometheus
1.2.1、下载

1.2.2、安装

1.2.3、将prometheus集成到应用中
application.yml配置如下:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><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.2、修改prometheus.yml,将应用信息添加进去server:port: 8080spring:application:name: data-analysis#actuator暴露的endpointmanagement:endpoints:web:exposure:include: "*"metrics:tags:application: ${spring.application.name}


1.2.3.3、启动应用和prometheus双击prometheus.exe即可启动#应用名- job_name: "data-analysis"#只要添加了spring-boot-starter-actuator这个依赖就有,写死的/actuator/prometheusmetrics_path: /actuator/prometheusstatic_configs:#这是你应用的ip和端口号- targets: ["127.0.0.1:8080"]




二、grafana
2.1、grafana下载

2.2、grafana安装

2.3、启动访问



2.4、通过grafana展示prometheus采集到的数据
2.4.1、展示应用的JVM信息
2.4.1.2、添加数据源有个螺丝样子的按钮,鼠标放上去,会浮现出来一个下拉列表,点击Data sources@Beanpublic MeterRegistryCustomizer<MeterRegistry> configurer(@Value("${spring.application.name}") String applicationName) {return (registry -> registry.config().commonTags("application", applicationName));}





2.4.1.3、导入一个视图模板鼠标放到左边的+号上,会浮动出一个下拉列表,点击其中的Import




2.4.2、自定义metrics,监控方法执行的次数和耗时
依赖中加上:
启动类中注入一个TimedAspect类型的bean<!--TimedAspect中需要用到aop,所以需要导入--><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId></dependency>
自定义一个service@Beanpublic TimedAspect timedAspect(MeterRegistry registry) {return new TimedAspect(registry);}
加好后重启下你的应用,然后点击prometheus中的链接package com.data.service;import io.micrometer.core.annotation.Timed;import org.springframework.scheduling.annotation.Scheduled;import org.springframework.stereotype.Service;import java.util.Random;@Servicepublic class TimeService {@Scheduled(cron = "*/3 * * * * ?")//@Timed注解可以收集到方法的执行次数和耗时@Timed(description = "timeService.execute")public int execute() throws InterruptedException {int sleepTime = new Random().nextInt(100);Thread.sleep(sleepTime);return sleepTime;}}


2.4.2.2、在grafana中展示这些参数将鼠标放到左边的加号位置,在浮动出来的下拉列表中点击Dashboard#execute方法执行的次数method_timed_seconds_count{application="data-analysis",class="com.data.service.TimeService",exception="none",method="execute",}#execute方法的总耗时method_timed_seconds_sum{application="data-analysis",class="com.data.service.TimeService",exception="none",method="execute",}#execute方法单次执行的最长耗时method_timed_seconds_max{application="data-analysis",class="com.data.service.TimeService",exception="none",method="execute",}


将其填入Metrics browser后面的框中,你会发现一个图形出现了#execute方法执行的次数method_timed_seconds_count{application="data-analysis",class="com.data.service.TimeService",exception="none",method="execute",}

接着可以点击下面的+Query,把其它两条语句也加上


2.4.3、grafana的报警功能


2.4.3.2、添加channel








Rule
Name:规则的名字
Evaluate every:检测频率
For:当触发了报警条件时,等过了For设置的时间后,再发送报警事件
Conditions
WHEN:选择一个聚合函数
OF:query的条件
IS ABOVE:超过,也可选其他操作符
注意:WHEN max() OF ( query C,10s,now) IS ABOVE 5,这个规则大致含义是说:取10秒内的数据,如果最大值大于5就触发告警,那个C是获取数据的查询语句。
No Data & Error Handling
if no data or all values are null:如果没有数据或值都为空
if execution error or timeout:如果执行错误或超时
Notifications
Send to:指定channel
Message:报警内容



评论
