使用Prometheus+Grafana实现监控
我们用 actuator 暴露应用本身的线程、bean 等信息,但是这些信息还是独立于 Prometheus 之外的。下面我们
将介绍如何将 SpringBoot Actuator 与 Prometheus 结合起来。
我们同样从 Spring Initializr 创建一个名为 spring-web-prometheus-demo 的项目,选取的依赖包括:
- Spring Web
- Spring Boot Actuator
- Prometheus
这里增加了一个 Prometheus 包。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.4</version>
<relativePath/>
</parent>
<groupId>com.example</groupId>
<artifactId>spring-web-prometheus-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring-web-prometheus-demo</name>
<description>使用 Prometheus + Grafana 实现监控</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<version>2.4.5</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.4.5</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
项目打开后,在 application.properties
中加入如下配置,打开相关的端口。
management.endpoint.metrics.enabled=true
management.endpoints.web.exposure.include=*
management.endpoint.prometheus.enabled=true
management.metrics.export.prometheus.enabled=true
启动类:
package com.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringWebPrometheusDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SpringWebPrometheusDemoApplication.class, args);
}
}
接着启动项目,访问 localhost:8080/actuator/prometheus
可以看到 SpringBoot 的应用信息都以
Prometheus 的标准形式输出了。
下面我们使用 Grafana 官网 - Dashboards 模块 中的「JVM(Micrometer)」图表模板来展示应用的各项指标。
点击JVM (Micrometer) dashboard for Grafana | Grafana Labs 可以获取到 dashboard 的 ID 为:4701。
接着我们在 Grafana 页面点击「Import」菜单进入导入设置页面。
我们进入「Import」页面,填入模板的 ID,并点击「Load」按钮。
系统会自动读取模板 ID 对应的信息并显示在页面上。你需要选择模板的数据源,这里我选择了「Prometheus」
数据源,也就是本文应用所在的数据源。
设置完毕后点击「Import」按钮,则进入到看板页面。
我们还需要配置下 prometheus.yml
文件,让其去拉取 Node Exporter
的数据。
我们配置一下 Prometheus 的配置文件,让 Prometheus 服务器定时去业务数据源拉取数据。编辑
prometheus.yml
并在 scrape_configs 节点下添加以下内容:
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: "prometheus"
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ["localhost:9090"]
# 采集node exporter监控数据
- job_name: 'node'
static_configs:
- targets: ['192.168.2.186:8080']
# 采集JVM监控数据
- job_name: 'jvm-node'
metrics_path: /actuator/prometheus
static_configs:
- targets: ['192.168.2.185:8080']
新增一个任务,是名为 jvm-node 的任务,其从「192.168.2.185:8080」地址读取数据。
配置完成后,我们重新启动 Prometheus。
$ ./prometheus --config.file=prometheus.yml
最后的效果:
从看板我们可以看到许多信息,例如:应用启动持续时间、应用启动时间、堆的使用率、CPU 使用率等信息。
总结:
我们通过 Spring Boot Actuator 进行监控指标收集的,使用一个 Grafana 的模板将这些信息都展示在 Grafana 面
板上。看到这里,我们已经掌握了 Prometheus 监控的 80% 内容了。但是如果我们有一些业务指标需要监控,我文章来源:https://www.toymoban.com/news/detail-519205.html
们应该如何实现呢?可以通过自定义监控指标。文章来源地址https://www.toymoban.com/news/detail-519205.html
到了这里,关于使用Prometheus+Grafana实现监控的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!