使用Prometheus+Grafana实现监控

使用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% 内容了。但是如果我们有一些业务指标需要监控,我

们应该如何实现呢?可以通过自定义监控指标。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值