使用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

相關文章
相關標籤/搜索