参考文章: https://blog.csdn.net/qq_38362419/article/details/108527506
https://blog.csdn.net/u010053119/article/details/110800259
https://www.cnblogs.com/xidianzxm/p/11542135.html
1、安装prometheus
1.1下载prometheus
打开prometheus的官网:https://prometheus.io/ , 点击DOWNLOAD
我下载的是window版本:
1.2 运行prometheus。
解压后进入目录运行prometheus.exe
访问端口9090即可,需要查看监控的对象列表可以进入status>targets查看
2、监控window系统信息
2.1下载windows_exporter, 监控 window系统信息。
在这里下载相关exporter:https://github.com/prometheus-community/
直接msi安装即可。
2.2 配置prometheus。
默认端口是9182,然后到prometheus安装目录修改配置文件prometheus.yml,修改配置文件后重启prometheus,然后就可以看到targets列表增加的项目,状态为up表示正常监控,状态为down表示未检测到
# winodows monitor
- job_name: "windows_exporter"
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ["localhost:9182"]
重启prometheus,进入status>targets查看
在标红处可选择监控的window指标:
选择指标后,点击execute。
3.监控mysql
在https://prometheus.io/download/ 下载mysqld_exporter
解压后,添加.my.cnf文件。
内容如下:
[client]
host=192.168.1.173
user=xxx
password=xxx
运行mysqld_exporter.exe文件:
Mysqld_exporter的运行端口是:9104
在prometheus的yaml中添加:
# mysql monitor
- job_name: "mysql_exporter"
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ["localhost:9104"]
重启prometheus:
Mysql相关的监控也有了:
4、监控springBoot的值
4.1 先搭建springBoot项目,添加prometheus的依赖
<!--增加依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-core</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
4.2 配置yaml
spring:
application:
name: prometheus-demo
server:
port: 8877
management:
endpoints:
web:
exposure:
include: '*'
base-path: /
metrics:
tags:
application: ${spring.application.name}
4.3 SpringBoot启动时加载这个Bean
@Bean
MeterRegistryCustomizer<MeterRegistry> configurer(@Value("${spring.application.name}") String applicationName) {
return (registry) -> registry.config().commonTags("application", applicationName);
}
4.4 绑定MeterBinder
@Component
public class JobMetrics implements MeterBinder {
public Counter job1Counter;
public Counter job2Counter;
public Map<String, Double> map;
JobMetrics() {
map = new HashMap<>();
}
@Override
public void bindTo(MeterRegistry meterRegistry) {
this.job1Counter = Counter.builder("counter_builder_job_counter1")
.tags(new String[]{"name", "tag_job_counter1"})
.description("description-Job counter1 execute count").register(meterRegistry);
this.job2Counter = Counter.builder("counter_builder_job_counter2")
.tags(new String[]{"name", "tag_job_counter2"})
.description("description-Job counter2 execute count ").register(meterRegistry);
Gauge.builder("gauge_builder_job_gauge", map, x -> x.get("x"))
.tags("name", "tag_job_gauge")
.description("description-Job gauge")
.register(meterRegistry);
}
}
4.5 建定时任务测试
@Component
@EnableScheduling
public class MyJob {
private Integer count1 = 0;
private Integer count2 = 0;
@Autowired
private JobMetrics jobMetrics;
@Async("main")
@Scheduled(fixedDelay = 1000)
public void doSomething() {
count1++;
jobMetrics.job1Counter.increment();
jobMetrics.map.put("x", Double.valueOf(count1));
System.out.println("task1 count:" + count1);
if(count1%5==0){
System.out.println("%5==0");
jobMetrics.map.put("x", Double.valueOf(1));
}
}
@Async
@Scheduled(fixedDelay = 10000)
public void doSomethingOther() {
count2++;
jobMetrics.job2Counter.increment();
System.out.println("task2 count:" + count2);
}
}
4.6 建Controller测试
@RestController
public class CounterController {
@Autowired
private JobMetrics jobMetrics;
@RequestMapping(value = "/counter1", method= RequestMethod.GET)
public void counter1() {
jobMetrics.job2Counter.increment();
}
@RequestMapping(value = "/counter2", method= RequestMethod.GET)
public void counter2() {
jobMetrics.job2Counter.increment();
}
@RequestMapping(value = "/gauge", method= RequestMethod.GET)
public void gauge(@RequestParam(value = "x") String x) {
System.out.println("gauge controller x"+x);
jobMetrics.map.put("x",Double.valueOf(x));
}
}
启动springBoot后,配置prometheus。
4.7配置prometheus
#SpringBoot应用配置
- job_name: 'prometheus_demo'
scrape_interval: 5s
metrics_path: '/prometheus'
static_configs:
- targets: ['localhost:8877']
重启prometheus:
监控的指标就出来了:
5、安装grafana
5.1 下载grafana
地址:https://grafana.com/grafana/download?platform=windows
需要注册后才能下载。我下载的是grafana-enterprise-8.2.5.windows-amd64.msi,直接安装就可以。
安装完成后进入grafana/bin目录下,双击运行garafana-server.exe,访问地址http://localhost:3000/,默认用户名密码admin/admin
6、向grafana添加prometheus数据源
点Add data source 按钮 添加数据源:
点select,填写prometheus的信息:
填完之后,点下面的save&test按钮。
保存成功后, 可以从以下路径查看已添加的prometheus数据源:
7、向grafana添加监控mysql的仪表板
Grafana官网有提供一些仪表板模板,地址:https://grafana.com/grafana/dashboards/
可全页面搜索mysql:
点mysql Overview
搜索出想要的仪表板后复制它的ID
导入模板:
黏贴复制的id后,点击右侧的Load。
标红处选择prommetheus数据源,然后Import即可。
这是监控mysql的仪表板:
监控window或linux系统的参数也是类似。
8、向grafana添加springBoot的仪表盘,监控自己定义的数据
添加一个空的panel。
复制prometheus要监控的数据:
counter_builder_job_counter1_total{application="prometheus-demo", instance="localhost:8877", job="prometheus_demo", name="tag_job_counter1"}
鼠标离开焦点后,就可以监控了,不过还没保存。
点Query在同一个panel里监控多个值。
点击右上角的Apply。
点击其他的按钮时, 提示 取消操作? 撤销操作? 保存操作?
保存即可。
这里可以选择刷新时间。