上一篇文章springboot(十九):使用Spring Boot Actuator监控应用介绍了Spring Boot Actuator的使用,Spring Boot Actuator提供了对单个Spring Boot的监控,信息包含:应用状态、内存、线程、堆栈等等,比较全面的监控了Spring Boot应用的整个生命周期。

但是这样监控也有一些问题:第一,所有的监控都需要调用固定的接口来查看,如果全面查看应用状态需要调用很多接口,并且接口返回的Json信息不方便运营人员理解;第二,如果Spring Boot应用集群非常大,每个应用都需要调用不同的接口来查看监控信息,操作非常繁琐低效。在这样的背景下,就诞生了另外一个开源软件:Spring Boot Admin。

什么是Spring Boot Admin?

Spring Boot Admin 是一个管理和监控Spring Boot 应用程序的开源软件。每个应用都认为是一个客户端,通过HTTP或者使用 Eureka注册到admin server中进行展示,Spring Boot Admin UI部分使用AngularJs将数据展示在前端。

Spring Boot Admin 是一个针对spring-boot的actuator接口进行UI美化封装的监控工具。他可以:在列表中浏览所有被监控spring-boot项目的基本信息,详细的Health信息、内存信息、JVM信息、垃圾回收信息、各种配置信息(比如数据源、缓存列表和命中率)等,还可以直接修改logger的level。

这篇文章给大家介绍如何使用Spring Boot Admin对Spring Boot应用进行监控。

监控单体应用

这节给大家展示如何使用Spring Boot Admin监控单个Spring Boot应用。

Admin Server端

项目依赖

<dependencies>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-server</artifactId>
<version>1.5.6</version>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-server-ui</artifactId>
<version>1.5.6</version>
</dependency>
</dependencies>

配置文件

server.port=8000

服务端设置端口为:8000。

启动类

@Configuration
@EnableAutoConfiguration
@EnableAdminServer
public class AdminServerApplication { public static void main(String[] args) {
SpringApplication.run(AdminServerApplication.class, args);
}
}

完成上面三步之后,启动服务端,浏览器访问http://localhost:8000可以看到以下界面:

示例代码

Admin Client端

项目依赖

<dependencies>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>1.5.6</version>
</dependency>
</dependencies>

配置文件

server.port=8001

spring.boot.admin.url=http://localhost:8000
management.security.enabled=false

-spring.boot.admin.url 配置Admin Server的地址
-management.security.enabled=false 关闭安全验证

启动类

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

配置完成之后,启动Client端服务,再次访问服务:http://localhost:8000可以看到客户端的相关信息。

首页会展示被监控的各个服务,点击详情可以查看某个服务的具体监控信息

通过上图可以看出,Spring Boot Admin以图形化的形式展示了应用的各项信息,这些信息大多都来自于Spring Boot Actuator提供的接口。

监控微服务

如果我们使用的是单个Spring Boot应用,就需要在每一个被监控的应用中配置Admin Server的地址信息;如果应用都注册在Eureka中就不需要再对每个应用进行配置,Spring Boot Admin会自动从注册中心抓取应用的相关信息。

这里使用四个示例项目来演示:

  • spring-boot-admin-server Admin Server端
  • spring-cloud-eureka 注册中心
  • spring-cloud-producer 应用一,Admin Client端
  • spring-cloud-producer-2 应用二,Admin Client端

首先启动注册中心spring-cloud-eureka,如果对Eureka不了解的同学可以查看这篇文章springcloud(二):注册中心Eureka

Server端

示例项目:spring-boot-admin-server

项目依赖

<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-server</artifactId>
<version>1.5.6</version>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-server-ui</artifactId>
<version>1.5.6</version>
</dependency>
</dependencies>

增加了对eureka的支持

配置文件

server:
port: 8000
spring:
application:
name: admin-server
eureka:
instance:
leaseRenewalIntervalInSeconds: 10
client:
registryFetchIntervalSeconds: 5
serviceUrl:
defaultZone: ${EUREKA_SERVICE_URL:http://localhost:8761}/eureka/ management.security.enabled: false

配置文件中添加了eureka的相关配置

启动类

@Configuration
@EnableAutoConfiguration
@EnableDiscoveryClient
@EnableAdminServer
public class AdminServerApplication { public static void main(String[] args) {
SpringApplication.run(AdminServerApplication.class, args);
}
}

上述步骤完成之后,启动Server端。

Client端

示例项目:spring-cloud-producer和spring-cloud-producer-2

项目依赖

<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>1.5.6</version>
</dependency>
</dependencies>

配置文件

server:
port: 9000
spring:
application:
name: producer
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
management:
security:
enabled: false

我们发现配置文件中并没有添加Admin Server的相关配置

启动类

@SpringBootApplication
@EnableDiscoveryClient
public class ProducerApplication { public static void main(String[] args) {
SpringApplication.run(ProducerApplication.class, args);
}
}

Web层

@RequestMapping("/hello")
public String index(@RequestParam String name) {
logger.info("request one/two name is "+name);
return "hello "+name+",this is first messge";
}

web层添加了/hello的请求方法,方法中使用one/two区别是哪个应用。spring-cloud-producer-2和spring-cloud-producer代码类似,具体大家可以查看示例代码。

完成上面配置之后,分别启动项目:spring-cloud-producer和spring-cloud-producer-2,浏览器访问http://localhost:8000 可以看到以下界面:

从上图可以看出Admin Server监控了四个实例,包括Server自己,注册中心、两个PRODUCER。说明Admin Server自动从服务中心抓取了所有的实例信息并进行了监控。点击Detail可以具体查看某一个示例的监控信息。

示例代码

邮件告警

Spring Boot Admin将微服务中所有应用信息在后台进行了展示,非常方便我们对微服务整体的监控和治理。但是我们的运营人员也不可能一天24小时盯着监控后台,因此如果服务有异常的时候,有对应的邮件告警就太好了,其实Spring Boot Admin也给出了支持。

我们对上面的示例项目spring-boot-admin-server进行改造。

添加依赖

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

增加了邮件发送的starter包

配置文件

spring:
mail:
host: smtp.qq.com
username: xxxxx@qq.com
password: xxxx
properties:
mail:
smtp:
auth: true
starttls:
enable: true
required: true
boot:
admin:
notify:
mail:
from: xxxx@qq.com
to: xxxx@qq.com
# http://codecentric.github.io/spring-boot-admin/1.5.6/#mail-notifications

在配置文件中添加邮件发送相关信息:邮件的发送者、接受者、协议、移动授权码等。关于Spring Boot邮件发送,可以参考springboot(十):邮件服务

配置完成后,重新启动项目spring-boot-admin-server,这样Admin Server就具备了邮件告警的功能,默认情况下Admin Server对Eureka中的服务上下线都进行了监控,当服务上下线的时候我们就会收到如下邮件:

当然这只是最基本的邮件监控,在实际的使用过程中,需要根据我们的情况对邮件告警内容进行自定义,比如监控堆内存的使用情况,当到达一定比例的时候进行告警等。

示例代码

参考

Spring Boot Admin Reference Guide

spring boot(二十)使用spring-boot-admin对服务进行监控的更多相关文章

  1. Spring Boot(二十):使用spring-boot-admin对spring-boot服务进行监控

    Spring Boot(二十):使用spring-boot-admin对spring-boot服务进行监控 Spring Boot Actuator提供了对单个Spring Boot的监控,信息包含: ...

  2. springboot(二十):使用spring-boot-admin对spring-boot服务进行监控

    上一篇文章<springboot(十九):使用Spring Boot Actuator监控应用>介绍了Spring Boot Actuator的使用,Spring Boot Actuato ...

  3. VMware vSphere 服务器虚拟化之二十五 桌面虚拟化之终端服务池

    VMware vSphere 服务器虚拟化之二十五 桌面虚拟化之终端服务池 终端服务池是指由一台或多台微软终端服务器提供服务的桌面源组成的池.终端服务器桌面源可交付多个桌面.它具有以下特征: 1.终端 ...

  4. Spring Boot2 系列教程(二十五)Spring Boot 整合 Jpa 多数据源

    本文是 Spring Boot 整合数据持久化方案的最后一篇,主要和大伙来聊聊 Spring Boot 整合 Jpa 多数据源问题.在 Spring Boot 整合JbdcTemplate 多数据源. ...

  5. 物联网架构成长之路(30)-Spring Boot Admin微服务WebUI监控

    0. 前言 一个完整的微服务解决方案包含了许多微服务,基于我们需要观察各个微服务的运行状态,因此Spring Boot 生态提供了Spring Boot Admin 这个组件来实现微服务管理WEB U ...

  6. Spring(二十):Spring AOP(四):基于配置文件的方式来配置 AOP

    基于配置文件的方式来配置 AOP 前边三个章节<Spring(十七):Spring AOP(一):简介>.<Spring(十八):Spring AOP(二):通知(前置.后置.返回. ...

  7. Spring(二十二):Spring 事务

    事务简介: 事务管理是企业级应用程序开发中必不可少的技术,用来确保数据的完整性和一致性. 事务就是一系列的动作,它们被当做一个单独的工作单元.这些动作要么全部完成,要么全部不起作用. 事务的是四个关键 ...

  8. Spring学习(十)Spring知识点汇总

    一.基础概念 Q:Spring是什么? 定义:Spring是一个轻量级的IoC(控制反转)和AOP容器框架. 目的:用于简化企业应用程序的开发,使得开发者只需要关心业务需求. 常见的配置方式: 基于X ...

  9. Spring(二):Spring框架&Hello Spring

    Spring是一个开源框架,是为了解决企业应用程序开发复杂性而创建的.框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为J2EE应用程序开发提供集成的框架. Spring 框架 ...

  10. Spring实战(十)Spring AOP应用——为方法引入新功能、为对象引入新方法

    切面最基本的元素是通知和切点,切点用于准确定位应该在什么地方应用切面的通知. 1.Spring借助AspectJ的切点表达式语言来定义Spring切面 在Spring中,要使用AspectJ的切点表达 ...

随机推荐

  1. Visual Studio 安装easyX且导入graphics库后,outtextxy提示未定义标示符

    1.点击 “项目” ,然后点击 “属性”. 2. 然后点击左侧 “配置与属性” 下的 “常规” ,在点击 “字符集” ,选择 “使用多字节字符集” 即可解决问题

  2. 洛谷P2637第一次,第二次,成交! 模拟?DP?

    今天水来一天,就贴道水吧.. 原题>>https://www.luogu.org/problem/show?pid=2637<< 题目描述 因为奶牛们的节食运动(奶牛还节食?) ...

  3. 关于python的面向对象

    一,面向对象 1..面向对象的过程:一切以事物的流程为核心,核心是过程二字,过程是指解决问题的步骤, 是一种机械是的编程思维 优点:负责的问题流程化,编写相对简单 缺点:可扩展性能差 2.面向对象一切 ...

  4. 前端阶段_html部分2后台frame的初始构架案例

    1.<frameset cols="25%,75%">          把页面分为1:3,并且使用frame的同时应该删除body标签 2.<frame src ...

  5. npm i和npm install的区别

    最近人用npm i来直接安装模块,但是有会报错,用npm install就不会报错,刚开始百思不得其解,它俩明明是同一个东西 后来查npm的帮助指令发现还是没区别,npm i仅仅是npm instal ...

  6. 学习笔记19—dpabi错误集

    1.回归斜边量的时候千万不要用红色标记的地方,而要用紫色标记的地方

  7. vue-cli webpack打包不.map文件,iview 项目打包完,图标路径有问题

    vue 项目打包出来有时候体积有点大,其实基本都是.map文件比较大,这些文件对项目没什么影响,可以直接在打包时候就不生成.map文件这样就不用每次删那么麻烦了, 做法: config中知道 inde ...

  8. Axure RP 8 下载 激活可以使用的授权码、用户名、秘钥等

    百度云下载地址: 链接:https://pan.baidu.com/s/13z0IPsKbLdPktiCD5eUe-A 提取码: oxhw 用户名: axureuser 序列号: 8wFfIX7a8h ...

  9. (转)C# 的三种序列化方法

    序列化是将一个对象转换成字节流以达到将其长期保存在内存.数据库或文件中的处理过程.它的主要目的是保存对象的状态以便以后需要的时候使用.与其相反的过程叫做反序列化. 序列化一个对象 为了序列化一个对象, ...

  10. (转)C#中base关键字的几种用法

    base其实最大的使用地方在面相对性开发的多态性上,base可以完成创建派生类实例时调用其基类构造函数或者调用基类上已被其他方法重写的方法.例如: 2.1关于base调用基类构造函数 public c ...