使用spring-boot-admin对spring-boot服务进行监控

原文:http://www.cnblogs.com/ityouknow/p/8440455.htmlhtml

 

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

可是这样监控也有一些问题:第一,全部的监控都须要调用固定的接口来查看,若是全面查看应用状态须要调用不少接口,而且接口返回的Json信息不方便运营人员理解;第二,若是Spring Boot应用集群很是大,每一个应用都须要调用不一样的接口来查看监控信息,操做很是繁琐低效。在这样的背景下,就诞生了另一个开源软件:Spring Boot Admin。java

什么是Spring Boot Admin?

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

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

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

监控单体应用

这节给你们展现如何使用Spring Boot Admin监控单个Spring Boot应用。spring

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

相关文章
相关标签/搜索