1 简介

目前,微服务大行其道,各大小公司争相学习模仿,把单体应用拆得七零八落。服务多了,运行的实例多了,给运维人员的压力就更大了。如果有十几个应用,单单做Health Check就已经够费时间的了。聪明的Springboot提供了Actuator接口,可以非常好获得应用的内部信息,然而针对数量庞大的服务却无能为力。

得益于开源社区的力量,我们有了Springboot Admin。它能对注册于服务发现的所有应用监控起来,功能包括健康检查、JVM内存、INFO信息、获得线程栈和堆栈信息、提醒(邮件、Slack、钉钉、自定义...)等。总之,它提供了非常丰富的监控功能,减轻运维人员的工作任务。

目前Springboot Admin(后面简称SBA)的最新版本为2.2.0,本文演示将使用该版本。

2 两种监控模式

使用SBA监控Client有两种模式,一种是在Client端引入spring-boot-admin-starter-client依赖,配置好Server的地址信息就可以了。另一种模式是将所有Client端注册到服务发现(Eureka)组件中去,同时把Server端也注册,这样Server端就可以监控所有Client端了。

第二种模式是更方便的,不用对Client都添加依赖,后面的例子使用第二种模式。

服务端需要添加SBA的依赖和Eureka Client的依赖,如下:

  1. <dependencies>
  2. <dependency>
  3. <groupId>de.codecentric</groupId>
  4. <artifactId>spring-boot-admin-starter-server</artifactId>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.springframework.cloud</groupId>
  8. <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
  9. </dependency>
  10. </dependencies>

配置文件配置信息如下:

  1. server.port=9000
  2. spring.application.name=admin-monitor-service
  3. eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
  4. eureka.client.register-with-eureka=true
  5. eureka.client.fetch-registry=true

启动后就可以监控微服务了(当然需要Eureka和其它Client也启动并注册),效果图如下:

上图显示共有四个应用受到监控:

有一个ADMIN-MONITOR-SERVICE,即SBA本身;

有两个DATA-SERVICE,用于数据库操作的服务;

有一个GATEWAY,是网关服务,即Zuul。

能看到服务的名字,还能看到其版本号。

3 保护你的SBA

3.1 保护Server

现在SBA启动后直接输入地址就可以访问,不需要密码登陆,这显然是不安全的。SBA本质也是一个Springboot的Web应用,可以用Spring Security来做安全和权限控制。

添加Spring Security依赖如下:

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-security</artifactId>
  4. </dependency>

配置用户和密码:

  1. spring.security.user.name=admin
  2. spring.security.user.password=admin

重启应用后,就需要登陆密码才能访问了,如下:

实际上Spring Security远比这强大,我们可以通过配置把更敏感的信息保护起来,如HeamDump文件的获取,日志级别的修改等。

注意:即使做了上面的措施,也无法保证Server的安全。要想更安全地使用SBA,可以通过添加SSL,使它运行在https之上。

3.2 保护Client

目前我们把Client的所有Endpoints都暴露出来,这也是非常危险的,我们可以有选择的暴露需要的信息。另外,我们还可以为Client设置账户密码保护,只有拥有了正确的账户密码,Server端才可以获得监控权限。

4 监控功能

SBA为我们提供丰富的监控功能,我们选择几项展示一下。

4.1 健康检查与细节查看

SBA会监控服务是否健康,包括应用及应用的组件,如数据库连接等。

  • INFO信息

图上还有info信息,这个是自定义配置的,非常方便,如配置代码的版本号等。

  1. info.author=Larry Deng
  2. info.version=1.0.3
  • Beans

可以查看所有的beans信息。

  • Configuration Properties

查看目前应用使用的配置信息。

  • Scheduled Tasks

查看正在使用的定时调度任务。

4.2 日志Loggers

展示了当前的日志级别,更强大的是,它可以实时调整日志级别,而不用去改log4j2配置文件,也不用重启。在有问题需要更详细的日志的时候,非常方便。

4.3 JVM信息(线程与内存)

可以实时地查看每个线程的状态,并且能下载Thread Dump文件,方便有故障的时候分析。同样,还能下载Heap Dump文件,在占用内存居高不下,还不能GC时,可以用来分析。

4.4 其它

Mappings能查看Endpoints的路径和方法及返回类型等。

Caches可以查看应用所使用的缓存,并能操作,如清空缓存。

5 强大的提醒功能

虽然SBA提供了强大的监控功能,但要人工一直盯着屏幕就太低效了。为此,SBA提供了强大的提醒功能,能够在发生服务状态变更的时候发出告警。支持的提醒功能有:

  • Email
  • PagerDuty
  • OpsGenie
  • Hipchat
  • Slack
  • Let's Chat
  • Telegram

等。

同时还支持自定义,这样可以整合更丰富的提醒,如短信、电话等。

5.1 邮件提醒

为了不让篇幅过大,下面只展示一下邮件提醒功能的使用,其它可参考用户手册。

添加邮件依赖:

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-mail</artifactId>
  4. </dependency>

配置参数:

  1. spring.mail.host=smtp.example.com
  2. spring.mail.username=smtp_user
  3. spring.mail.password=smtp_password
  4. spring.boot.admin.notify.mail.to=admin@example.com

邮件提醒其它配置项:

5.2 自定义提醒

自定义提醒很简单,只要实现Notifier接口就行了,建议直接继承AbstractEventNotifierAbstractStatusChangeNotifier这两个类。逻辑在方法doNotify中实现。

  1. public class CustomNotifier extends AbstractEventNotifier {
  2. private static final Logger LOGGER = LoggerFactory.getLogger(LoggingNotifier.class);
  3. public CustomNotifier(InstanceRepository repository) {
  4. super(repository);
  5. }
  6. @Override
  7. protected Mono<Void> doNotify(InstanceEvent event, Instance instance) {
  8. return Mono.fromRunnable(() -> {
  9. if (event instanceof InstanceStatusChangedEvent) {
  10. LOGGER.info("Instance {} ({}) is {}", instance.getRegistration().getName(), event.getInstance(),
  11. ((InstanceStatusChangedEvent) event).getStatusInfo().getStatus());
  12. }
  13. else {
  14. LOGGER.info("Instance {} ({}) {}", instance.getRegistration().getName(), event.getInstance(),
  15. event.getType());
  16. }
  17. });
  18. }
  19. }

6 总结

SBA非常强大,一篇文章难以完备,大家可以参考用户手册

另外,服务发现不一定要使用Eureka,如Nacos也是支持的。只使用SBA也是不够的,对于监控日志,可以使用ELK,这是题外话了,以后有空再整理吧。


欢迎关注公众号<南瓜慢说>,将持续为你更新...

欢迎加博主微信,做一个点赞之友,哈哈...

多读书,多分享;多写作,多整理。

【Springboot】用Springboot Admin监控你的微服务应用的更多相关文章

  1. SpringCloud微服务实战——搭建企业级开发框架(四十四):【微服务监控告警实现方式一】使用Actuator + Spring Boot Admin实现简单的微服务监控告警系统

      业务系统正常运行的稳定性十分重要,作为SpringBoot的四大核心之一,Actuator让你时刻探知SpringBoot服务运行状态信息,是保障系统正常运行必不可少的组件.   spring-b ...

  2. springboot的maven多模块项目架构微服务搭建——依赖方式的多模块演化为微服务项目

    在上一篇依赖方式多模块的基础上对项目进行改造.主要改造user-service项目,service要配置mapper.mybatis及数据库相关的东西,后面的接口消费方user就不再需要了 注意:以下 ...

  3. springboot的maven多模块项目架构微服务搭建——构建多模块项目(依赖方式)

    总想对微服务架构做一个小小的总结,不知如何下手,最近觉得还是从搭建微服务的过程来入手,对于springboot的maven项目从构建多模块架构进而衍化为常用的微服务架构来做个记录吧. 首先,创建多个s ...

  4. SpringBoot+SpringCloud实现登录用户信息在微服务之间的传递

    实现思路: 1:准备一个ThreadLocal变量,供线程之间共享. 2:每个微服务对所有过来的Feign调用进行过滤,然后从请求头中获取User用户信息,并存在ThreadLocal变量中. 3:每 ...

  5. 【转】SpringBoot+SpringCloud实现登录用户信息在微服务之间的传递

    实现思路: 1:准备一个ThreadLocal变量,供线程之间共享. 2:每个微服务对所有过来的Feign调用进行过滤,然后从请求头中获取User用户信息,并存在ThreadLocal变量中. 3:每 ...

  6. 基于Centos7.4搭建prometheus+grafana+altertManger监控Spring Boot微服务(docker版)

    目的:给我们项目的微服务应用都加上监控告警.在这之前你需要将 Spring Boot Actuator引入 本章主要介绍 如何集成监控告警系统Prometheus 和图形化界面Grafana 如何自定 ...

  7. spring-boot 之 使用Admin监控应用

    https://yq.aliyun.com/articles/2322 ************************************* 摘要: Spring Boot提供的监控接口,例如: ...

  8. spring boot 2.0.3+spring cloud (Finchley)8、微服务监控Spring Boot Admin

    参考:Spring Boot Admin 2.0 上手 Spring Boot Admin 用于管理和监控一个或多个Spring Boot程序,在 Spring Boot Actuator 的基础上提 ...

  9. 《深入理解Spring Cloud与微服务构建》书籍目录

    转载请标明出处: https://blog.csdn.net/forezp/article/details/79735542 本文出自方志朋的博客 作者简介 方志朋,毕业于武汉理工大学,CSDN博客专 ...

随机推荐

  1. 2019-10-29:渗透测试,基础学习,sqlmap文件读取,写入,dnslog盲注作用,mssql手工注入,笔记

    sqlmap参数--file-read,从数据库服务器中读取文件--file-write,--file-dest,把文件上传到数据库服务器中 dnslog平台的学习和它在盲注中的应用1,判断注入点2, ...

  2. linux basic

    一:date 语法: 打印日期:date [OPTION].....  [+FORMAT] 设定日期:date [MMDDhhmm] [[cc][YY][.ss] 创建带实时日期的文件 touch $ ...

  3. vue e.path 移动端兼容

    作用 e.path 用来获取点击元素及以上所有父元素的一个数组 问题 当在移动端会有获取不到e.path的问题 不兼容 解决 let path = event.path || (event.compo ...

  4. 邮箱基础协议:SMTP/POP3/IMAP

    目录 电子邮件的组成:信封.首部和正文 邮件基础协议 SMTP SMTP 指令 使用 Telnet 模拟 SMTP 发送邮件 POP3 POP3 的生命周期 IMAP 标志消息属性 状态和流程图 IM ...

  5. 【软件工具】easyExcel简明使用指南

    easyExcel简介 Java领域解析.生成Excel比较有名的框架有Apache poi.jxl等.但他们都存在一个严重的问题就是非常的耗内存.如果你的系统并发量不发的话可能还行,但是一旦并发上来 ...

  6. 【JAVA - 基础】之String存储机制浅析

    本文主要解决以下几个问题 String源码解析? String和new String的区别? String通过"+"或concat累加时的对象创建机制? StringBuilder ...

  7. VLAN实验3(Hybrid接口的应用)

    本实验基于<HCNA网络技术实验指南> 本实验使用eNSP软件 原理概述: Hybrid接口既可以连接普通终端的接入链路又可以连接交换机间的干道链路,它允 许多个VLAN的帧通过,并可以在 ...

  8. 10个常见的HTTP状态码

    目录 500 内部服务器错误 404 文件未找到 403 禁止访问 400 错误请求 401 未经授权 200 请求成功 206 部分内容 301 永久重定向 302 临时重定向 502 无效网关 H ...

  9. PAT甲级专题|最短路

    PAT甲级最短路 主要算法:dijkstra 求最短最长路.dfs图论搜索. 1018,dijkstra记录路径 + dfs搜索路径最值 25分,错误点暂时找不出.. 如果只用dijkstra没法做, ...

  10. 第五章 Unity中的基础光照(2)

    目录 1. Unity中的环境光和自发光 2. 在UnityShader中实现漫反射光照模型 2.1 实践:逐顶点光照 2.2 实践:逐像素光照 2.3 半兰伯特模型 1. Unity中的环境光和自发 ...