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

上一篇文章《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@EnableAdminServerpublic class AdminServerApplication { public static void main(String[] args) { SpringApplication.run(AdminServerApplication.class, args); }}

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

示例代码:https://github.com/ityouknow/spring-boot-examples

Admin Client端

项目依赖

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

配置文件

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

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

启动类

@SpringBootApplicationpublic 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: 8000spring: application: name: admin-servereureka: instance: leaseRenewalIntervalInSeconds: 10 client: registryFetchIntervalSeconds: 5 serviceUrl: defaultZone: ${EUREKA_SERVICE_URL:http://localhost:8761}/eureka/management.security.enabled: false

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

启动类

@Configuration@EnableAutoConfiguration@EnableDiscoveryClient@EnableAdminServerpublic 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: 9000spring: application: name: producereureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/management: security: enabled: false

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

启动类

@SpringBootApplication@EnableDiscoveryClientpublic 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可以具体查看某一个示例的监控信息。

示例代码:https://github.com/ityouknow/spring-cloud-examples

邮件告警

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中的服务上下线都进行了监控,当服务上下线的时候我们就会收到如下邮件:

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

示例代码:https://github.com/ityouknow/spring-cloud-examples

原文发布于微信公众号 - 纯洁的微笑(keeppuresmile)

原文发表时间:2018-02-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Danny的专栏

【EJB学习笔记】——EJB开发环境搭建(Eclipse集成JBoss)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

18430
来自专栏王磊的博客

Spring Boot (七)MyBatis代码自动生成和辅助插件

MyBatis Generator 是MyBatis 官方出品的一款,用来自动生成MyBatis的 mapper、dao、entity 的框架,让我们省去规律性...

33010
来自专栏Java技术栈

Spring Boot核心配置

启动类 在包根目录下添加启动类,必须包含main方法,再添加Spring Boot启动方法: SpringApplication.run(SampleContr...

35760
来自专栏我是攻城师

Spring Boot如何集成duboo服务

37070
来自专栏闵开慧

ubuntu中的django安装配置与操作

1 安装django,在安装前确保python已经安装,ubuntu中默认有安装的。我们只需要安装django即可,解压django压缩文件,进入解压后的文件夹...

36780
来自专栏Core Net

Ios8之后, 定位的delegate不能触发的问题

30780
来自专栏ImportSource

Spring Boot 2.0 新特性和发展方向

以Java 8 为基准 Spring Boot 2.0 要求Java 版本必须8以上, Java 6 和 7 不再支持。 内嵌容器包结构调整 为了支持react...

46090
来自专栏世界第一语言是java

springcloud微服务实战:Eureka+Zuul+Feign/Ribbon+Hystrix Turbine+SpringConfig+sleuth+zipkin

72330
来自专栏菩提树下的杨过

jenkins 入门教程(中)

接上回继续,本文以我托管在bitbucket上的一个开源项目spring-boot-rest-framework做为演示,讲解如何创建自动化部署。 一、创建it...

32160
来自专栏bboysoul

体验一键php/java环境安装工具oneinstack

这个东西其实我很早之前就听说了,但是一直没有去尝试使用,我一直使用的是lnmp一键安装包,但是lnmp一键安装包是安装java环境的,oneinstack更强大...

32920

扫码关注云+社区

领取腾讯云代金券