• Spring Boot Admin在线查看spring boot后台日志


    当前,应用系统微服务架构、前后端分离(前端vue,后端springboot),已经成为大部分项目的标准技术架构,但在项目上线后,spring boot后端服务部署在服务器上,大部分公司对服务器都有安全管理要求,一般开发人员无法登录服务器,就不能查看到后台日志,经常遇到应用系统报错,但看不到后台详细服务日志,导致程序员不能很快定位错误。基于此,可以使用Spring Boot Admin组件集成整合spring boot工程,可以实现在线实时查看后端服务日志,就不用再去服务器管理员去服务器本地查看了。

    Spring Boot Admin组件可以集成单体的spring boot工程,也可以通过服务注册发现中心,集成多个spring boot微服务应用。

    本文重点介绍如果集成单体springboot工程,这种架构项目上使用的最多,部署起来也比较简单。

    一、Spring Boot Admin简介

    Spring Boot Admin是一个开源社区项目,用于管理和监控SpringBoot应用程序。 应用程序作为Spring Boot Admin Client向为Spring Boot Admin Server注册(通过HTTP)或使用SpringCloud注册中心(例如Eureka,Consul)发现。 UI是的AngularJs应用程序,展示Spring Boot Admin Client的Actuator端点上的一些监控。

    常见的功能或者监控如下:

    • 显示健康状况
    • 显示详细信息,例如
    • JVM和内存指标
    • micrometer.io指标
    • 数据源指标
    • 缓存指标
    • 显示构建信息编号
    • 关注并下载日志文件
    • 查看jvm系统和环境属性
    • 查看Spring Boot配置属性
    • 支持Spring Cloud的postable / env-和/ refresh-endpoint
    • 轻松的日志级管理
    • 与JMX-beans交互
    • 查看线程转储
    • 查看http跟踪
    • 查看auditevents
    • 查看http-endpoints
    • 查看计划任务
    • 查看和删除活动会话(使用spring-session)
    • 查看Flyway / Liquibase数据库迁移
    • 下载heapdump
    • 状态变更通知(通过电子邮件,Slack,Hipchat,……)
    • 状态更改的事件日志(非持久性)

    二、创建Spring Boot Admin Server

    首先创建一个Spring Boot工程,本文的所有工程的Spring Boot版本为2.7.3 ,JDK版本1.8,
    spring-boot-admin-starter-server版本为2.5.1。

    1、修改pom文件

    完整的pom.xml文件如下

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    4. <modelVersion>4.0.0</modelVersion>
    5. <parent>
    6. <groupId>org.springframework.boot</groupId>
    7. <artifactId>spring-boot-starter-parent</artifactId>
    8. <version>2.7.3</version>
    9. <relativePath/> <!-- lookup parent from repository -->
    10. </parent>
    11. <groupId>com.example</groupId>
    12. <artifactId>boot-admin-server</artifactId>
    13. <version>0.0.1-SNAPSHOT</version>
    14. <name>boot-admin-server</name>
    15. <description>Demo project for Spring Boot</description>
    16. <properties>
    17. <java.version>1.8</java.version>
    18. </properties>
    19. <dependencies>
    20. <dependency>
    21. <groupId>org.springframework.boot</groupId>
    22. <artifactId>spring-boot-starter-web</artifactId>
    23. </dependency>
    24. <dependency>
    25. <groupId>de.codecentric</groupId>
    26. <artifactId>spring-boot-admin-starter-server</artifactId>
    27. <version>2.5.1</version>
    28. </dependency>
    29. </dependencies>
    30. <build>
    31. <plugins>
    32. <plugin>
    33. <groupId>org.springframework.boot</groupId>
    34. <artifactId>spring-boot-maven-plugin</artifactId>
    35. </plugin>
    36. </plugins>
    37. </build>
    38. </project>

    2、新建BootAdminServerApplication启动类

    然后在工程的启动类
    BootAdminServerApplication

    加上@EnableAdminServer注解,开启AdminServer的功能,代码如下:

    1. package com.example.server;
    2. import de.codecentric.boot.admin.server.config.EnableAdminServer;
    3. import org.springframework.boot.SpringApplication;
    4. import org.springframework.boot.autoconfigure.SpringBootApplication;
    5. @SpringBootApplication
    6. @EnableAdminServer
    7. public class BootAdminServerApplication {
    8. public static void main(String[] args) {
    9. SpringApplication.run(BootAdminServerApplication.class, args);
    10. }
    11. }

    3、修改application.yml配置

    在工程的配置文件application.yml中配置程序名和程序的端口,代码如下:

    1. server:
    2. port: 9091
    3. spring:
    4. application:
    5. name: boot-admin-server

    4、启动访问spring boot admin

    启动应用,访问http://127.0.0.1:9091

    因为当前还没有springboot应用接入,所有登录后看到的是0个应用。

    三、创建Spring Boot Admin Client

    首先创建一个Spring Boot工程,本文的所有工程的Spring Boot版本为2.7.3 ,JDK版本1.8,
    spring-boot-admin-starter-client版本为2.5.1。

    1、修改pom文件

    完整的pom.xml文件如下

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    4. <modelVersion>4.0.0</modelVersion>
    5. <parent>
    6. <groupId>org.springframework.boot</groupId>
    7. <artifactId>spring-boot-starter-parent</artifactId>
    8. <version>2.7.3</version>
    9. <relativePath/> <!-- lookup parent from repository -->
    10. </parent>
    11. <groupId>com.example</groupId>
    12. <artifactId>boot-admin-client</artifactId>
    13. <version>0.0.1-SNAPSHOT</version>
    14. <name>boot-admin-client</name>
    15. <description>Demo project for Spring Boot</description>
    16. <properties>
    17. <java.version>1.8</java.version>
    18. </properties>
    19. <dependencies>
    20. <dependency>
    21. <groupId>org.springframework.boot</groupId>
    22. <artifactId>spring-boot-starter-web</artifactId>
    23. </dependency>
    24. <dependency>
    25. <groupId>de.codecentric</groupId>
    26. <artifactId>spring-boot-admin-starter-client</artifactId>
    27. <version>2.5.1</version>
    28. </dependency>
    29. </dependencies>
    30. <build>
    31. <plugins>
    32. <plugin>
    33. <groupId>org.springframework.boot</groupId>
    34. <artifactId>spring-boot-maven-plugin</artifactId>
    35. </plugin>
    36. </plugins>
    37. </build>
    38. </project>

    2、新建BootAdminClientApplication启动类

    1. package com.example.client;
    2. import org.springframework.boot.SpringApplication;
    3. import org.springframework.boot.autoconfigure.SpringBootApplication;
    4. @SpringBootApplication
    5. public class BootAdminClientApplication {
    6. public static void main(String[] args) {
    7. SpringApplication.run(BootAdminClientApplication.class, args);
    8. }
    9. }

    增加一个Controller测试类,用于后面验证生成后台日志信息。

    1. package com.example.client;
    2. import org.slf4j.Logger;
    3. import org.slf4j.LoggerFactory;
    4. import org.springframework.stereotype.Controller;
    5. import org.springframework.web.bind.annotation.GetMapping;
    6. import org.springframework.web.bind.annotation.RequestMapping;
    7. import java.util.Date;
    8. @Controller
    9. @RequestMapping("/test")
    10. public class HelloController {
    11. private static final Logger log = LoggerFactory.getLogger(HelloController.class);
    12. @GetMapping("/hello")
    13. public String hello(){
    14. String s = "hello," + new Date();
    15. log.error(s);
    16. return s;
    17. }
    18. }

    3、修改application.yml配置

    在工程的配置文件application.yml中配置程序名和程序的端口,以及向admin-server注册的地址为http://localhost: 9091,日志文件的路径logging.file.name,并暴露自己的actuator的所有端口信息,代码如下:

    1. server:
    2. port: 8080
    3. spring:
    4. application:
    5. name: boot-admin-client
    6. boot:
    7. admin:
    8. client:
    9. url: http://localhost:9091
    10. #系统日志配置
    11. logging:
    12. #spring admin boot日志输出配置,需要跟logback-spring.xml配置中日志路径一致
    13. file:
    14. name: logs/boot-admin-client/error.log
    15. # 服务端点检查
    16. management:
    17. endpoints:
    18. web:
    19. exposure:
    20. include: "*"
    21. endpoint:
    22. health:
    23. show-details: always

    4、增加logback-spring.xml日志配置文件

    本配置文件可根据项目需求修改,符合logback标准即可,注意log.path的路径要与application.yml文件中指定的路径一致。

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <configuration scan="true" scanPeriod="60 seconds" debug="false">
    3. <!-- 日志存放路径 -->
    4. <property name="log.path" value="logs/boot-admin-client" />
    5. <!-- 日志输出格式 -->
    6. <property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
    7. <!-- 控制台输出 -->
    8. <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
    9. <encoder>
    10. <pattern>%highlight${log.pattern}</pattern>
    11. </encoder>
    12. </appender>
    13. <!-- 系统日志输出 -->
    14. <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
    15. <file>${log.path}/info.log</file>
    16. <!-- 循环政策:基于时间创建日志文件 -->
    17. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    18. <!-- 日志文件名格式 -->
    19. <fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
    20. <!-- 日志最大的历史 30天 -->
    21. <maxHistory>30</maxHistory>
    22. </rollingPolicy>
    23. <encoder>
    24. <pattern>${log.pattern}</pattern>
    25. </encoder>
    26. <filter class="ch.qos.logback.classic.filter.LevelFilter">
    27. <!-- 过滤的级别 -->
    28. <level>INFO</level>
    29. <!-- 匹配时的操作:接收(记录) -->
    30. <onMatch>ACCEPT</onMatch>
    31. <!-- 不匹配时的操作:拒绝(不记录) -->
    32. <onMismatch>DENY</onMismatch>
    33. </filter>
    34. </appender>
    35. <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
    36. <file>${log.path}/error.log</file>
    37. <!-- 循环政策:基于时间创建日志文件 -->
    38. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    39. <!-- 日志文件名格式 -->
    40. <fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
    41. <!-- 日志最大的历史 30天 -->
    42. <maxHistory>30</maxHistory>
    43. </rollingPolicy>
    44. <encoder>
    45. <pattern>${log.pattern}</pattern>
    46. </encoder>
    47. <filter class="ch.qos.logback.classic.filter.LevelFilter">
    48. <!-- 过滤的级别 -->
    49. <level>ERROR</level>
    50. <!-- 匹配时的操作:接收(记录) -->
    51. <onMatch>ACCEPT</onMatch>
    52. <!-- 不匹配时的操作:拒绝(不记录) -->
    53. <onMismatch>DENY</onMismatch>
    54. </filter>
    55. </appender>
    56. <!-- 系统模块日志级别控制 -->
    57. <logger name="com.yuncheng" level="info" />
    58. <!-- Spring日志级别控制 -->
    59. <logger name="org.springframework" level="warn" />
    60. <!--myibatis log configure -->
    61. <logger name="com.apache.ibatis" level="warn" />
    62. <logger name="java.sql.Connection" level="warn" />
    63. <logger name="java.sql.Statement" level="warn" />
    64. <logger name="java.sql.PreparedStatement" level="warn" />
    65. <root level="info">
    66. <appender-ref ref="console" />
    67. </root>
    68. <!--系统操作日志-->
    69. <root level="info">
    70. <appender-ref ref="file_info" />
    71. <appender-ref ref="file_error" />
    72. </root>
    73. </configuration>

    5、启动访问,在线查看日志

    启动该应用后,访问
    http://127.0.0.1:8080/test/hello,模拟生成后台错误日志,此时查看spring boot admin界面,发现有1个应用已经接入。

     

    点击进入,可以查看该应用的基本性能监控信息

     

    点击进入日志菜单,看到spring boot 后台服务日志在线实时显示出来了,这样就不用再找服务器管理员看日志了。

     

    也可以在线调整服务端日志级别,比如可以把日志级别从INFO调整到DEBUG,这样程序员开发调试代码也很方便了。

     

    以上文档描述了Spring Boot Admin如何集成监控spring boot单体应用,如何在线查看spring boot后台日志,Spring Boot Admin也可通过服务注册发现中心Nacos监控多个spring boot微服务。

     

    详细文章见:

    https://yunchengxc.yuque.com/books/share/f9f667ff-8c2e-41f4-b1bf-052dc872186f/evsv1k

  • 相关阅读:
    Android11.0 修改设备名、型号、厂商
    【Leetcode刷题Python】120. 三角形最小路径和
    青龙面板薅羊毛教程之小米电动车
    JavaScript游戏恢复
    Ubuntu上通过源码方式安装Redis
    阿尔法狗的算法解析-增强学习和蒙特卡洛树搜索算法
    python核心编程速记【笔记迁移】
    MySQL 快速入门之MySQL 5.7.21解压版安装详细教程
    洛谷P8815:逻辑表达式 ← CSP-J 2022 复赛第3题
    A. Two Elevators
  • 原文地址:https://blog.csdn.net/wxz258/article/details/126784206