【SpringBoot框架学习】Actuator监控中心 详解

Youzg LOGO

基本知识点:

什么是 Actuator监控中心?

针对 微服务器

  1. 监控
  2. 内存变化(堆内存,线程,日志管理等)
  3. 检测服务配置连接池是否可用(模拟访问、懒加载)
  4. 统计现有Bean(通过Spring容器) 和 Http接口(@RequestMapping)

的一系列数据管理机制
Actuator监控应用只通过JSON形式返回数据统计结果没有UI界面处理
AdminUI内置Actuator服务监控,并对返回JSON数据进行图形化处理展示


为什么要学习actuator监控呢?

应用场景:

微服务架构中,多功能由多个服务器实现
虽然这样做减少了主服务器的压力,但是给运维同志们造成了很大的压力
因此,为了做到高效运维,需要一套 自动化的监控运维机制

  1. 不间断地收集各个微服务应用的各项 指标情况
  2. 根据这些基础指标信息来制定监控和预警规则

SpringBoot监控机制,正是迎合了这种需求
它可以通过使用HTTP端点各个请求路径JMX监管审计收集 引用的运行情况,

概括来讲,就是:
简化 管理微服务 的流程


Maven依赖:

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

基本使用:

起步:

当我们导入了上述Maven依赖后,启动:
启动 展示
只要出现上述的信息,就代表Actuator成功配置上了!

1. 若是我们访问

http://localhost:设置的端口号/actuator

就会显示如下结果:
结果 展示

2. 若是我们访问

http://localhost:8080/actuator/health

就会显示
health 展示

3. 若是我们访问

http://localhost:8080/actuator/info

就会显示
info 展示
其实,health和info都是actuator的内置端点


那么,本人来介绍下 actuator的内置端点

内置端点:

Endpoint ID Description
auditevent 显示 应用暴露的 审计事件
(比如认证进入、订单失败)
info 显示 应用的基本信息
health 显示 应用的健康状态
metrics 显示 应用多样的度量信息
loggers 显示和修改 配置的loggers
logfile 返回 log file中的内容
(如果logging.file或者logging.path被设置)
httptrace 显示 HTTP足迹
(最近100个HTTP request/repsponse)
env 显示 当前的环境特性
flyway 显示 数据库迁移路径 的 详细信息
liquidbase 显示 Liquibase数据库迁移 的 详细信息
shutdown 优雅地 逐步关闭应用
mappings 显示 所有的@RequestMapping路径
scheduledtasks 显示 应用中的 调度任务
threaddump 执行 一个 线程dump
heapdump 返回 一个 GZip压缩的JVM堆dump

其实这些信息,我们在IDEA中也能观察得到:
IDEA 展示


获取 端点的详细信息:

若是我们想要获取某个端点的详细信息,
则在配置文件中加入

# 获得健康检查中所有指标的详细信息
management.endpoint.health.show-details=always

即可

本人以health端点为例,来展示设置后的效果
在加入后,当我们再次访问health端点后,就会显示:
详细 展示


在这里还有两个关于info端点的问题:

info端点 问题:

1. info端点不显示(仅显示{})问题

  • 原因

生成文件中的META-INF目录下的build-info.properties文件没有生成目标文件 展示

  • 解决办法

我们只需要双击Maven提供的插件,生成即可:
插件 展示


2. 自定义 info端点 的内容:

在application.properties配置文件中,加入如下中的所需内容即可:

# info内容自定义
info.app.name=${spring.application.name}
info.app.description=@project.description@
info.app.version=@project.version@
info.app.encoding=@project.build.sourceEncoding@
info.app.java.version=@java.version@

但是,我们若是直接去访问这些端点,则会404异常
404 展示
这是为什么呢?
答曰:

只有 health 和 info 端点 默认暴露

那么,我们该如何暴露这些端点呢?

设置 端点 暴露:

由于properties配置文件 和 yml配置文件 效果是一样的,
因此本人在此仅展示 properties配置文件 的设置步骤:

application.properties配置文件中加入

# 暴露指定端点
management.endpoints.web.exposure.include=目标端点1, 目标端点2, ...

或者

# 暴露所有端点
management.endpoints.web.exposure.include=*

抑或是

# 暴露除指定端点外的其它端点
management.endpoints.web.exposure.include=*
management.endpoints.web.exposure.exclude=非目标端点1, 非目标端点2, ...

这时,我们能发现:
当我们再次访问

http://localhost:8080/actuator

时,我们设置的端点也会出现在返回的结果中:
暴露后 展示
这时,当我们再次访问设置暴露的端点时,就会显示出相应的信息:
暴露端口 展示


在本篇博文刚开始就讲过:

actuator监控 机制,是来简化运维同志们的操作的

那么,本人在这里再来扩展一个知识点 —— ui界面化插件:

ui界面化 —— AdminUI:

Server端:

Maven依赖:

(注意:此处的Maven依赖,是在actuator的基础上增加的)

<!--ui插件 服务端-->
<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-server</artifactId>
    <version>2.2.3</version>
</dependency>
<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-server-ui</artifactId>
    <version>2.2.3</version>
</dependency>

配置Server端的端口号:

在application配置文件中加入

server:
  port: 自定义 服务器端 端口号

声明Server:

在该程序的Application启动类上,加上

@EnableAdminServer

注解


查看结果:

这时,当我们访问

http://localhost:配置文件中配置的端口号

就会出现如下页面:
在这里插入图片描述


Client端:

Maven依赖:

(注意:此处的Maven依赖,是在actuator的基础上增加的)

<!--ui插件 客户端-->
<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-client</artifactId>
    <version>2.2.3</version>
</dependency>

配置client端的端口号:

由于好多同学和本人一样,在一台机子上测试,
因此,要注意不要 与server端的端口号 冲突

server:
  port: 自定义的client端的port

连接Server端:

spring:
  boot:
    admin:
      client:
        url: http://localhost:要连接的server的port


测试:

先启动Server端,再启动两个Client端(一定要注意 端口冲突问题!)
访问

http://localhost:之前设置的server的port

就会显示如下页面:
测试结果 展示
我们访问第一个链接:
欢迎页面 展示
可以看到:测试成功了!
(之所以此处显示Login Failure页面,是因为本人为了展示actuator-ui,
找的之前博文《【Spring Security框架学习】专栏总集篇》中的程序来充当的client端)

当我们点击应用墙,就会看到:
应用墙 展示
我们再来查看下第二个client的情况:
细节1 展示
细节2 展示


心得体会 与 未来展望:

其实看到这里,相信很多同学和本人一样:
想到了本人之前的博文 —— 《详解 服务发现 的基本实现》中所讲解的 服务发现重要组件 功能一致!

而此处的Server端就是服务发现中的监控器
Client端就是App服务器

本人再来展示下 服务发现框架基本组件
(由于原理都一致,SpringCloud的官方图片未找到,本人就挑选最熟悉的Dubbo来展示)
Dubbo展示
可以看到:
Dubbo中的Monitor,正是和本篇博文的 Actuator 功能一致!


而在我们之后学习微服务框架的过程中,也会学到两者的整合
所以本篇博文仅讲解下基本使用原理,来为同学们扫扫盲,希望对有需要的同学有所帮助!

原文地址:https://www.cnblogs.com/codderYouzg/p/13274893.html