1.Spring Boot Admin 是什么

Spring Boot Admin 是由 codecentric 组织开发的开源项目,使用 Spring Boot Admin 可以管理和监控你的 Spring Boot 项目。它分为客户端和服务端两部分,客户端添加到你的 Spring Boot 应用增加暴漏相关信息的 HTTP 接口,然后注册到 Spring Boot Admin 服务端,这一步骤可以直接向服务端注册,也可以通过 Eureka 或者 Consul 进行注册。而 Spring Boot Admin Server 通过 Vue.js 程序监控信息进行可视化呈现。并且支持多种事件通知操作。

2. Spring Boot Admin 服务端

Spring Boot Admin 服务端是基于 Spring Boot 项目的,如何创建一个 Spring Boot 项目这里不提,你可以参考之前文章或者从 https://start.spring.io/ 直接获得一个 Spring Boot 项目。

2.1. 添加依赖

只需要添加 web 依赖和 Spring-boot-admin-starter-server 依赖。

<dependency>

2.2. 启动配置

为了和下面的客户端端口不冲突,先修改端口号为 9090。

server:  port: 9090

添加 @EnableAdminServer 注解启用 Spring Boot Admin Server 功能。

@EnableAdminServer

服务端已经配置完成,启动项目进行访问就可以看到 Spring Boot Admin Server 的页面了。

Spring Boot Admin Server UI

3. Spring Boot Admin 客户端

创建 Spring Boot 项目依旧不提,这里只需要添加 Spring Boot Admin 客户端需要的依赖,在项目启动时就会增加相关的获取信息的 API 接口。然后在 Spring Boot 配置文件中配置 Spring Boot Admin 服务端,就可以进行监控了。

3.1 客户端依赖

pom.xml

<dependency>

3.2 客户端配置

客户端配置主要为了让客户端可以成功向服务端注册,所以需要配置客户端所在应用相关信息以及 Spring Boot Admin Server 服务端的 url。

server:  port: 8080

spring:  application:    # 应用名称    name: sjfx-api-search  jmx:    enabled: true  boot:    admin:      client:        # 服务端 url        url: http://127.0.0.1:9090        instance:          # 客户端实例 url          service-url: http://127.0.0.1:8080          prefer-ip: true          # 客户端实例名称          name: sjfx-api-search

management:  endpoints:    web:      exposure:          # 暴漏的接口 - 所有接口        include: "*"

配置中的 include: "*" 公开了所有的端口,对于生产环境,应该自信的选择要公开的接口。

Spring Boot Admin 可以获取应用中的定时任务,所以在代码中增加一个定时任务计划,每 20 秒输出一次当前时间,日志级别为 INFO,用于下面的定时任务和日志监控测试。

@Slf4j

3.3. 客户端运行

启动客户端会暴漏相关的运行状态接口,并且自动向配置的服务端发送注册信息。

下面是客户端的启动日志:

2019-12-21 22:45:32.878  INFO 13204 --- [           main] n.c.b.SpringbootAdminClientApplication   : Starting SpringbootAdminClientApplication on DESKTOP-8SCFV4M with PID 13204 (D:\IdeaProjectMy\springboot-git\springboot-admin\springboot-admin-client\target\classes started by 83981 in D:\IdeaProjectMy\springboot-git\springboot-admin)2019-12-21 22:45:32.881  INFO 13204 --- [           main] n.c.b.SpringbootAdminClientApplication   : No active profile set, falling back to default profiles: default2019-12-21 22:45:33.627  INFO 13204 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)2019-12-21 22:45:33.634  INFO 13204 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]2019-12-21 22:45:33.634  INFO 13204 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.29]2019-12-21 22:45:33.706  INFO 13204 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext2019-12-21 22:45:33.706  INFO 13204 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 797 ms2019-12-21 22:45:33.850  INFO 13204 --- [           main] o.s.b.a.e.web.ServletEndpointRegistrar   : Registered '/actuator/jolokia' to jolokia-actuator-endpoint2019-12-21 22:45:33.954  INFO 13204 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'2019-12-21 22:45:34.089  INFO 13204 --- [           main] o.s.s.c.ThreadPoolTaskScheduler          : Initializing ExecutorService2019-12-21 22:45:34.117  INFO 13204 --- [           main] o.s.s.c.ThreadPoolTaskScheduler          : Initializing ExecutorService 'taskScheduler'2019-12-21 22:45:34.120  INFO 13204 --- [           main] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 15 endpoint(s) beneath base path '/actuator'2019-12-21 22:45:34.162  INFO 13204 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''2019-12-21 22:45:34.163  INFO 13204 --- [           main] n.c.b.SpringbootAdminClientApplication   : Started SpringbootAdminClientApplication in 1.563 seconds (JVM running for 2.131)2019-12-21 22:45:34.271  INFO 13204 --- [gistrationTask1] d.c.b.a.c.r.ApplicationRegistrator       : Application registered itself as 6bcf19a6bf8c2019-12-21 22:45:34.293  INFO 13204 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'2019-12-21 22:45:34.294  INFO 13204 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'2019-12-21 22:45:34.300  INFO 13204 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 6 ms

从启动日志里的 Exposing 15 endpoint(s) beneath base path '/actuator' 这段,可以看到暴漏了 15 个 /actuator 的 API 接口,可以直接访问查看响应结果。

Spring Boot Admin Client 监测接口

从日志 Application registered itself as 6bcf19a6bf8c 可以看到客户端已经注册成功了。再看服务端可以看到注册上来的一个应用实例。

Spring Boot Admin Server

4. Spring Boot Admin 功能

点击监控页面上的在线的应用实例,可以跳转到应用实例详细的监控管理页面,也就是 Vue.js 实现的 web 展示。

Spring Boot Admin Server 监控页面

Spring Boot Admin Server 可以监控的功能很多,使用起来没有难度,下面描述下可以监测的部分内容:

  • 应用运行状态,如时间、垃圾回收次数,线程数量,内存使用走势。

  • 应用性能监测,通过选择 JVM 或者 Tomcat 参数,查看当前数值。

  • 应用环境监测,查看系统环境变量,应用配置参数,自动配置参数。

  • 应用 bean 管理,查看 Spring Bean ,并且可以查看是否单例。

  • 应用计划任务,查看应用的计划任务列表。

  • 应用日志管理,动态更改日志级别,查看日志。

  • 应用 JVM 管理,查看当前线程运行情况,dump 内存堆栈信息。

  • 应用映射管理,查看应用接口调用方法、返回类型、处理类等信息。

上面提到的日志管理,可以动态的更改日志级别,以及查看日志。默认配置下是只可以动态更改日志级别的,如果要在线查看日志,就需要手动配置日志路径了。

客户端上可以像下面这样配置日志路径以及日志高亮。

# 配置文件:application.ymllogging:  file:    name: boot.log  pattern:#     日志高亮    file: '%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) %clr(${PID}){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n%wEx'

下面是在 Spring Boot Admin 监测页面上查看的客户端应用日志。

Spring Boot Admin Server 查看日志

5. Spring Boot Admin 进阶

5.1. 邮件通知

Spring Boot Admin Server 支持常见的通知方式,比如邮件通知、电报通知、PagerDuty 通知等,下面将会演示常见的通知方式 - 邮件通知,最后也会演示如何通过监听时间进下设置自定义通知方式。

Spring Boot Admin Server 的邮件通知通过 Thymeleaf 模板发送 HTML 格式的电子邮件。因此,想要使用邮件通知首先要引入 Thymeleaf 依赖以及 spring-boot-starter-mail 依赖,并配置邮件发送者信息和接受者信息。

1. 添加依赖

<dependency>

2. 配置邮件

主要设置发送者信息和接收者信息。

spring:  boot:    admin:      notify:        mail:          # 逗号分隔的邮件收件人列表          to: xxxx@126.com          # 开启邮箱通知          enabled: true          # 不需要发送通知的状态:从状态A:到状态B          ignore-changes: {"UNKNOWN:UP"}          # 逗号分隔的抄送收件人列表          cc: xxxx@126.com          # 发件人          from: Spring Boot Admin# 邮件发送者信息  mail:    host: smtp.126.com    port: 25    username: xxxx@126.com    default-encoding: utf-8    password: xxxx

配置好邮件通知之后,重启服务端和客户端,等客户端注册到服务端之后直接终止客户端的运行,稍等片刻就可以在配置的通知接收邮箱里收到客户端实例下线通知了。

Sping Boot Admin Server 邮件通知

邮件通知使用的模板存放在 server 依赖的 classpath:/META-INF/spring-boot-admin-server/mail/status-changed.html 路径,如果想要自定义模板内容。可以拷贝这个文件放到自己的 templates 目录下,修改成自己想要的效果,然后在配置中指定自定义模板路径。

spring:  boot:    admin:      notify:        mail:          # 自定义邮件模版          template: classpath:/templates/notify.html

5.2 自定义通知

自定义通知只需要自己实现 Spring Boot Admin Server 提供的监听通知类即可,下面会演示如何在实例状态改变时输出实例相关信息。

import org.slf4j.Logger;

5.2. 访问限制

上面提到过,因为客户端增加了暴漏运行信息的相关接口,所以在生产环境中使用存在风险,而服务端没有访问限制,谁的可以访问也是不合理的。

下面将会为客户端和服务端分别增加访问限制,客户端主要是限制敏感接口的访问权限,服务端则是全局的访问限制。这些访问限制都通过 spring 安全框架 security 来实现,所以首先要为客户端和服务端都增加 maven 依赖。

<dependency>

1. 服务端

在引入安全框架依赖之后,需要配置访问控制,比如静态资源不需要限制,登录登出页面指定等。

import java.util.UUID;

在 application.yml 配置文件中配置用户名和密码。

spring:  security:    user:      name: user      password: 123

重启服务端,再次访问就需要用户名和密码进行登录了。

Spring Boot Admin Server 登录

2. 客户端

客户端在引入安全框架之后,也需要配置访问权限,主要是配置哪些路径可以访问,哪些路径访问需要登录限制,默认所有接口都需要登录限制。

同样的,客户端应用也需要在配置中配置客户端应用对于敏感接口的登录用户和密码,同时需要配置 Spring Boot Admin Server 的访问用户和密码,还要把自身的用户和密码注册时告诉服务端,不然服务端不能获取到监测数据。

spring:  security:    user:      # 客户端敏感接口用户和密码      name: client      password: 123  application:    # 应用名称    name: sjfx-api-search  jmx:    enabled: true  boot:    admin:      client:        # 服务端 url        url: http://127.0.0.1:9090        instance:          # 客户端实例 url          service-url: http://127.0.0.1:8080          prefer-ip: true          # 客户端实例名称          name: sjfx-api-search          metadata:            # 客户端自身的用户和密码告诉服务端            user.name: client            user.password: 123        # 服务端用户名密码        username: user        password: 123

客户端敏感接口访问测试。

客户端应用访问

到这里,客户端的敏感接口访问需要登录,服务端的管理页面也需要登录,客户端和服务端的访问控制已经完成了。

文中代码已经上传到:github.com/niumoo/springboot/tree/master/springboot-admin

参考资料:

https://github.com/codecentric/spring-boot-admin

https://codecentric.github.io/spring-boot-admin/current/

END

Java面试题专栏

【30期】说一下HashMap的实现原理?【29期】Java集合框架 10 连问,你有被问过吗?【28期】ZooKeeper面试那些事儿【27期】Dubbo面试八连问,这些你都能答上来吗?【26期】如何判断一个对象是否存活?(或者GC对象的判定方法)?【25期】这三道常见的面试题,你有被问过吗?【24期】请你谈谈单例模式的优缺点,注意事项,使用场景【23期】请你谈谈关于IO同步、异步、阻塞、非阻塞的区别【22期】为什么需要消息队列?使用消息队列有什么好处?【21期】你能说说Java中Comparable和Comparator的区别吗

欢迎长按下图关注公众号后端技术精选

springboot日志可视化_使用 SpringBoot Admin 监控你的 SpringBoot 程序相关推荐

  1. 使用 SpringBoot Admin 监控你的 SpringBoot 程序

    1.Spring Boot Admin 是什么 Spring Boot Admin 是由 codecentric 组织开发的开源项目,使用 Spring Boot Admin 可以管理和监控你的 Sp ...

  2. springboot日志可视化_spring boot面试问题集锦

    击上方"码农突围",马上关注,每天早上8:50准时推送 真爱,请置顶或星标 译文作者:david  原文链接:https://www.javainuse.com/spring/Sp ...

  3. springboot日志可视化_Springboot面试问题集锦

    本文为译文,译文作者:david . 原文:Spring Boot Interview Questions Q: 什么是spring boot? A: 多年来,随着新功能的增加,spring变得越来越 ...

  4. AndroidStudio_安卓原生开发_获取系统S/N序列号_实现在springboot服务端_设备远程保活监控---Android原生开发工作笔记159

    android项目做好了,以后,所有pad设备,在springboot服务后端,需要实现监控,那么,这个时候就需要保活机制,这个保活机制,可以让服务端,实时监控,所有的pad设备的,工作状态. 实现思 ...

  5. springboot 搭建分布式_爱了!阿里巴巴内部出品“SpringBoot+微服务指南”,理论与实战...

    爱了爱了,Alibaba出品"Springboot+微服务架构指南",理论与实战结合,双管齐下! 有幸从一位朋友那里得到Alibaba内部出品强推的"SpringBoot ...

  6. vs2019使用python进行数据可视化_在Visual Studio2019中使用汇编语言编写程序

    开始写代码.这里,我们就使用Irvine库提供的过程来实现一些小功能.首先,改变控制台窗口的背景色与前景色,接着每隔一秒,在控制台窗口打印一个随机的英文小写字母,最后弹出一个windows消息弹框.代 ...

  7. springboot 创建地址_使用 SpringBoot Admin监控Spring Boot 服务

    简介 SpringBoot-Amind是什么?Spring Boot Admin 是一个管理和监控 Spring Boot 应用程序的开源软件.,可监控的信息包含:应用状态.内存.线程.堆栈等等,比较 ...

  8. Springboot 系列(十七)迅速使用 Spring Boot Admin 监控你的 Spring Boot 程序,支持异常邮件通知

    点赞再看,动力无限.Hello world : ) 微信搜「 程序猿阿朗 」. 本文 Github.com/niumoo/JavaNotes 和 未读代码博客 已经收录,有很多知识点和系列文章. 1. ...

  9. springboot 日志级别_SpringBoot实战(十三):Admin动态修改日志级别

    强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan [前言] 之前关于线上输出日志一直有个困惑:如何可以动态调整的日志级别,来保证系统在正常运行时性 ...

最新文章

  1. 今天用GRID感觉它严重缺少灵活性
  2. ubuntu编译qemu报错:‘ERROR: DTC (libfdt) version = 1.4.0 not present.’
  3. anaconda的执行路径
  4. python迭代器是什么百度百科,python迭代器的接口是什么?
  5. CWP中的排序算法:C语言
  6. Java垃圾回收精粹 — Part1
  7. Lync Server 2010迁移至Lync Server 2013部署系列 Part14:A/V服务器目录迁移
  8. ctfmon是什么启动项_电脑启动项没有ctfmon怎么办_win7启动项没有ctfmon的处理方法...
  9. 最新苹果cms影视源码双端支持在线切换3套主题开心版带详细安装教程
  10. pgadmin4 如何改成中文版
  11. 为何要学习游戏引擎底层技术
  12. 处理数据库镜像问题的一个案例——数据库主体与镜像断开连接
  13. 中小企业的公司财务管理系统
  14. Excel VBA Sheet1和Sheets(1)的区别
  15. Android微信浏览器标题,微信浏览器设置网页标题
  16. matlab命令批量重命名,MATLAB中预定义对话框之文件打开对话框以及如何批量重命名...
  17. 解决mplfinance绘制箱体图一字涨停k线颜色错误的情况
  18. 新时代城市规划建设需新基建与传统基建携手共同打造
  19. android camera2 API流程分析
  20. UITableView顶部多出一截空白问题

热门文章

  1. ftp 服务部署及ftp 权限设置
  2. 优达学城机器学习之--朴素贝叶斯
  3. 打印全年日历 java实现
  4. Skywalking 6.6 release deploy on linux os use H2 storage tips
  5. 学计算机的能做近视手术吗,生活工作常接触电脑,可以做近视手术吗
  6. 百融否认有人因“数据问题”被带走调查;AI明星创企现造假丑闻:雇人背后悄悄操控机器人;国会议员提议分拆Facebook...
  7. 将保存的2G视频压缩成50M,居然这么简单?该给视频来波瘦身了
  8. 论文整理学习——生成任意完美的庞加莱光束
  9. web前端课程设计 HTML+CSS+JavaScript旅游风景云南城市网页设计与实现 web前端课程设计代码 web课程设计 HTML网页制作代码
  10. Leetcode 874. 模拟行走机器人 (模拟,一步一步的走)