微服務(wù)監(jiān)控 Spring Boot Admin

Spring Boot Admin用于管理和監(jiān)控一個或者多個Spring Boot程序晌畅。分為Server端和Client端豹悬,Client端可以通過Http向Server端注冊蛾魄,也可以結(jié)合Spring Cloud的服務(wù)注冊組件Eureka進(jìn)行注冊蜡塌,它提供了UI界面仑性,方便用于管理和監(jiān)控军掂。監(jiān)控的內(nèi)容包括Spring Boot的監(jiān)控組件Actuator的各個Http節(jié)點(diǎn)蠕搜。
本章依然使用前面講解其他組件所建的工程怎茫,github地址

監(jiān)控Spring Cloud微服務(wù)

構(gòu)建Admin Server

在之前的演示項(xiàng)目中創(chuàng)建一個Module工程,取名admin-server轨蛤。

  • 引入相關(guān)依賴蜜宪,依賴和說明如下。
         <!--Admin Server-->
        <dependency>
            <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-server</artifactId>
            <version>1.5.1</version>
        </dependency>
        <!--Admin Server UI -->
        <dependency>
            <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-server-ui</artifactId>
            <version>1.5.1</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--eureka client -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
          <!--actuator的起步依賴 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--在管理界面需要與JMX-Beans進(jìn)行交互祥山,需要引入jolokia的依賴 -->
        <dependency>
            <groupId>org.jolokia</groupId>
            <artifactId>jolokia-core</artifactId>
        </dependency>
  • 在配置文件中做相關(guān)配置圃验,配置和說明如下。
server:
  port: 5000
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/   # eureka注冊中心地址
spring:
  application:
    name: admin-server
# spring boot默認(rèn)開啟env缝呕、metrics澳窑、dump、jolokia供常、info等節(jié)點(diǎn)照捡,這里開啟其它監(jiān)控節(jié)點(diǎn)
  boot:
    admin:
      routes:
        endpoints: env,metrics,dump,jolokia,info,configprops,trace,logfile,refresh,flyway,liquibase,heapdump,loggers,auditevents,hystrix.stream,activiti
      turbine:
        clusters: default
        location: turbine-server
logging:
  file: "/logs/boot-admin-sample.log"  # 日志輸出路徑
management:
  security:
    enabled: false  # 在spring boot 1.5之后Actuator的所有API接口開啟了安全認(rèn)證,為了講解方便话侧,暫時(shí)先關(guān)閉栗精。
  • 配置日志管理Logback,在Resources目錄下建一個logbook-spring.xml文件瞻鹏,代碼如下
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml"/>
    <jmxConfigurator/>
</configuration>
  • 在程序啟動類加上@EnableAdminServer注解開啟Admin Server的功能悲立,加上@EnableEurekaClient注解開啟Eureka Client的功能。
@SpringBootApplication
@EnableEurekaClient
@EnableAdminServer
public class AdminServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(AdminServerApplication.class, args);
    }
}

根據(jù)以上步驟一個Spring Boot Admin Server的雛形就搭建完成了新博。

搭建Admin Client

這里在之前的Mudule工程eureka-client基礎(chǔ)上做改造薪夕。

  • 添加Actuator的起步依賴,以及Jolokia的依賴赫悄。
       <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <dependency>
            <groupId>org.jolokia</groupId>
            <artifactId>jolokia-core</artifactId>
        </dependency>
  • 在配置文件中添加日志的輸出路徑配置和關(guān)閉Actuator模塊的安全驗(yàn)證原献。
logging:
  file: "logs/eureka-client.log"
management:
  security:
    enabled: false

依此啟動eureka-server,admin-server埂淮,eureka-client姑隅。在本地localhost上訪問admin-server的端口,顯示的admin-server的界面如下倔撞。


image.png
  • APPLICATIONS選項(xiàng)展示了向eureka-server注冊的所有客戶端實(shí)例讲仰。
  • JOURNAL選項(xiàng)為服務(wù)注冊、下載痪蝇、剔除的時(shí)間線鄙陡。
  • ABOUT選項(xiàng)是關(guān)于Spring Boot Admin的介紹。
  • APPLICATIONS面板的客戶端實(shí)例右側(cè)有個Detail按鈕躏啰,點(diǎn)擊可以進(jìn)入客戶端實(shí)例的詳細(xì)界面趁矾。在詳細(xì)界面可以查看客戶端的實(shí)例信息、日志信息给僵、指標(biāo)信息毫捣、環(huán)境信息、日志級別的管理和JMX等。

集成Turbine

在介紹熔斷器Hystrix
章節(jié)中提到培漏,Turbine用于聚合多個Hystrix Dashboard溪厘,將多個Hystrix Dashboard組件的數(shù)據(jù)放在一個頁面上展示,進(jìn)行集中監(jiān)控牌柄。在介紹了微服務(wù)監(jiān)控Spring Boot Admin后畸悬,有人會問是不是可以把Hystrix的監(jiān)控和服務(wù)的監(jiān)控放在一起呢?答案是可以的珊佣。Spring Boot Admin Server中可以集成Turbine組件蹋宦,這樣可以讓Turbine中展示的內(nèi)容整合到Spring Boot Admin Server中,和服務(wù)實(shí)例一起監(jiān)控咒锻,方便統(tǒng)一查看和管理冷冗。

改造服務(wù)實(shí)例(Eureka Client)

在介紹熔斷器Hystrix時(shí)我們在eureka-ribbon-client和eureka-feign-client中已經(jīng)集成了Hystrix和Hystrix DashBoard的依賴和相關(guān)操作,這里就用這兩個服務(wù)實(shí)例來做改造惑艇。

  • 在兩個服務(wù)實(shí)例中添加Actuator的起步依賴蒿辙。
       <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

這里服務(wù)實(shí)例的改造就完成了,重點(diǎn)是Hystrix滨巴、Hystrix DashBoard思灌、Actuator的依賴。

構(gòu)建Turbine工程

在項(xiàng)目中新建一個Module工程恭取,取名為turbine-server泰偿。這個工程要提供Turbine的功能,聚合eureka-ribbon-client和eureka-feign-client的Hystrix DashBoard組件蜈垮。

  • 在pom文件中加eureka耗跛、actuator、turbine和jolokia的起步依賴攒发。
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-turbine</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-netflix-turbine</artifactId>
        </dependency>

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

        <dependency>
            <groupId>org.jolokia</groupId>
            <artifactId>jolokia-core</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
  • 在配置文件中配置turbine和eureka的相關(guān)配置调塌。
server:
  port: 8770
spring:
  application:
    name: turbine-server
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/    # eureka注冊中心地址
turbine:
  app-config: eureka-ribbon-client,eureka-feign-client   # 聚合改造的兩個服務(wù)實(shí)例的Hystrix DashBoard組件
  cluster-name-expression: new String("default")
  aggregator:
    clusterConfig: default
  • 啟動類中添加@EnableTurbine注解開啟Turbine功能,@EnableEurekaClient開啟eureka的功能晨继。
@SpringBootApplication
@EnableEurekaClient
@EnableTurbine
public class TurbineServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(TurbineServerApplication.class, args);
    }
}

在Admin Server中集成Turbine

在上一步已經(jīng)已經(jīng)實(shí)現(xiàn)了turbine-server來聚合Hystrix DashBoard的操作烟阐。這一步在admin-service中集成Turbine,并做與turbine-server的關(guān)聯(lián)配置紊扬。

  • 在admin-server添加Turbine和Hystrix的相關(guān)依賴如下。
        <dependency>
            <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-server-ui-turbine</artifactId>
            <version>1.5.1</version>
        </dependency>

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

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-hystrix</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-turbine</artifactId>
        </dependency>
  • 在配置文件中配置turbine唉擂。
spring:
  application:
    name: admin-server
  boot:
    admin:
      routes:
        endpoints: env,metrics,dump,jolokia,info,configprops,trace,logfile,refresh,flyway,liquibase,heapdump,loggers,auditevents,hystrix.stream,activiti
      turbine:
        clusters: default
        location: turbine-server  # 配置turbine的服務(wù)名
  • 在程序啟動類加上@EnableTurbine注解開啟Turbine功能,@EnableHystrix
    開啟Hystrix功能餐屎,@EnableHystrixDashboard開啟Hystrix Dashboard的功能。
@SpringBootApplication
@EnableEurekaClient
@EnableAdminServer
@EnableHystrix
@EnableHystrixDashboard
@EnableTurbine
public class AdminServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(AdminServerApplication.class, args);
    }
}

測試

依此啟動eureka-server玩祟、eureka-ribbon-client腹缩、eureka-feign-client、turbine-server、admin-server工程藏鹊。訪問本地admin-server的啟動端口润讥,在右上角會多一個“TURBINE”的選項(xiàng)按鈕。
訪問eureka-feign-client盘寡,eureka-ribbon-client中的接口楚殿。點(diǎn)擊TURBINE按鈕。出現(xiàn)以下Hystrix的監(jiān)控表明成功集成了turbine竿痰。


image.png

Spring Boot Admin添加安全登錄界面

Spring Boot Admin Server的主頁界面包含了太多的服務(wù)信息脆粥,如果我們不希望通過網(wǎng)址直接訪問Spring Boot Admin Server的主頁界面,此時(shí)可以添加安全登錄功能影涉。Spring Boot Admin提供了安全登錄界面的組件变隔,并且和Spring Boot Security相結(jié)合。

  • 在admin-server中添加登錄界面組件的依賴和Spring Boot Security的起步依賴蟹倾。
        <dependency>
            <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-server-ui-login</artifactId>
            <version>1.5.0</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
  • 在配置文件中創(chuàng)建一個security的user用戶匣缘,它的用戶名為admin,密碼為123456鲜棠。通過eureka.instance.metadate-map配置帶上改security的user用戶信息肌厨,這是因?yàn)樵诩恿薙pring Boot Security的起步依賴后,該項(xiàng)目的所有資源(包括靜態(tài)的HTML岔留、CSS夏哭、API接口等)都是受保護(hù)的,需要加上該管理員信息進(jìn)行安全驗(yàn)證才能訪問献联。
server:
  port: 5000
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
  instance:
    metadata-map:
      user.name: admin
      user.password: 123456
spring:
  application:
    name: admin-server
  boot:
    admin:
      routes:
        endpoints: env,metrics,dump,jolokia,info,configprops,trace,logfile,refresh,flyway,liquibase,heapdump,loggers,auditevents,hystrix.stream,activiti
      turbine:
        clusters: default
        location: turbine-server
logging:
  file: "/logs/boot-admin-sample.log"
management:
  security:
    enabled: false
security:
  user:
    name: admin
    password: 123456
  • 寫SecurityConfig的配置類竖配,來配置登錄信息。
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.formLogin().loginPage("/login.html")
                .loginProcessingUrl("/login").permitAll()
                .and()
                .logout().logoutUrl("/logout")
                .and()
                .csrf().disable()
                .authorizeRequests()
                .antMatchers("login.html","/**/**.css","/img/**","/third-party/**")
                .permitAll()
                .and()
                .authorizeRequests().antMatchers("/**").authenticated()
                .and()
                .httpBasic();
    }
}

由上所示配置了登錄界面為“/login.html”,登出界面為“/logout”里逆。這些界面以及靜態(tài)資源都在引入的JAR中进胯。給這些資源加上permitAll()方法表示不需要權(quán)限認(rèn)證。除此之外的資源加上.authenticated()方法原押,表示需要權(quán)限認(rèn)證胁镐。最后需要開啟Http的基本認(rèn)證,即.httpBasic()方法诸衔。

  • 測試
    重啟admin-server工程盯漂。此時(shí)訪問主界面會提示輸入用戶名和密碼,輸出正確后才能查看服務(wù)的監(jiān)控信息笨农。


    image.png

總結(jié)

在這一章學(xué)習(xí)了微服務(wù)監(jiān)控的組件 Spring Boot Admin就缆。如何搭建一個Admin Server以及集成Turbine和設(shè)置安全登錄認(rèn)證。此時(shí)微服務(wù)相關(guān)的組件已經(jīng)全部介紹完畢谒亦。在之后的學(xué)習(xí)中竭宰,一起學(xué)習(xí)這些組件在微服務(wù)實(shí)際開發(fā)中的應(yīng)用和遇到的問題空郊。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市切揭,隨后出現(xiàn)的幾起案子狞甚,更是在濱河造成了極大的恐慌,老刑警劉巖廓旬,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哼审,死亡現(xiàn)場離奇詭異,居然都是意外死亡嗤谚,警方通過查閱死者的電腦和手機(jī)棺蛛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來巩步,“玉大人旁赊,你說我怎么就攤上這事∫我埃” “怎么了终畅?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長竟闪。 經(jīng)常有香客問我离福,道長,這世上最難降的妖魔是什么炼蛤? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任妖爷,我火速辦了婚禮,結(jié)果婚禮上理朋,老公的妹妹穿的比我還像新娘絮识。我一直安慰自己,他們只是感情好嗽上,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布次舌。 她就那樣靜靜地躺著,像睡著了一般兽愤。 火紅的嫁衣襯著肌膚如雪彼念。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天浅萧,我揣著相機(jī)與錄音逐沙,去河邊找鬼。 笑死洼畅,一個胖子當(dāng)著我的面吹牛酱吝,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播土思,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼务热,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了己儒?” 一聲冷哼從身側(cè)響起崎岂,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎闪湾,沒想到半個月后冲甘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡途样,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年江醇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片何暇。...
    茶點(diǎn)故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡陶夜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出裆站,到底是詐尸還是另有隱情条辟,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布宏胯,位于F島的核電站羽嫡,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏肩袍。R本人自食惡果不足惜杭棵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望氛赐。 院中可真熱鬧魂爪,春花似錦、人聲如沸鹰祸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蛙婴。三九已至粗井,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間街图,已是汗流浹背浇衬。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留餐济,地道東北人耘擂。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像絮姆,于是被迫代替她去往敵國和親醉冤。 傳聞我的和親對象是個殘疾皇子秩霍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評論 2 345