微服务监控技术

SpringBoot Actuator的具体使用

在被监控的微服务导入依赖

1
2
3
4
5
<!-- SpringBoot Actuator -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

配置application.yml文件

1
2
3
4
5
6
7
8
9
10
management:
endpoints:
web:
exposure:
include: '*' #暴露所有的端点
base-path: /boot #监控actuator的名称,默认是actuator,这里改为了boot

endpoint:
health:
show-details: always #查看健康状态的详细信息

启动微服务后访问

启动后访问`http://微服务ip:端口号/boot/,返回正确数据表示测试通过

端点分类

地址 描述
/beans 显示所有的Spring bean列表
/caches 显示所有的缓存相关信息
/scheduledtasks 显示所有的定时任务相关信息
/loggers 显示所有的日志相关信息
/configprops 显示所有的配置信息
/env 显示所有的环境变量信息
/mappings 显示所有控制器相关信息
/info 显示自定义用户信息配置
/metrics 显示应用指标相关信息
/health 显示健康检查状态信息,up表示成功 down表示失败
/threaddump 显示程序线程的信息

整合图形化SpringBoot Admin:SBA

上面我们讲了Spring Boot Actuator , 可以通过http协议获取系统状态信息 , 但是返回的是JSON格式数据, 看起来不太方面, 而且还需要记忆路径, 比较麻烦 , Spring Boot Admin 给我们提供了更加友好的可视化界 面来查看这些信息 ! Spring Boot Admin 是一个开源社区项目,用于管理和监控 SpringBoot 应用程序。

应用程序作为Spring Boot Admin Client 向 Spring Boot Admin Server 注册 , Client 会定时向 Server 发送数据, Server 使用友好界面展 示数据。

搭建 Admin 服务器端

  1. 创建模块 springboot-admin-server,导入依赖:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <dependencies>

    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-server</artifactId>
    <version>3.0.4</version>
    </dependency>

    </dependencies>

2.在主启动类上加@EnableAdminServer 注解

1
2
3
4
5
6
7
8
@SpringBootApplication
@EnableAdminServer
public class AdminApplication {

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

搭建Admin客户端

在各个微服务(Admin客户端)整合AdminServer

第一步:导入Admin客户端依赖信息

1
2
3
4
5
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>3.0.4</version>
</dependency>

第二步:向 admin-server 注册的地址为 http://localhost:8080,最后暴露自己的 actuator 的所有端口信息

1
2
3
4
5
spring:
boot:
admin:
client:
url: http://localhost:8080

第三步:启动服务器端和客户端进行测试:

动态日志监控及级别调整

在微服务的src/main/resources目录下创建logback-spring.xml文件:

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
<?xml version="1.0" encoding="UTF-8"?>
<configuration>

<contextName>logback</contextName>

<!-- 日志的输出目录 -->
<property name="log.path" value="D://logs//spzx-cloud-user//logs" />

<!--控制台日志格式:彩色日志-->
<!-- magenta:洋红 -->
<!-- boldMagenta:粗红-->
<!-- cyan:青色 -->
<!-- white:白色 -->
<!-- magenta:洋红 -->
<property name="CONSOLE_LOG_PATTERN" value="%yellow(%date{yyyy-MM-dd HH:mm:ss}) %highlight([%-5level]) %green(%logger) %msg%n"/>

<!--文件日志格式-->
<property name="FILE_LOG_PATTERN" value="%date{yyyy-MM-dd HH:mm:ss} [%-5level] %thread %file:%line %logger %msg%n" />

<!--编码-->
<property name="ENCODING" value="UTF-8" />

<!-- 控制台日志 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<!-- 临界值过滤器 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>${ENCODING}</charset>
</encoder>
</appender>

<!-- 文件日志 -->
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>${log.path}//log.log</file>
<append>true</append>
<encoder>
<pattern>%date{yyyy-MM-dd HH:mm:ss} %msg%n</pattern>
<charset>${ENCODING}</charset>
</encoder>
</appender>


<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>

</configuration>

第二步:在微服务的application.yml文件中配置:

1
2
3
4
management:
endpoint:
logfile:
external-file: D://logs/spzx-cloud-user/info.log

第三步:再次访问Admin服务器端:即可看到实时监控日志、并可以调节日志的级别。