【Springboot】用Springboot Admin監控你的微服務應用

1 簡介

目前,微服務大行其道,各大小公司爭相學習模仿,把單體應用拆得七零八落。服務多了,運行的實例多了,給運維人員的壓力就更大了。若是有十幾個應用,單單作Health Check就已經夠費時間的了。聰明的Springboot提供了Actuator接口,能夠很是好得到應用的內部信息,然而針對數量龐大的服務卻無能爲力。java

得益於開源社區的力量,咱們有了Springboot Admin。它能對註冊於服務發現的全部應用監控起來,功能包括健康檢查、JVM內存、INFO信息、得到線程棧和堆棧信息、提醒(郵件、Slack、釘釘、自定義...)等。總之,它提供了很是豐富的監控功能,減輕運維人員的工做任務。git

file

目前Springboot Admin(後面簡稱SBA)的最新版本爲2.2.0,本文演示將使用該版本。github

2 兩種監控模式

使用SBA監控Client有兩種模式,一種是在Client端引入spring-boot-admin-starter-client依賴,配置好Server的地址信息就能夠了。另外一種模式是將全部Client端註冊到服務發現(Eureka)組件中去,同時把Server端也註冊,這樣Server端就能夠監控全部Client端了。spring

第二種模式是更方便的,不用對Client都添加依賴,後面的例子使用第二種模式。數據庫

服務端須要添加SBA的依賴和Eureka Client的依賴,以下:segmentfault

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

配置文件配置信息以下:緩存

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

啓動後就能夠監控微服務了(固然須要Eureka和其它Client也啓動並註冊),效果圖以下:安全

file

上圖顯示共有四個應用受到監控:微信

有一個ADMIN-MONITOR-SERVICE,即SBA自己;app

有兩個DATA-SERVICE,用於數據庫操做的服務;

有一個GATEWAY,是網關服務,即Zuul。

能看到服務的名字,還能看到其版本號。

3 保護你的SBA

3.1 保護Server

如今SBA啓動後直接輸入地址就能夠訪問,不須要密碼登錄,這顯然是不安全的。SBA本質也是一個Springboot的Web應用,能夠用Spring Security來作安全和權限控制。

添加Spring Security依賴以下:

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

配置用戶和密碼:

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

重啓應用後,就須要登錄密碼才能訪問了,以下:

file

實際上Spring Security遠比這強大,咱們能夠經過配置把更敏感的信息保護起來,如HeamDump文件的獲取,日誌級別的修改等。

注意:即便作了上面的措施,也沒法保證Server的安全。要想更安全地使用SBA,能夠經過添加SSL,使它運行在https之上。

3.2 保護Client

目前咱們把Client的全部Endpoints都暴露出來,這也是很是危險的,咱們能夠有選擇的暴露須要的信息。另外,咱們還能夠爲Client設置帳戶密碼保護,只有擁有了正確的帳戶密碼,Server端才能夠得到監控權限。

4 監控功能

SBA爲咱們提供豐富的監控功能,咱們選擇幾項展現一下。

4.1 健康檢查與細節查看

SBA會監控服務是否健康,包括應用及應用的組件,如數據庫鏈接等。

file

  • INFO信息

圖上還有info信息,這個是自定義配置的,很是方便,如配置代碼的版本號等。

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

能夠查看全部的beans信息。

  • Configuration Properties

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

  • Scheduled Tasks

查看正在使用的定時調度任務。

4.2 日誌Loggers

展現了當前的日誌級別,更強大的是,它能夠實時調整日誌級別,而不用去改log4j2配置文件,也不用重啓。在有問題須要更詳細的日誌的時候,很是方便。

file

4.3 JVM信息(線程與內存)

能夠實時地查看每一個線程的狀態,而且能下載Thread Dump文件,方便有故障的時候分析。一樣,還能下載Heap Dump文件,在佔用內存居高不下,還不能GC時,能夠用來分析。

file

4.4 其它

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

Caches能夠查看應用所使用的緩存,並能操做,如清空緩存。

5 強大的提醒功能

雖然SBA提供了強大的監控功能,但要人工一直盯着屏幕就過低效了。爲此,SBA提供了強大的提醒功能,可以在發生服務狀態變動的時候發出告警。支持的提醒功能有:

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

等。

同時還支持自定義,這樣能夠整合更豐富的提醒,如短信、電話等。

5.1 郵件提醒

爲了避免讓篇幅過大,下面只展現一下郵件提醒功能的使用,其它可參考用戶手冊。

添加郵件依賴:

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

配置參數:

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

郵件提醒其它配置項:

file

5.2 自定義提醒

自定義提醒很簡單,只要實現Notifier接口就好了,建議直接繼承AbstractEventNotifierAbstractStatusChangeNotifier這兩個類。邏輯在方法doNotify中實現。

public class CustomNotifier extends AbstractEventNotifier {
  private static final Logger LOGGER = LoggerFactory.getLogger(LoggingNotifier.class);

  public CustomNotifier(InstanceRepository repository) {
    super(repository);
  }

  @Override
  protected Mono<Void> doNotify(InstanceEvent event, Instance instance) {
    return Mono.fromRunnable(() -> {
      if (event instanceof InstanceStatusChangedEvent) {
        LOGGER.info("Instance {} ({}) is {}", instance.getRegistration().getName(), event.getInstance(),
            ((InstanceStatusChangedEvent) event).getStatusInfo().getStatus());
      }
      else {
        LOGGER.info("Instance {} ({}) {}", instance.getRegistration().getName(), event.getInstance(),
            event.getType());
      }
    });
  }
}

6 總結

SBA很是強大,一篇文章難以完備,你們能夠參考用戶手冊

另外,服務發現不必定要使用Eureka,如Nacos也是支持的。只使用SBA也是不夠的,對於監控日誌,可使用ELK,這是題外話了,之後有空再整理吧。


歡迎關注公衆號<南瓜慢說>,將持續爲你更新...

file

歡迎加博主微信,作一個點贊之友,哈哈...

file

多讀書,多分享;多寫做,多整理。

相關文章
相關標籤/搜索