參考文章: 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。
點擊其他的按鈕時, 提示 取消操作? 撤銷操作? 保存操作?
保存即可。
這里可以選擇刷新時間。