当前位置:   article > 正文

SpringBoot框架04(检查与监控、可视化监控应用spring boot admin、日志管理、项目打包与多环境部署)_spring 日志框架 可视化

spring 日志框架 可视化

一、Spring Boot 度量指标监控与健康检查

1.使用 Actuator 检查与监控

[1]创建项目

在这里插入图片描述

[2]需改 POM 文件,添加依赖
      <!--添加actuator启动器-->
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-actuator</artifactId>
       </dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
[3]修改配置文件

application.properties

#配置访问端点的根路径
management.endpoints.web.base-path=/actuator
#配置开启其他端点的 URI
#开启所有的端点访问:*
#指定开启端点访问:如:beans,env
management.endpoints.web.exposure.include=*
#指定排除某个端点,一般是已经开启了所有访问端点才会排除
#management.endpoints.web.exposure.exclude=
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

当我们访问某个端点时,会响应出json数据。但是这些数据过长,我们就需要借助于第三方项目 spring boot admin来将这些json数据可视化
在这里插入图片描述

[4]各项监控指标接口 URL 介绍

应用配置类
在这里插入图片描述
在这里插入图片描述
度量指标类
在这里插入图片描述
在这里插入图片描述

二、使用可视化监控应用 Spring Boot Admin

Spring Boot Admin 的使用是需要建立服务端与客户端。
服务端:独立的项目,会将搜集到的数据在自己的图形界面中展示。
客户端:需要监控的项目。
对应关系:一个服务端可以监控多个客户端。

1.搭建服务端

[1] 创建项目

应为目前Spring Boot Admin只支持到springboot2.2.3版本。所以选择一个2.3以下的版本。
Spring Boot Admin是一个网页项目,因此添加web启动器
在这里插入图片描述

[2]修改pom文件

在这里插入图片描述
选择和项目对应的版本,添加到pom文件依赖中

<!-- https://mvnrepository.com/artifact/de.codecentric/spring-boot-admin-starter-server -->
<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-server</artifactId>
    <version>2.1.4</version>
</dependency>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
[3]修改端口号

应为要同时开启服务端和客户端,防止端口号占用,因此需要修改端口号

server.port=9090
  • 1
[4]修改启动类

添加@EnableAdminServer接口

@SpringBootApplication
@EnableAdminServer //开启 Spring Boot Admin 服务端
public class SpringbootactuatorserverApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootactuatorserverApplication.class, args);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

访问服务端主页
在这里插入图片描述

2.搭建客户端

客户端就是被监控的项目,环境是基于一、Spring Boot 度量指标监控与健康检查的基础之上。

[1]修改 POM 文件

在这里插入图片描述
去maven仓库搜索spring boot client starter,选择和服务端对应的版本。
修改客户端pom文件添加依赖

       <dependency>
            <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-starter-client</artifactId>
            <version>2.1.4</version>
        </dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
[2]修改配置文件
#配置访问端点的根路径
management.endpoints.web.base-path=/actuator
#配置开启其他端点的 URI
#开启所有的端点访问:*
#指定开启端点访问:如:beans,env
management.endpoints.web.exposure.include=*
#指定排除某个端点,一般是已经开启了所有访问端点才会排除
#management.endpoints.web.exposure.exclude=
#配置springboot admin服务端url
spring.boot.admin.client.url=http://localhost:9090
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

效果图
启动客户端项目
在这里插入图片描述
在这里插入图片描述

三、Spring Boot 的日志管理

Spring Boot 默认使用 Logback 组件作为日志管理。Logback 是由 log4j 创始人设计的一个开源日志组件。
在 Spring Boot 项目中我们不需要额外的添加 Logback 的依赖,因为在 spring-boot-starter或者 spring-boot-starter-web 中已经包含了 Logback 的依赖。

1.Logback 读取配置文件的步骤

(1)在 classpath 下查找文件 logback-test.xml
(2)如果文件不存在,则查找 logback.xml
(3)如果两个文件都不存在,LogBack 用 BasicConfiguration 自动对自己进行最小化配置,这样既实现了上面我们不需要添加任何配置就可以输出到控制台日志信息。

2.添加 Logback 配置文件

在这里插入图片描述

3.配置 Logback

logback.xml

<?xml version="1.0" encoding="UTF-8" ?>
 <configuration>
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->  
    <property name="LOG_HOME" value="${catalina.base}/logs/" />  
    <!-- 控制台输出 -->   
    <appender name="Stdout" class="ch.qos.logback.core.ConsoleAppender">
       <!-- 日志输出编码 -->  
        <layout class="ch.qos.logback.classic.PatternLayout">   
             <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> 
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n   
            </pattern>   
        </layout>   
    </appender>   
    <!-- 按照每天生成日志文件 -->   
    <appender name="RollingFile"  class="ch.qos.logback.core.rolling.RollingFileAppender">   
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${LOG_HOME}/server.%d{yyyy-MM-dd}.log</FileNamePattern>   
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>   
        <layout class="ch.qos.logback.classic.PatternLayout">  
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> 
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n   
            </pattern>   
       </layout> 
        <!--日志文件最大的大小-->
       <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
         <MaxFileSize>10MB</MaxFileSize>
       </triggeringPolicy>
    </appender>     

    <!-- 日志输出级别 -->
    <root level="info">   
        <appender-ref ref="Stdout" />   
        <appender-ref ref="RollingFile" />   
    </root> 



<!--日志异步到数据库 -->  
<!--     <appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
        日志异步到数据库 
        <connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">
           连接池 
           <dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource">
              <driverClass>com.mysql.jdbc.Driver</driverClass>
              <url>jdbc:mysql://127.0.0.1:3306/databaseName</url>
              <user>root</user>
              <password>root</password>
            </dataSource>
        </connectionSource>
  </appender> -->

</configuration>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54

4. 在代码中使用 Logback

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("logback")
public class HelloController {

    private static final Logger log= LoggerFactory.getLogger(HelloController.class);

    @RequestMapping("showlog")
    public String showLog(){
        log.info("记录日志");
        return "Hello Back";
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

查看控制台
在这里插入图片描述
同时会在项目的根路径下打印生成log文件
在这里插入图片描述
在这里插入图片描述

5.在配置文件中屏蔽指定包的日志记录

#屏蔽指定包中的日志输出  指定org下的日志不输出
logging.level.org=off
  • 1
  • 2

重启项目后,查看控制台日志
在这里插入图片描述

四、Spring Boot 项目打包与多环境配置

1.Spring Boot 项目打包

[1]Spring Boot 的打包插件

如果是从spring 官网下载的项目或者是用idea手脚架工具创建的项目,则pom文件本身会包含这个。如果是从maven中添加的springboot启动器依赖,就要看看pom文件在是不是加了spring boot 打包插件了。
如果没有打包插件的话,也能打包,但是项目中没有关于spring 的jar包,因此项目在启动时会出错。

	<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
[2]项目打包方式

在这里插入图片描述
打包完成后,可以在项目的target目录下找到该jar包
在这里插入图片描述

[3]运行命令

注意:需要正确的配置环境变量。
运行命令:java -jar 项目的名称(在该项目所在的路径下执行该命令)
也可以双击运行。
在浏览器访问该项目
在这里插入图片描述
我们可以ctrl+shift+esc打开任务管理器,然后结束该进程
在这里插入图片描述
结束进程后,刷新网页
在这里插入图片描述

2. springboot多环境配置

创建多个properties文件,命名方式以application-profile.properties
profile:dev: 开发环境、prod:生产环境、test:测试环境
在这里插入图片描述
分别给三个properties文件赋值,dev:server.port=9999、prod:server.port=8787、test:server.port=8848
在application.properties文件中,指定使用的配置文件

spring.profiles.active=test
  • 1

项目启动后,tomcat端口号则为test中配置的端口号8848
在这里插入图片描述

[1] 在Windows 环境下指定配置文件启动方式
java -jar 项目名.jar --spring.profiles.active={profile}
  • 1

如启动以dev方式启动(打包好的项目jar包放在了d盘根目录下)
在这里插入图片描述

[2]在linux下的启动方式

安装上传下载工具
安装命令:yum install lrzsz -y
上传命令:rz
下载命令:sz 下载文件名
启动脚本:server.sh

#!/bin/bash
cd `dirname $0`
 
CUR_SHELL_DIR=`pwd`
CUR_SHELL_NAME=`basename ${BASH_SOURCE}`
 
JAR_NAME="项目名称"
JAR_PATH=$CUR_SHELL_DIR/$JAR_NAME
 
#JAVA_MEM_OPTS=" -server -Xms1024m -Xmx1024m -XX:PermSize=128m"
JAVA_MEM_OPTS=""

#如果是多环境配置需要在该选项中指定profile
SPRING_PROFILES_ACTIV="-Dspring.profiles.active=配置文件profile名称"
#如果没有多环境配置将 SPRING_PROFILES_ACTIV注释掉,将SPRING_PROFILES_ACTIV=""取消注释
#SPRING_PROFILES_ACTIV=""
LOG_DIR=$CUR_SHELL_DIR/logs
LOG_PATH=$LOG_DIR/${JAR_NAME%..log
 
echo_help()
{
    echo -e "syntax: sh $CUR_SHELL_NAME start|stop"
}
 
if [ -z $1 ];then
    echo_help
    exit 1
fi
 
if [ ! -d "$LOG_DIR" ];then
    mkdir "$LOG_DIR"
fi
 
if [ ! -f "$LOG_PATH" ];then
    touch "$LOG_DIR"
fi
 
if [ "$1" == "start" ];then
 
    # check server
    PIDS=`ps --no-heading -C java -f --width 1000 | grep $JAR_NAME | awk '{print $2}'`
    if [ -n "$PIDS" ]; then
        echo -e "ERROR: The $JAR_NAME already started and the PID is ${PIDS}."
        exit 1
    fi
 
    echo "Starting the $JAR_NAME..."
 
    # start
    nohup java $JAVA_MEM_OPTS -jar $SPRING_PROFILES_ACTIV $JAR_PATH >> $LOG_PATH 2>&1 &
 
    COUNT=0
    while [ $COUNT -lt 1 ]; do
        sleep 1
        COUNT=`ps  --no-heading -C java -f --width 1000 | grep "$JAR_NAME" | awk '{print $2}' | wc -l`
        if [ $COUNT -gt 0 ]; then
            break
        fi
    done
    PIDS=`ps  --no-heading -C java -f --width 1000 | grep "$JAR_NAME" | awk '{print $2}'`
    echo "${JAR_NAME} Started and the PID is ${PIDS}."
    echo "You can check the log file in ${LOG_PATH} for details."
 
elif [ "$1" == "stop" ];then
 
    PIDS=`ps --no-heading -C java -f --width 1000 | grep $JAR_NAME | awk '{print $2}'`
    if [ -z "$PIDS" ]; then
        echo "ERROR:The $JAR_NAME does not started!"
        exit 1
    fi
 
    echo -e "Stopping the $JAR_NAME..."
 
    for PID in $PIDS; do
        kill $PID > /dev/null 2>&1
    done
 
    COUNT=0
    while [ $COUNT -lt 1 ]; do
        sleep 1
        COUNT=1
        for PID in $PIDS ; do
            PID_EXIST=`ps --no-heading -p $PID`
            if [ -n "$PID_EXIST" ]; then
                COUNT=0
                break
            fi
        done
    done
 
    echo -e "${JAR_NAME} Stopped and the PID is ${PIDS}."
else
    echo_help
    exit 1
fi
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95

在运行时,我们需要根据实际需要修改该脚本内容
在这里插入图片描述
启动脚本的使用
(1)修改脚本文件中的参数值
复制jar包名称
在这里插入图片描述
粘贴到server.sh中
在这里插入图片描述

(2)将启动脚本文件上传到 Linux 中
(3)分配执行权限:chmod 777
(4)通过脚本启动命令:server.sh start
(5)通过脚本关闭命令:server.sh stop
在这里插入图片描述
访问项目
在这里插入图片描述
关闭项目
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/101966
推荐阅读
相关标签
  

闽ICP备14008679号