prometheus解决方案!
pom.xml(依赖)
<!--actuator监控功能所需依赖(内部包含refresh,动态刷新配置信息需要) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
application.properties(yml)配置
server.port=9999
spring.application.name=zhangsan-actuator
spring.jpa.show-sql=true
spring.datasource.url=jdbc:mysql://localhost:3306/springcloudtest?useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=123654
spring.datasource.druid.driver-class-name= com.mysql.jdbc.Driver
management.server.port=9999
management.endpoints.web.base-path:/actuator
management.endpoints.web.exposure.include=*
management.security.enabled=false
启动类:
@SpringBootApplication
public class ActuatorApp extends SpringBootServletInitializer
{
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(ActuatorApp.class);
}
public static void main(String[] args) {
SpringApplication.run(ActuatorApp.class, args);
}
}
Controller层:
@RestController
@RequestMapping("/prometheus")
public class PrometheusController {
@SuppressWarnings("unchecked")
@ApiOperation(value = "获取string",httpMethod="GET")
@GetMapping("/getInfo")
public String getInfo(){
System.out.println("进来了..");
RestTemplate restTemplate = new RestTemplate();
String sss = restTemplate.getForObject("http://localhost:9999/actuator/prometheus"
, String.class);//Prometheus自己的url(调其内部接口)
Map<String,Object> map = new HashMap<String,Object>();
String[] st=sss.split("\\n");
for(int i=0;i<st.length;i++) {
System.out.println("第一次分割后的字符串:"+st[i]);
String[] stt= st[i].split(" ");
System.out.println("二次分割得到的字符串:"+stt[0]);
if(stt[0].equals("#")) {
continue;
}
for(int j = 0;j<stt.length-1;j++) {
map.put(stt[j], stt[j+1]);
}
}
double k = (double) map.get("system_cpu_usage");
long startTime = System.currentTimeMillis();//初始时间
while(k>0.80) {
double k1 = (double) map.get("system_cpu_usage");
if(k1<=0.80) {
System.out.println("不报警");
break;
}
//获取当前的系统时间,与初始时间相减就是程序运行的毫秒数,除以1000就是秒数
long endTime = System.currentTimeMillis();
long usedTime = (endTime-startTime)/1000;
if(usedTime==30) {
System.out.println("报警了,cpu使用率高于80%了,快来处理.....");
System.out.println("报警了,快来处理.....");
break;
}
}
System.out.println("我想拿到的值为:"+map.get("system_cpu_usage"));
System.out.println("拿到的信息有:"+sss);
return sss;
}
}
运行程序,然后在浏览器访问http://localhost:9999/prometheus/getInfo
效果图如下:
访问Prometheus自己的url:http://localhost:9999/actuator/prometheus
效果图:
ok了!