Java web应用性能分析之【prometheus+Grafana监控springboot服务和服务器监控】

news2024/11/24 23:00:16

Java web应用性能分析之【java进程问题分析概叙】-CSDN博客

Java web应用性能分析之【java进程问题分析工具】-CSDN博客

Java web应用性能分析之【jvisualvm远程连接云服务器】-CSDN博客

Java web应用性能分析之【java进程问题分析定位】-CSDN博客

Java web应用性能分析之【系统监控工具prometheus】-CSDN博客

        由于篇幅限制,前面只是整理了prometheus的工作原理,而Java服务级监控用于对每个应用占用的CPU、内存、线程池的线程数量、restful调用数量和响应时间、JVM状态、GC信息等进行监控,并可将指标信息同步至Prometheus中集中展示和报警。

        springboot,prometheus,Grafana三者关系如下:

        1.监控信息:springboot 添加actuator,micrometer-registry-prometheus依赖,提供当前springboot进程的运行数据信息,以micrometer格式展示出来,http://localhost:8080/actuator/prometheus。还可以在在Spring Boot自定义业务指标,并对关键指标进行监控和告警。

        2.提取监控信息+简陋的展示:prometheus中metrics_path,static_configs添加http://localhost:8080/actuator/prometheus的监控数据源配置,prometheus就会按照一定的时间间隔scrape_interval,scrape_timeout拉取对应springboot进程的运行数据信息,(热更新prometheus配置 curl -X POST http://localhost:9090/-/reload),此时就可以在prometheus的简陋界面查看到springboot的监控信息。

        3.展示监控信息:在Grafana导入,关联Prometheus数据源,即可在Grafana大屏上看到已收集到相关数据,包括系统启动时间、运行时间、tomcat 连接池信息、JVM相关信息等。

1.下载安装prometheus

下载地址:Download | Prometheus

版本选择LTS版:2.45.5      https://github.com/prometheus/prometheus/releases/download/v2.45.5/prometheus-2.45.5.linux-amd64.tar.gz

        业务是go开发的,所以解压即可用

        启动命令: ./prometheus --config.file=prometheus.yml

        可以配置到操作系统中,自动启动,这里就不做说明。

        访问9090端口上的prometheus

2.springboot添加actuator,micrometer-registry-prometheus依赖

注意事项  不同版本的springboot有对应不同版本的micrometer-registry-prometheus

我这里用的是Spring-Boot-2.2-Release,对应的版本是1.3

Spring Boot 2.2 Release Notes · spring-projects/spring-boot Wiki · GitHub

在springboot中导入的依赖如下

       <!--prometheus监控 -->
            <!-- Spring Boot Actuator for Prometheus -->
<!--            <dependency>-->
<!--                <groupId>org.springframework.boot</groupId>-->
<!--                <artifactId>spring-boot-starter-actuator</artifactId>-->
<!--            </dependency>-->
            <!-- Spring Boot Prometheus Exporter https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.2-Release-Notes  https://mvnrepository.com/artifact/io.micrometer/micrometer-registry-prometheus/1.3.20 -->
            <dependency>
                <groupId>io.micrometer</groupId>
                <artifactId>micrometer-registry-prometheus</artifactId>
                <version>1.3.1</version>
            </dependency>
            <dependency>
                <groupId>io.prometheus</groupId>
                <artifactId>simpleclient_servlet</artifactId>
                <version>0.6.0</version>
            </dependency>
            <dependency>
                <groupId>io.prometheus</groupId>
                <artifactId>simpleclient</artifactId>
                <version>0.6.0</version>
            </dependency>
            <dependency>
                <groupId>io.prometheus</groupId>
                <artifactId>simpleclient_common</artifactId>
                <version>0.6.0</version>
            </dependency>
            <dependency>
                <groupId>io.prometheus</groupId>
                <artifactId>simpleclient_hotspot</artifactId>
                <version>0.6.0</version>
            </dependency>

监控配置

package com.zxx.study.web.config;

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

/**
 * 监控配置
 * @author zhouxx
 * @Description:
 * @date 2024/6/5  1:43
 */
@Configuration
public class MicrometerConfig {

//    @Value("${spring.application.name}")
//    private String applicationName;

    @Bean
    MeterRegistryCustomizer<MeterRegistry> configurer( @Value("${spring.application.name}") String applicationName) {
        return (registry) -> registry.config().commonTags("application", applicationName);
    }
}

配置文件

spring:
  application:
    name: mydemo
server:
  port: 6001
  address: 0.0.0.0
  #默认立即关闭、graceful优雅关闭(待正在执行的用户完成操作后关闭)
  shutdown: graceful
upload:
  file-path: C:\\upload\\image


#端口暴漏 management.endpoints.web.exposure.include=prometheus
management:
  metrics:
    export:
      prometheus:
        enabled: true
  #actuator端口 如果不配置做默认使用上面8080端口
  server:
    port: 10011
#    address: 127.0.0.1
  endpoints:
    enabled-by-default: true
    web:
      exposure:
        #默认值访问health,info端点  用*可以包含全部端点
        include: '*'
      #修改访问路径 2.0之前默认是/; 2.0默认是/actuator可以通过这个属性值修改
      base-path: /actuator
#      cors:
#        allowed-origins: http://localhost:8080
#        allowed-methods: GET,POST
  endpoint:
    beans:
      enabled: true
    shutdown:
      enabled: true #打开shutdown端点
    health:
      show-details: always #获得健康检查中所有指标的详细信息
    # 日志记录
    logfile:
      external-file: ./logs/mydemo/mydemomor.log
    prometheus:
      enabled: true
  # 自定义应用信息,http://localhost:8080/actuator/info
info:
  app:
    name: mydemo
    description: study demo
    version: 1.0.0
#  # 数据信息从maven获取
#info.build.artifact=@project.artifactId@
#info.build.name=@project.name@
#info.build.description=@project.description@
#info.build.version=@project.version@
logging:
  config: classpath:logback-spring.xml
  pattern:
    console: '%clr(%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n)'
    file: '%d{yyyy-MM-dd HH:mm:ss.SSS} >>> [%thread] >>> %-5level >>> %logger{50} >>> %msg%n'
##  level:
##    # trace 打印sql
##    com.zxx.study.web.mapper: trace

集成页面http://39.99.211.248:10011/actuator/prometheus

至此springboot中嵌入的prometheus已经完成,接下来只需要在prometheus server中添加这个监控数据拉取配置即可。

添加配置如下:

效果  即可在prometheus server的页面上看到“mydemo”的监控

简陋的监控页面“jvm_memory_used_bytes”

 备注:这里看到的时分秒不准确,在后面的grafana中显示正常

3.Grafana导入Prometheus数据源,展示监控信息

下载地址:Grafana | 查询、可视化、警报观测平台

下载和安装

        在这里,我下载的是windows版,因为服务器上资源不足,就安装在笔记本上做演示。

查找  dashboards的id,按照提示查找即可,如下

Grafana dashboards | Grafana Labs

JVM (Micrometer) | Grafana Labs

 添加Prometheus成功后,效果如下,可以详细查看到“jvm”监控  4701

毕竟是专业的监控工具,比jvm自带的要全很多,但是这个也有个不足,Prometheus中配置的是每5秒拉取一次监控数据,有一定的延后性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1826602.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

利用鱼骨图进行项目问题复盘与改进

一、引言 在项目管理中&#xff0c;问题复盘是一个至关重要的环节。它不仅能帮助我们识别项目执行过程中出现的问题&#xff0c;还能促使我们深入探究问题的根本原因&#xff0c;从而采取有效的改进措施。在这个过程中&#xff0c;鱼骨图作为一种强大的工具&#xff0c;为我们…

Android 13.0 Launcher3单层模式workspace中app列表页排序功能实现

1.概述 在13.0的定制化开发中,对于Launcher3的功能定制也是好多的,而对于单层app列表页来说排序功能的开发,也是常有的功能这就需要了解加载app数据的流程,然后根据需要进行排序就可以了,接下来就来实现这个功能 如图: 2. Launcher3单层模式workspace中app列表页排序功能…

Linux-Tomcat服务配置到系统服务

目录 前言一、系统环境二、配置步骤step1 了解环境的安装路径step2 配置生成tomcat.pid文件step3 配置tomcat.service文件 三、测试systemctl命令管理Tomcat服务3.1 systemctl命令启动Tomcat服务3.2 systemctl命令查看Tomcat服务3.3 systemctl命令关闭Tomcat服务3.4 systemctl命…

【计算机网络仿真实验-实验2.4、2.5】静态路由、动态路由(RIP)

实验2.4 静态路由 1. 实验拓扑图 注意&#xff1a;有些同学不知道两个路由器之间如何用串行DCE(红线)相接&#xff0c;只需要为路由器分别增加新的HWIC-2T接口卡就好了 不知道如何添加物理接口的&#xff0c;可以查看本人计算机网络专栏中【计算机网络仿真实验——实验准备】…

JDK8-17新特性

一、JDK8新特性:Lambda表达式 1.Lambda表达式及其使用举例 Lambda是一个匿名函数&#xff0c;我们可以把Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。使用它可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格&#xff0c;使Java的语言表达能力…

Elasticsearch 认证模拟题 - 21

一、题目 写一个查询&#xff0c;要求查询 kibana_sample_data_ecommerce 索引&#xff0c;且 day_of_week、customer_gender、currency、type 这 4 个字段中至少两个以上。 1.1 考点 Boolean 1.2 答案 GET kibana_sample_data_ecommerce/_search {"query": {&q…

湘潭大学软件工程数据库2(题型,复习资源和计划)

文章目录 选择题关系范式事务分析E-R 图sql作业题答案链接&#xff08;仅限有官方答案的版本&#xff09;结语 现在实验全部做完了&#xff0c;实验和作业占比是百分之 40 &#xff0c;通过上图可以看出来&#xff0c;重点是 sql 语言 所以接下来主要就是学习 sql 语句怎么书写…

AirPlay技术规范及认证资讯

AirPlay是Apple开发的一种无线技术&#xff0c;允许用户将音频、视频或图片从iOS设备、Mac电脑或其他支持AirPlay的设备无线传输到支持AirPlay的接收器设备上&#xff0c;例如智能电视或音响系统。这项技术基于Wi-Fi网络&#xff0c;提供了一种便捷的方式来共享媒体内容。AirPl…

GitLab教程(二):快速上手Git

文章目录 1.将远端代码克隆到本地2.修改本地代码并提交到远程仓库3.Git命令总结git clonegit statusgit addgit commitgit pushgit log 首先&#xff0c;我在Gitlab上创建了一个远程仓库&#xff0c;用于演示使用Gitlab进行版本管理的完整流程&#xff1a; 1.将远端代码克隆到本…

C++ 18 之 函数的重载

c18函数的重载.cpp #include <iostream> #include <string.h> using namespace std;void fun4(int a) {cout << "int a: "<< a << endl; } void fun4(double a) {cout << "double a: " << a << endl; }v…

嵌入式学习——Linux高级编程复习(UDP编程)——day43

1. UDP编程——函数接口 1.1 socket 1. 定义 int socket(int domain, int type, int protocol); 2. 功能 创建一个用来进程通信的套接字,返回文件描述符 3. 参数 domain:AF_INET IPv4协议族 type:SOCK_STREAM 流式套接字 tcp传输协议…

MYSQL八、MYSQL的SQL优化

一、SQL优化 sql优化是指&#xff1a;通过对sql语句和数据库结构的调整&#xff0c;来提高数据库查询、插入、更新和删除等操作的性能和效率。 1、插入数据优化 要一次性往数据库表中插入多条记录&#xff1a; insert into tb_test values(1,tom); insert into tb_tes…

Day52 代码随想录打卡|二叉树篇---二叉搜索树中的众数

题目&#xff08;leecode T501&#xff09;&#xff1a; 给你一个含重复值的二叉搜索树&#xff08;BST&#xff09;的根节点 root &#xff0c;找出并返回 BST 中的所有 众数&#xff08;即&#xff0c;出现频率最高的元素&#xff09;。 如果树中有不止一个众数&#xff0c…

Radis初阶 Radis基本命令与在Springboot中访问Radis

阿里网盘链接 文章目录 初始NoSQL数据库对比MySQL数据库从结构方面&#xff1a;从关系方面&#xff1a;从查询方式&#xff1a;从事物方面&#xff1a; Redis入门Redis数据结构访问Radis通用命令&#xff08;tab键&#xff1a;自动补全&#xff09;KEYSDELEXISTSEXPIRETTL Str…

硬件SPI读写W25Q64

硬件SPI读写W25Q64 接线图&#xff08;和软件SPI一样&#xff09; 使用SPI1&#xff0c;SCK&#xff0c;接PA5&#xff1b;MISO&#xff0c;接PA6&#xff1b;MOSI&#xff0c;接PA7&#xff1b;NSS&#xff0c;可接PA4。 接线图对应&#xff1a;PA5接CLK引脚&#xff0c;PA6…

军事武器3D数字化交互展示创作平台大大降低成本

军事力量和装备是一个国家国防安全的重要支柱&#xff0c;这在全球范围内得到广泛认同&#xff0c;为了让入伍的新兵能快速熟悉和掌握武器装备操作流程&#xff0c;基于创新型的华锐3D云展平台工具&#xff0c;搭建的3D军事武器展示搭建编辑器&#xff0c;让部队的军事武器展示…

Apollo9.0 PNC源码学习之Control模块(一)—— 控制模块概览

0 前言 从planning的角度看control&#xff0c;首先需要了解的就是相关的数据接口&#xff0c;规划出的轨迹&#xff08;路径速度&#xff09;发给Control模块去执行 modules/planning/planning_component/planning_component.cc planning模块发布轨迹信息 planning_writer_ …

程序员基本功之git的使用

阿里网盘-资料链接 文章目录 git分布式版本控制工具git的基本概念开发过程中的问题常见的版本控制工具git分布式版本控制工具特点git系统所定制的若干目标git的工作流程图 GIT的安装和常用命令**创建本地git仓库步骤****本地git仓库的使用**git log详解 git分布式版本控制工具…

大模型系列:Prompt提示工程常用技巧和实践

前言 Prompt提示语是使用大模型解决实际问题的最直接的方式&#xff0c;本篇介绍Prompt提示工程常用的技巧&#xff0c;包括Zero-Shot、Few-Shot、CoT思维链、Least-to-Most任务分解。 内容摘要 Prompt提示工程简述Prompt的一般结构介绍零样本提示Zero-Shot少样本提示Few-Sho…

Ubuntu 18.04下普通用户的一次提权过程

Ubuntu 18.04下普通用户的一次提权过程 一.背景介绍:二.主要调试过程:三.相关命令:1.设置BMC密码,获取BMC IP2.找一台ubuntu搭建TFTP服务,用来替换grub.cfg文件3.从调试服务器的/boot/grub/grub.cfg中提取出recovery mode的配置,简化并生成新的配置文件grub.cfg,放在tftp服务的…