还不会JVM监控告警?一篇文章教会你!

SpringBoot + Prometheus + Pushgateway + Grafana 实现JVM监控告警

前言

大多数兄弟服务上线后都没有查看JVM运行情况的习惯,或者想要对现有服务进行JVM运行时监控但没有好的方案。那么这篇文章一定要看!

本篇文章主要记录如何通过Springboot将暴露的metrics endpiont信息推送到Pushgateway,然后通过PrometheusPushgateway拉取监控指标在Grafana进行展示
在这里插入图片描述

添加依赖

<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
    <version>1.7.5</version>
</dependency>
<dependency>
    <groupId>io.prometheus</groupId>
    <artifactId>simpleclient_servlet</artifactId>
    <version>0.12.0</version>
</dependency>
<dependency>
    <groupId>io.prometheus</groupId>
    <artifactId>simpleclient_pushgateway</artifactId>
    <version>0.12.0</version>
</dependency>

yaml配置文件

在yaml中添加如下配置,如果已存在到就不要重复写了

spring:
  application:
    name: your-project-name
management:
  endpoints:
    web:
      exposure:
        # 暴露端口:metrics,其中就包含我们需要的JVM相关指标
        # 如果想暴露多个示例:[health,info,metrics]
        include: metrics
  metrics:
    tags:
      application: ${spring.application.name}
    export:
       prometheus:
          pushgateway:
            #pushgateway地址
            baseUrl: 127.0.0.1:8080
            #推送周期
            pushRate: 15s
            #job定义名
            job : ${spring.application.name}
            #启用推送
            enabled: true

创建配置类 MetricsAutoConfiguration

该类主要作用为:增加除了metrics默认暴露的基础信息之外添加一些额外的信息

import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryCustomizer;
import org.springframework.context.annotation.Bean;

import java.net.InetAddress;
import java.net.UnknownHostException;

/**
 * @Description: metrics自动配置
 * @Author: Eayon Lee
 * @Time: 2022-07-01 14:35
 **/
public class MetricsAutoConfiguration {

    private static String HOST_IP = "127.0.0.1";
    private static String HOST_NAME = "hostname";

    @Bean
    MeterRegistryCustomizer<MeterRegistry> configurer(@Value("${spring.application.name}") String appName) {
        InetAddress address = null;
        try {
            address = InetAddress.getLocalHost();
            HOST_IP = address.getHostAddress();
            HOST_NAME = address.getHostName();
        } catch (UnknownHostException e) {
        }
        return (registry) -> {
            registry.config().commonTags("hostip", HOST_IP);
            registry.config().commonTags("hostname", HOST_NAME);
            registry.config().commonTags("customapp", appName);
        };
    }
}

启动一个Pushgateway服务

因为我们的SpringBoot项目启动时会连接到Pushgateway发送数据,所以我们还需要起一个Pushgateway服务

docker run -d \ 
 --restart always \
-p 8080:9091\
-v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime\
-v /tmp/prometheus-data:/prometheus-data/ \ 
--name kw_prometheus_pushgateway\
prom/pushgateway:latest

验证

启动SpringBoot项目

启动就完了,没啥好说的

访问Pushgateway服务

访问Pushgateway服务地址:127.0.0.1:8080,查看是否存在对应Job(PS:该Job名称为application.yaml中配置的Job属性值)
在这里插入图片描述

如存在则说明配置成功

配置Prometheus

如何部署一个Prometheus这里不做赘述,大家百度就可以了。

当部署好后需要在Prometheus的配置文件中添加上我们上一步启动的Pushgateway地址后重启,配置内容如下:

scrape_configs:
 # 名字随意就好
  - job_name: 'pushgateway'
    scrape_interval: 15s
    static_configs:
    - targets: ['127.0.0.1:8080']

配置Grafana

老规矩,怎么部署一个Grafana大家百度,不做赘述,部署好后继续往下

在Grafana配置Prometheus数据源

进入数据源面板
在这里插入图片描述

添加数据源
在这里插入图片描述

选择数据源
在这里插入图片描述

配置数据源
在这里插入图片描述

创建Dashboard面板

进入管理业页
在这里插入图片描述

导入面板
在这里插入图片描述

输入面板编号12856后点Load加载
在这里插入图片描述

填写基础信息并且选择数据源后点Import导入
在这里插入图片描述

完成展示

在这里插入图片描述

要使用Prometheus监控JVM,你需要使用Prometheus的Java客户端库。该库提供了一组指标和工具,帮助你收集、处理和导出JVM的性能数据,以供Prometheus进行监控告警。 以下是一些基本步骤,帮助你使用Prometheus监控JVM并设置告警: 1. 安装Prometheus Java客户端库 你可以从Maven中央仓库中下载Prometheus Java客户端库,并将其添加到你的项目中。你也可以使用Gradle或Maven等构建工具,来自动下载和管理该库。 2. 导出JVM指标 使用Prometheus Java客户端库,你可以导出JVM的指标。这些指标包括JVM的内存使用情况、线程数、垃圾回收和类加载器等信息。你可以选择使用预定义的指标,或自定义指标来监控JVM。 3. 配置Prometheus 在Prometheus的配置文件中,你需要添加一个job来收集导出的JVM指标。你可以使用以下示例配置: ``` - job_name: 'jvm' metrics_path: '/actuator/prometheus' static_configs: - targets: ['localhost:8080'] ``` 其中,`metrics_path`指定了JVM指标的路径。`static_configs`指定了Prometheus的目标,即JVM应用程序的地址和端口。 4. 设置告警规则 在Prometheus的告警规则文件中,你可以设置规则来触发告警。例如,如果JVM的堆内存使用率超过80%,则触发告警。以下是一个示例则: ``` groups: - name: jvm.rules rules: - alert: JVMHeapMemoryUsageHigh expr: (jvm_memory_used_bytes{area="heap"} / jvm_memory_max_bytes{area="heap"}) * 100 > 80 for: 5m labels: severity: warning annotations: summary: "JVM heap memory usage is high" description: "JVM heap memory usage is {{ $value }}%" ``` 在该规则中,`expr`表示告警表达式,如果该表达式的结果为true,则触发告警。`for`指定了连续多长时间表达式的结果为true才会触发告警。`labels`和`annotations`用于设置告警的标签和注释。 5. 启动Prometheus和JVM应用程序 最后,你需要启动Prometheus和JVM应用程序,以便它们可以开始收集和处理指标。你可以使用以下命令启动Prometheus: ``` ./prometheus --config.file=prometheus.yml ``` 其中,`prometheus.yml`是你的Prometheus配置文件的路径。 你可以使用以下命令启动JVM应用程序: ``` java -javaagent:/path/to/jmx_prometheus_javaagent.jar=8080:/path/to/config.yaml -jar your-app.jar ``` 其中,`jmx_prometheus_javaagent.jar`是Prometheus Java客户端库中包含的代理程序,用于导出JVM指标。`config.yaml`是该代理程序的配置文件,用于指定导出的指标和端口。`your-app.jar`是你的JVM应用程序的路径。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值