Prometheus监控栈 监控java程序springboot

监控java程序springboot,Prometheus监控栈:Prometheus+Grafana+Alertmanager

一、软件环境介绍

Iava程序广泛运用于各类业务场景的开发:web网站、金融服务领域,以及访问量大的业务领域中。所以本章节主要以iava的web程序为例讲解,怎么将iavaweb-springboot程序接入prometheus

主机清单

职责 ip地址 备注
Prometheus服务器 192.168.92.11 docker-compose模式的prometheus
待监控Linux 192.168.92.12 待准备组件:openjdk17

监控架构

二、写一个简单的springboot程序

java编辑器中,新创建一个springboot程序,为后续步骤把springboot程序的性能数据抛出做准备。(我的这个springboot工程是之前写过的oshi-app)

。pom.xml(略)

。创建主启动类testproject.Application.java(略)

。创建application.yaml(略)

。写一个视图类controller.java、用于restful测试访问(略)

。maven reload看有否工程maven加载报错

。本机运行testproject工程,看能否访问http://localhost:8080/metrics/cpuload

三、让springboot程序抛出监控数据

我们会在spring boot 工程中引入micrometer-registry-prometheus、spring-boot starter.actuator来实现指标的暴露,下面对这两个组件进行一个介绍

micrometer-registry-prometheus

Micrometer它是lava生态中一个组件,可以把它理解为metric界的SLF4j。

Micrometer 为 lava 平台上的性能数据收集提供了一个诵用的 AP!,它提供了多种度量指标 类型(Timers、Guauges、Counters等),同时支持接入不同的监控系统,例如 Influxdb、Graphite、Prometheus等。这里我们使用micrometer-registry-prometheus针 对prometheus的实现

spring-boot-starter-actuator

Spring Boot Actuator是Spring Boot提供用于对应用系统进行自省和监控的功能模块,基于此开发人员可以方便地对应用系统某些监控指标进行查看、统计、审计、标收集等。Actuator提供了基于Http端点或JMX来管理和监视应用程序。

。添加pom.xml依赖

复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

。修改application.yaml

增加监控端点

复制代码
server:
  port: 8080
  # 开启tomcat指标
  tomcat:
    mbeanregistry:
      enabled: true
# 设置springboot应用的名称
spring:
  application:
    name: oshi-app
# 暴露actuator端点数据
management:
  endpoints:
    web:
      exposure:
        include: '*'
  metrics:
    tags:
      application: ${spring.application.name}

。maven reload看有否工程maven加载报错

。本机运行springboot程序,访问端点数据

访问http://localhost:8080/actuator/prometheus接口,是否能获取相关指标

四、在Linux-test中部署springboot程序

4.1部署openjdk-17

test中,运行以下命令yum,需要安装openjdk(取决于本机编译用的是什么jdk版本如果本机用idk8,linux服务器也要装idk8,以此类推)

复制代码
# 安装Java 17(需要root权限)
sudo yum install -y java-17-openjdk.x86_64

#如果要装其他的版本,可以运行以下命令,从yum源中找到合适的jdk版本进行安装
yum search java|grep jdk

# 查看java版本(验证安装)
java -version

4.2 运行oshi-app的jar包

maven package打包,资源管理器中生成一个oshi-app-1.0-SNAPSHOT.jar文件

上传这个jar文件到test虚拟机的home目录,运行java命令-执行springboot程序

复制代码
#以jar包方式运行springboot程序
java -jar oshi-app-0.0.1-SNAPSHOT.jar

浏览器中访问http://testip:8080/actuator/prometheus,确认可以采集到数据

五、prometheus中配置springboot的监控节点

5.1增加监控节点

在prometheus.yml文件中进行配置业务系统采集点,5s拉取一次指标,由于Prometheusserver部要在docker 中,所以访问主机IP 用test的ip

192.168.92.11的prometheus上,修改prometheus的配置文件

复制代码
#进入docker-prometheus日录
cd /data/docker-prometheus

#修改prometheus.yml
vi prometheus/prometheus.yml

添加待监控的springboot监控

复制代码
- job_name: 'springBoot'  #监控任务名称,自定义标识   
  scrape_interval: 5s  #采集间隔,每5秒采集一次指标
  metrics_path: '/actuator/prometheus'  #指标路径,Spring Boot Actuator的Prometheus端点
  static_configs:
    - targets: ['192.168.92.12:8080']  #要监控的目标地址和端口
      labels:
        instance: 'springboot服务器'  #为这个目标添加标签,便于识别

保存配置后,让配置生效

复制代码
批prometheus中执行
curl -X POST http://localhost:9090/-/reload

刷新访问http://192.168.92.11:9090/targets?search=、确认新监控的springboot服务器是否生效

5.2 springboot监控指标查询

复制代码
HTTP请求
http_server_requests_seconds_count: 请求次数统计
http_server_requests_seconds_max: 单次HTTP请求耗时峰值(秒)
http_server_requests_seconds_sum: 所有HTTP请求累计耗时(秒)
JVM缓冲区
jvm_buffer_count_buffers: 缓冲区数量
jvm_buffer_memory_used_bytes: 缓冲区内存使用大小(字节)
jvm_buffer_total_capacity_bytes: 缓冲区总容量大小(字节)
类信息
jvm_classes_loaded_classes: 当前已加载类的数量
jvm_classes_unloaded_classes_total: 已卸载类的总数
内存信息
jvm_memory_committed_bytes: JVM已提交内存大小(字节)
jvm_memory_max_bytes: JVM最大可用内存大小(字节)
jvm_memory_used_bytes: JVM当前已使用内存大小(字节)
GC信息
jvm_gc_live_data_size_bytes: GC后存活数据大小(字节)
jvm_gc_max_data_size_bytes: GC处理的最大数据量(字节)
jvm_gc_memory_allocated_bytes_total: GC期间分配的内存总量(字节)
jvm_gc_memory_promoted_bytes_total: 晋升到老年代的内存总量(字节)
jvm_gc_pause_seconds: GC暂停时间总计(秒)
jvm_gc_pause_seconds_max: 最大GC暂停时间(秒)
线程信息
jvm_threads_daemon_threads: 守护线程数
jvm_threads_live_threads: 存活线程数
jvm_threads_peak_threads: 峰值线程数
jvm_threads_states_threads{state="RUNNABLE"}: 不同状态下的线程数(如RUNNABLE状态)
Tomcat信息
tomcat_threads_busy_threads: 忙碌的线程数
tomcat_threads_config_max_threads: 配置的最大线程数
tomcat_threads_current_threads: 当前线程数
tomcat_global_error_total: 总体报错数
tomcat_global_received_bytes_total: 接收的字节总数
tomcat_global_sent_bytes_total: 发出的字节总数
tomcat_global_request_max_seconds: 每秒最大请求数
tomcat_global_request_seconds: 每秒请求数
tomcat_sessions_active_current_sessions: 当前活跃会话数
tomcat_sessions_active_max_sessions: 活跃会话的最大数量
tomcat_sessions_alive_max_seconds: 会话活跃的最长时间(秒)
tomcat_sessions_created_sessions_total: 累计创建的会话数
tomcat_sessions_expired_sessions_total: 累计失效的会话数
tomcat_sessions_rejected_sessions_total: 累计拒绝的会话数
进程信息
process_cpu_usage: CPU使用率
process_files_max_files: 可用的最大文件描述符数
process_files_open_files: 当前打开的文件描述符数
process_start_time_seconds: 进程启动时刻(自纪元以来的秒数)
process_uptime_seconds: 进程运行时间(秒)
系统信息
system_cpu_count: CPU核心数
system_cpu_usage: 系统CPU使用情况
system_load_average_1m: 系统平均负载(过去1分钟)

5.3 grafana中添加springboot的监控模板

copy id to clipboard->grafana的dashboards中Import dashboard

https://grafana.com/grafana/dashboards/4701-jvm-micrometer/


相关推荐
老华带你飞2 小时前
考试管理系统|基于java+ vue考试管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
WZTTMoon2 小时前
Spring Boot OAuth2 授权码模式开发实战
大数据·数据库·spring boot
阿蒙Amon2 小时前
C#每日面试题-属性和特性的区别
java·面试·c#
懒惰蜗牛2 小时前
Day66 | 深入理解Java反射前,先搞清楚类加载机制
java·开发语言·jvm·链接·类加载机制·初始化
赵得C2 小时前
完整 Oracle 12c 分页 Demo(Spring Boot+MyBatis+PageHelper)
spring boot·oracle·mybatis
赵庆明老师3 小时前
VS2026扩展插件Visual Commander
java·开发语言
额呃呃3 小时前
信号量唤醒线程的实际机制
java·开发语言·jvm
程序员阿鹏3 小时前
怎么理解削峰填谷?
java·开发语言·数据结构·spring·zookeeper·rabbitmq·rab
代码的奴隶(艾伦·耶格尔)3 小时前
Sentinel限流熔断
java·前端·sentinel