首页 > 编程语言 >9.prometheus监控--监控springboot2.x(Java)

9.prometheus监控--监控springboot2.x(Java)

时间:2024-04-24 21:47:49浏览次数:32  
标签:Java 监控 tomcat -- grafana prometheus threads jvm total

一、环境部署

yum search java | grep jdk
yum install -y java-11-openjdk-devel

二、监控java应用(tomcat/jar)

JMX exporter 负责收集 Java 虚拟机信息---没举例,等以后再做测试

进入到tomcat安装目录,vim

PROMETHEUS_JMX_EXPORTER_OPTS="-javaagent:../prometheus-exporter/jmx_prometheus_javaagent-0.18.0.jar=12345:../prometheus-exporter/tomcat.yml"
JAVA_OPTS="-Xmx4096m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=2048m -Xss1024K $PROMETHEUS_JMX_EXPORTER_OPTS"

三、监控java应用(springboot)

分4个步骤

1、引入maven依赖

2、application.propertiesl配置

3、prometheus配置采集springboot2.x应用提供的监控样本数据

4、grafana将prometheus作为数据源进行可视化展示

3.1 springboot项目(二选一)

引入maven依赖

修改pom.xml添加如下代码,引入Spring Boot Actuator的相关依赖。

<!-- spring-boot-actuator依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- prometheus依赖 -->
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

application.propertiesl配置

在application.properties中添加相关配置暴露监测数据端口,如果是application.yaml格式,需要转成yaml

出于安全考虑,默认情况下除了/health和/info之外的所有actuator都是关闭的

server.port=8081
spring.application.name=springboot-demo

management.endpoints.web.exposure.include=prometheus,health
#management.endpoints.web.exposure.include=*
#management.endpoints.web.exposure.exclude=env,beans
management.metrics.tags.application=${spring.application.name}

3.2 使用现成的springboot项目(二选一)

docker安装

提前把springboot项目添加了依赖,并开启了prometheus,封装成镜像,服务器上安装的CAdvisor已经把8080端口占用了。所以映射为8081端口
docker run -d --restart=always -p 8081:8080 --name springboot-demo linge365/springboot-demo

检查:

http://192.168.10.100:8081/actuator/prometheus

3.3 Prometheus配置

prometheus配置采集springboot2.x的应用target提供的数据

cd /data/docker-prometheus 

#在scrape_configs(搜刮配置):下面增加如下配置:

cat >> prometheus/prometheus.yml << "EOF"
#  Spring Boot 2.x 应用数据采集配置
  - job_name: 'springboot-demo'
    metrics_path: '/actuator/prometheus'
    scrape_interval: 5s
    static_configs:
    - targets: ['192.168.10.100:8081']
EOF

重新加载:curl -X POST http://localhost:9090/-/reload

查看:

http://192.168.10.14:9090/graph

http://192.168.10.14:9090/targets?search=

 3.4 监控指标

process_files_max_files # 最大文件处理数量

tomcat_sessions_active_current_sessions # Tomcat 当前活跃 session 数量

tomcat_sessions_alive_max_seconds # Tomcat session 最大存活时间

jvm_buffer_total_capacity_bytes   # 预估的池中缓冲区的总容量

jvm_threads_daemon_threads # 当前守护进程的线程数量

tomcat_global_request_max_seconds{name="http-nio-8080",} # 全局最长一次请求的时间

tomcat_sessions_active_max_sessions # 最大活跃 session 数量

system_cpu_usage # CPU 利用率
jvm_buffer_memory_used_bytes # 预估 Java 虚拟机用于此缓冲池的内存

jvm_classes_loaded_classes # 当前在 Java 虚拟机中加载的类的数量

jvm_memory_committed_bytes # 为 Java 虚拟机提交的内存量(以字节为单位)

jvm_threads_live_threads # 当前线程数,包括守护进程和非守护进程的线程

tomcat_threads_config_max_threads # 配置的 Tomcat 的最大线程数

tomcat_global_received_bytes_total # Tomcat 接收到的数据量

tomcat_global_sent_bytes_total # Tomcat 发送的数据量

tomcat_threads_current_threads # Tomcat 当前的线程数

tomcat_sessions_created_sessions_total # Tomcat 创建的 session 数

system_load_average_1m # 在一段时间内,排队到可用处理器的可运行实体数量和可用处理器上运行的可运行实体数量的总和的平均值

tomcat_sessions_expired_sessions_total # 过期的 session 数量

jvm_buffer_count_buffers # 预估的池中的缓冲区数量

jvm_memory_used_bytes# JVM 内存使用量

process_uptime_seconds # Java 虚拟机的正常运行时间

jvm_gc_memory_allocated_bytes_total # 增加一个 GC 到下一个 GC 之后年轻代内存池的大小增加

jvm_gc_pause_seconds_count  # GC暂停耗时数量和总时间
jvm_gc_pause_seconds_sum
jvm_gc_pause_seconds_max

tomcat_sessions_rejected_sessions_total # 被拒绝的 session 总数

jvm_gc_live_data_size_bytes# Full GC 后的老年代内存池的大小

tomcat_threads_busy_threads  # Tomcat 繁忙线程数

jvm_threads_peak_threads # 自 Java 虚拟机启动或峰值重置以来的最高活动线程数

jvm_threads_states_threads # 当前具有 NEW 状态的线程数

jvm_gc_max_data_size_bytes # jvm_gc内存池的最大大小

http_server_requests_seconds_count #某个接口的请求数量和请求总时间
http_server_requests_seconds_sum
http_server_requests_seconds_max

jvm_gc_memory_promoted_bytes_total # GC之前到GC之后的老年代内存池大小的正增加计数

# 日志按级别计数
logback_events_total{application="prometheus-demo",level="info",} 7.0
logback_events_total{application="prometheus-demo",level="trace",} 0.0
logback_events_total{application="prometheus-demo",level="warn",} 0.0
logback_events_total{application="prometheus-demo",level="debug",} 0.0
logback_events_total{application="prometheus-demo",level="error",} 0.0

process_start_time_seconds # 启动时间

process_files_open_files # 打开文件描述符的数量

tomcat_global_error_total  # 异常数量

jvm_memory_max_bytes # 可用于内存管理的最大内存量(以字节为单位)

process_cpu_usage # 最近的 CPU 利用率

jvm_classes_unloaded_classes_total # 自 Java 虚拟机开始执行以来卸载的类总数

system_cpu_count # CPU 核数

tomcat_global_request_seconds_count  # 全局请求总数和总耗时
tomcat_global_request_seconds_sum

3.5 触发器

cat >> prometheus/rules/springboot.yml <<"EOF"
groups:
- name: SprinBoot
  rules:
  - alert: SprinBooErrorEvents
    expr: increase(logback_events_total{level="error"}[2m]) > 0
    for: 2m
    labels:
      severity: warning
    annotations:
      summary: "Springboot错误事件 容器: $labels.instance"
      description: "在过去2分钟有新的{{ $value }}个错误事件"
EOF

重新加载配置:

curl -X POST http://localhost:9090/-/reload

检查:

http://192.168.10.14:9090/alerts?search=

http://192.168.10.14:9090/rules

3.6 grafana dashboard 数据展示

grafana将prometheus作为数据源进行可视化展示
https://grafana.com/grafana/dashboards/12856-jvm-micrometer/  # 1 SLS JVM监控大盘
https://grafana.com/grafana/dashboards/4701-jvm-micrometer/ # JVM(Micrometer)
https://grafana.com/grafana/dashboards/10280  # Sprint Boot 2.1 Statistics
https://grafana.com/grafana/dashboards/12900-springboot-apm-dashboard/   # 

监控数据库连接池dashboard
hikari连接池:https://grafana.com/grafana/dashboards/6083  # SpringBoot HikariCP /JDBC
druid连接池:https://grafana.com/grafana/dashboards/11157  # Druid Connection Pool Dashboard

 

 

 

 

 

标签:Java,监控,tomcat,--,grafana,prometheus,threads,jvm,total
From: https://www.cnblogs.com/yangmeichong/p/18156411

相关文章

  • [题解]P5431 【模板】模意义下的乘法逆元 2
    可恶,卡常好难受。P5431【模板】模意义下的乘法逆元2将分数通分,第\(i\)个分数是\(\frac{k^i*fac\diva[i]}{fac}\),\(fac\)表示所有元素的积。我们可以用\(lr,rl\)记录\(a\)的前缀后缀积,第\(i\)个分数就是\(\frac{k^i*lr[i-1]*rl[i+1]}{lr[n]}\)。这样分母都是\(lr[n]\),分子就......
  • PM 的基本技术训练 – 案例分析 在PM 带领下, 每个团队深入分析下面行业的软件, 找到行
    英语学习/词典App英语学习/词典App评级牛津高阶英汉双解词典app优点:权威的词汇分类,适合专业英语词汇学习,查词功能强大,支持通配符搜索。缺点:可能需要在特定区域的Appstore购买,价格较高。网易有道词典优点:用户评分高,专为iPad设计,提供多种语言翻译,适合学生使用。缺点:可......
  • 风险控制 1、如果你的项目发布后失败,主要的原因会是什么? 2、每个团队列出自己项目中
    项目发布失败的主要原因会是:-需求管理不当:项目未能准确捕捉或满足用户需求。资源分配不当:团队可能缺乏必要的技能或资源来完成项目。时间管理问题:项目可能未能在预定时间内完成。沟通不畅:团队成员之间、团队与利益相关者之间的沟通可能存在问题。技术问题:项目可能遇到无法......
  • 微服务如何解决用户登录验证问题的流程整理
    0-我们通过客户端=》网关=》微服务的顺序访问服务端1-网关:这一步主要是获取token进行验证,成功后把用户信息保存到请求头以供微服务调取因为微服务模块比较多,如果每一个都写拦截器会造成不必要的冗余,所以我们统一把拦截器放在网关模块 网关的信息传递流程为客户端=》断言=》......
  • 树链剖分
    参考链接:https://www.cnblogs.com/dx123/p/16320467.html(感谢董晓老师)树链剖分求LCA比倍增快一些https://www.luogu.com.cn/problem/P3379#include<bits/stdc++.h>constintN=5e5+5;usingnamespacestd;intn,m,root;inth[N],ne[2*N],e[2*N],idx;intdep[N]......
  • K8S集群问题:案例一:Java调用Glibc2.28-69内存分配器无法限制虚拟内存VIRT问题
    一、问题描述1、背景:租户反馈,Apr711:22容器出现夯死现象,容器部署的单个java进程;宿主机上,top显示的容器进程virt内存持续增长32G,目前messages日志没有看到oom的记录,基本是。租户其他bc7、8系统上有添加参数MALLOC_ARENA_MAX进行限制,基本维持在16G左右,目前bcoe21.10系统配置......
  • WPF开源轻便、快速的桌面启动器
    前言今天大姚给大家分享一款WPF开源、简单、轻便、快速的桌面启动器(支持多主题、多语言:简体中文、繁体中文、英文等):CurvaLauncher。WPF介绍WPF是一个强大的桌面应用程序框架,用于构建具有丰富用户界面的Windows应用。它提供了灵活的布局、数据绑定、样式和模板、动画效果等功......
  • 软件开发与创新第二次实验———结对编程:计算出题系统
    一.结对信息2252418盛宇伟2252436董朝二.题目要求小学老师要每周给同学出300道四则运算练习题。这个程序有很多种实现方式:C/C++C#/VB.net/JavaExcelUnixShellEmacs/Powershell/VbscriptPerlPython两个运算符,100以内的数字,不需要写答案。需要检查答案是否正确,并......
  • PM 的基本技术训练
    PM的基本技术训练–案例分析在PM带领下,每个团队深入分析下面行业的软件,找到行业的Top5(选以下中的一个)英语学习/词典App笔记App旅游行业的手机App要求本团队成员亲身用过这些软件,给每个软件一个评级,并分析它的优点和缺点;案例分析示例:行业:英语学习/词典AppTop......
  • 风险控制
    1、如果你的项目发布后失败,主要的原因会是什么?2、每个团队列出自己项目中目前面临的风险,按严重性排序(例如:团队中有人原来许诺要努力工作,但是后来做了南郭先生,这是一个风险)同时列出每条风险的应对方法;3、针对问题1,你们小组如果出现风险,导致项目发布失败,给出应对方案1、项目发布......