• 首页

  • 文章归档

  • 隔壁朋友

  • 关于博主
H B L A O
H B L A O

hblao

获取中...

02
25
java

SpringBoot Admin

发表于 2021-02-25 • springboot admin 日志 • 被 44 人看爆

一、SpringBoot Admin 简介
image.png
使用SpringBoot Admin进行日志的记录,可以很轻松的是实现对SpringBoot、SpringCloud项目运行状态的监控。Spring Boot Admin本身也是一个Web应用,每个Spring Boot应用程序都被视为客户端并注册到管理服务器。背后的数据采集是由Spring Boot Actuator端点提供。
启动时会自动加载actuator相关映射
启动时加载的 actuator相关映射

二、使用 SpringBoot Admin
1.监控中心 ADMIN
step1: 导入 spring-boot-admin-starter-server 监控依赖
step2: 启动类添加注解 @EnableAdminServer
step3:配置 yml 暴露端点和指定日志文件地址

监控服务名

spring:
application:
name: monitor-server

监控中心 端口

server:
port: 9009

include 暴露端点 (不暴露时)

management:
endpoints:
web:
exposure:
include: "*"
# 注释后 不显示 logfile 模块
logfile:
external-file: E:/data/adminTest/logs/output.log #指向日志文件地址,需与LogBack配置的日志地址一致

在访问/actuator/health时显示完整信息

endpoint:
health:
show-details: always

2.服务 CLIENT
step1: 导入 spring-boot-admin-starter-client监控依赖
step2: 添加 logback-spring.xml 日志配置文件
step3:配置 yml 暴露端点和指定日志文件地址

3.启用和暴露端点
执行器端点使您可以监视应用程序并与之交互。Spring Boot包含许多内置端点,您可以添加自己的端点。例如,health端点提供基本的应用程序运行状况信息。

每个端点都可以启用或禁用。这控制了是否创建了端点以及它的bean在应用程序上下文中是否存在。为了可以远程访问,端点还必须通过JMX或HTTP公开。大多数应用程序选择HTTP,其中终结点的ID和前缀/actuator映射到URL。例如,默认情况下,health端点映射到/actuator/health。

端点列表:

ID 描述
auditevents 公开当前应用程序的审核事件信息。需要一个AuditEventRepositoryBean。
beans 显示应用程序中所有Spring Bean的完整列表。
caches 公开可用的缓存。
conditions 显示在配置和自动配置类上评估的条件以及它们匹配或不匹配的原因。
configprops 显示所有的整理列表@ConfigurationProperties。
env 公开Spring的属性ConfigurableEnvironment。
flyway 显示已应用的所有Flyway数据库迁移。需要一个或多个FlywayBean。
health 显示应用程序运行状况信息。
httptrace 显示HTTP跟踪信息(默认情况下,最近100个HTTP请求-响应交换)。需要一个HttpTraceRepositoryBean。
info 显示任意应用程序信息。
integrationgraph 显示Spring Integration图。需要对的依赖spring-integration-core。
loggers 显示和修改应用程序中记录器的配置。
liquibase 显示已应用的所有Liquibase数据库迁移。需要一个或多个LiquibaseBean。
metrics 显示当前应用程序的“指标”信息。
mappings 显示所有@RequestMapping路径的整理列表。
scheduledtasks 显示应用程序中的计划任务。
sessions 允许从Spring Session支持的会话存储中检索和删除用户会话。需要使用Spring Session的基于Servlet的Web应用程序。
shutdown 使应用程序正常关闭。默认禁用。
threaddump 执行线程转储。
如果您的应用程序是Web应用程序(Spring MVC,Spring WebFlux或Jersey),则可以使用以下附加端点:

ID 描述
heapdump 返回hprof堆转储文件。
jolokia 通过HTTP公开JMX bean(当Jolokia在类路径上时,不适用于WebFlux)。需要对的依赖jolokia-core。
logfile 返回日志文件的内容(如果已设置logging.file.name或logging.file.path属性)。支持使用HTTP Range标头来检索部分日志文件的内容。
conditions 显示在配置和自动配置类上评估的条件以及它们匹配或不匹配的原因。
prometheus 以Prometheus服务器可以抓取的格式公开指标。需要对的依赖micrometer-registry-prometheus。
3.1 启用端点
默认情况下,除了shutdown端点是关闭的,其它的都是启用的。

management.endpoint..enabled
1
1)启用shutdown端点

management.endpoint.shutdown.enabled=true
1
2)关闭默认端点

management.endpoints.enabled-by-default=false
1
3)启用info端点

management.endpoint.info.enabled=true
1
禁用的端点将从应用程序上下文中完全删除。
如果只想更改公开端点的技术,请使用include和exclude属性。
3.2 暴露端点
停止公开所有在JMX上公开的端点,只公开info和health两个端点,使用如下属性:

management.endpoints.jmx.exposure.include=health,info
1
通过HTTP公开所有的端点,除了env和beans端点,使用如下的属性:

management.endpoints.web.exposure.include=*
management.endpoints.web.exposure.exclude=env,beans
1
2
[端点参考资料]:Spring Boot Actuator

1.2 配置YML

监控服务名

spring:
application:
name: monitor-server

监控中心 端口

server:
port: 9009

include 暴露端点 (不暴露时)

management:
endpoints:
web:
exposure:
include: "*"
# 注释后 不显示 logfile 模块
logfile:
external-file: E:/data/adminTest/logs/output.log #指向日志文件地址,需与LogBack配置的日志地址一致

在访问/actuator/health时显示完整信息

endpoint:
health:
show-details: always

1.3 启动器类
添加 @EnableAdminServer 注解

import de.codecentric.boot.admin.server.config.EnableAdminServer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@EnableAdminServer
@SpringBootApplication
public class LakersApplication {

public static void main(String[] args) {
    SpringApplication.run(LakersApplication.class, args);
}

}

2.服务 MODULE
2.1 导入依赖


org.springframework.boot
spring-boot-starter-web

<!-- admin-client -->
<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-client</artifactId>
    <version>2.0.2</version>
</dependency>

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.8</version>
</dependency>

2.2 配置YML

服务名

spring:
application:
name: admin-client

指定admin监控中心地址

boot:
admin:
client:
url: http://localhost:9009

服务端口

server:
port: 9010

定义日志文件输出路径 [注释后 不显示 本服务的 logfile 模块]

logging:
file: E:/data/adminTest/logs/output.log

include 暴露端点

management:
endpoints:
web:
exposure:
include: '*'

在访问/actuator/health时显示完整信息

endpoint:
health:
show-details: always
image.png

2.3 在APPLICATION.YML平级文件夹中添加LOGBACK-SPRING.XML配置文件
该文件 引用自作者 kjf00
引用链接:https://blog.csdn.net/k849875005/article/details/97136450

${APP_Name}
<!-- 彩色日志依赖的渲染类 -->
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
<conversionRule conversionWord="wex"
                converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
<conversionRule conversionWord="wEx"
                converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
<property name="CONSOLE_LOG_PATTERN"
          value="adminTest >> ${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(LN:%L){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> 
        <pattern>${CONSOLE_LOG_PATTERN}</pattern>
        <charset>utf8</charset>
    </encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOG_HOME}/output.log</file>   
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <!--日志文件输出的文件名-->
    <FileNamePattern>${LOG_HOME}/output-%d{yyyy-MM-dd}.log</FileNamePattern> 
    <!--日志文件保留天数-->
       <MaxHistory>30</MaxHistory>
    </rollingPolicy>
      
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> 
    <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> 
    <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n</pattern>   
    </encoder>
</appender>
    
<!-- show parameters for hibernate sql 专为 Hibernate 定制 --> 
<logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="WARN"/>
<logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="WARN"/>
<logger name="org.hibernate.SQL" level="WARN"/>
<logger name="org.hibernate.engine.QueryParameters" level="DEBUG"/>
<logger name="org.hibernate.engine.query.HQLQueryPlan" level="WARN"/>
 
<!--mybatis log configure-->
<logger name="com.apache.ibatis" level="WARN"/>
<logger name="java.sql.Connection" level="WARN"/>
<logger name="java.sql.Statement" level="WARN"/>
<logger name="java.sql.PreparedStatement" level="WARN"/>
<logger name="org.apache.shiro" level="WARN"/>
<logger name="springfox.documentation" level="WARN"/>

<!-- 日志输出级别,注意:如果不写<appender-ref ref="FILE" /> ,将导致springboot Admin找不到文件,无法查看日志 -->
<root level="INFO">
    <appender-ref ref="STDOUT"/>
    <appender-ref ref="FILE"/>
</root>
![image.png](http://www.hblao.com/upload/2021/02/image-ad30674365704aa18d5a171fc641a7f1.png)

2.4 CONTROLLER
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;

@Slf4j
@RestController
public class ListenController {

// Test 测试 格式化日期
@RequestMapping(value = "/getTime",method = RequestMethod.GET)
public String getTime(){
    Date date = new Date();
    // SimpleDateFormat
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String time = sdf.format(date);

    // DateTimeFormatter
    LocalDateTime localDateTime = LocalDateTime.now();
    DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
    String localTime = dtf.format(localDateTime);

    // TODO 解决slf4j中Logger.info 只打印出文字没有参数中的数据 -> 使用占位符 {}
    log.info("记录当前时间:普通时间: {}, 本地时间: {}",time, localTime);
    String t = "普通日期 通过 SimpleDateFormat 进行格式化 "+time+"<br>本地时间LocalDateTime 通过 DateTimeFormatter 进行格式化 "+localTime;
    return t;
}

}

四、测试结果
1.不暴露端点 测试

未配置/注释 以下内容

management:
endpoints:
web:
exposure:
include: "*"

监控中心后台 除Detials外 所有功能失效
不暴露端点

2.不配置 LOGFILE 测试
2.1监控端未配置logfile -> 不显示 logfile 模块

management:
# 未配置/注释 以下内容
logfile:
# 指向日志文件地址,需与LogBack配置的日志地址一致
external-file: E:/data/adminTest/logs/output.log

2.2服务端未配置logging.file -> 显示红字提示 fetch logfile failed [请求logile 失败,状态码 404]

未配置/注释 以下内容

定义日志文件输出路径 [注释后 不显示 本服务的 logfile 模块]

logging:
file: E:/data/adminTest/logs/output.log

服务端未配置logging.file

3.正常情况
控制台 打印的 项目前缀
控制台 打印的 项目前缀
访问 localhost[Ip地址]:端口号 即可
本案例中访问 http://localhost:9009 即可进入监控中心
logfile模块 查看日志详情
logfile模块 查看日志详情
测试结果
image.png

转载:https://blog.csdn.net/weixin_45929667/article/details/103661674

分享到:
Spring IOC
Spring,SpringMvc,SpringBoot
  • 文章目录
  • 站点概览
hblao

Hihblao

QQ Email RSS
看爆 Top5
  • 设计一个高并发的高可用系统 434次看爆
  • MySQL 常用优化指南 224次看爆
  • Spring AOP 207次看爆
  • 人到中年 188次看爆
  • RedisTemplate常用使用说明 170次看爆

Copyright © 2022 hblao · 京ICP备16001163号

Proudly published with Halo · Theme by fyang · 站点地图 · 百度统计