Spring Cloud筆記(6)使用Spring Boot Admin監(jiān)控服務(wù)

微服務(wù)的核心思想就是拆分業(yè)務(wù),將單個系統(tǒng)按業(yè)務(wù)邊界切分為多個可獨(dú)立部署的微服務(wù)子系統(tǒng)经柴。這樣可以讓系統(tǒng)更容易擴(kuò)展猴娩,更快速的迭代,但必然會導(dǎo)致系統(tǒng)內(nèi)服務(wù)實(shí)例數(shù)量的大量增加饿肺,再加上服務(wù)實(shí)例可能部署到不同的操作系統(tǒng)和網(wǎng)段蒋困,對整個系統(tǒng)進(jìn)行管理和監(jiān)控的難度比單系統(tǒng)環(huán)境要高出不少。幸運(yùn)的是敬辣,針對Spring Boot技術(shù)體系我們有一個開箱即用的系統(tǒng)監(jiān)控解決方案——Spring Boot Admin雪标,對于中小規(guī)模的微服務(wù)系統(tǒng),它幾乎可以提供一切必要的監(jiān)控需求溉跃,而且更重要的是它對于業(yè)務(wù)系統(tǒng)是非侵入性的村刨,只需要幾行配置就可以將一個基于Spring Boot技術(shù)開發(fā)的應(yīng)用納入到監(jiān)控之中。

Spring Boot Admin分為兩部分:client和server撰茎。client為被監(jiān)控端嵌牺,通過集成Spring Boot Actuator組件暴露出各種監(jiān)控指標(biāo)和信息,并注冊到一個server端乾吻;server端接受client的注冊髓梅,并定時查詢client端提供的監(jiān)控信息,管理員可以通過server端內(nèi)置的一個web應(yīng)用查看client的各項(xiàng)指標(biāo)和信息绎签。

現(xiàn)在我們就來利用Spring Boot Admin來為Spring Cloud Demo項(xiàng)目加入服務(wù)指標(biāo)監(jiān)控的功能枯饿。首先來創(chuàng)建一個monitor模塊,作為Spring Boot Admin的server端诡必,在pom.xml中加入如下配置:

    <!--spring-boot-admin-starter-server必須和spring-boot的版本匹配奢方,2.1.X的版本無法在spring boot 2.2.0以上的版本運(yùn)行-->
     <dependency>
        <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-starter-server</artifactId>
            <version>2.2.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
      </dependency>

項(xiàng)目啟動類中需要加入一個@EnableAdminServer的注解:

@SpringBootApplication
@EnableAdminServer
public class MonitorApplication {
    public static void main(String[] args) {
        SpringApplication.run(MonitorApplication.class, args);
    }
}

application.yml配置文件只需要加入consul的相關(guān)配置即可搔扁,用于尋找其它被監(jiān)控的client。Spring Boot Admin的客戶端有兩種注冊方式蟋字,第一種是在被監(jiān)控的服務(wù)客戶端直接引入spring-boot-admin-starter-client稿蹲,并配置server端的監(jiān)控地址,主動向server端進(jìn)行注冊鹊奖,這種一般用于監(jiān)控獨(dú)立的應(yīng)用苛聘;第二種就是和Spring Cloud體系相匹配的,通過服務(wù)注冊中心直接尋找需要被監(jiān)控的客戶端信息忠聚,在我們的demo里面就是consul设哗,在consul中注冊了的服務(wù)會直接成為Spring Boot Admin的client。

這樣的話两蟀,我們demo里面的服務(wù)提供方只需要做很小的改造即可接入Spring Boot Admin的監(jiān)控體系网梢。主要就是加入Spring Boot Actuator支持,通過該框架來暴露出各種監(jiān)控指標(biāo)的赂毯,這樣server端才能夠?qū)ΡO(jiān)控指標(biāo)進(jìn)行匯總和圖形化展示战虏。demo的parent項(xiàng)目之前已經(jīng)添加了Spring Boot Actuator的依賴,但是默認(rèn)只會暴露出一個/actuator/heath的接口党涕,這對我們的監(jiān)控來說是遠(yuǎn)遠(yuǎn)不夠的烦感,所以還需要在每個服務(wù)提供方暴露出更多的監(jiān)控指標(biāo)。具體來說遣鼓,就是在配置文件中加入以下Actuator的配置:

#輸出監(jiān)控指標(biāo)用于服務(wù)監(jiān)控啸盏,暴露的監(jiān)控指標(biāo)可根據(jù)實(shí)際情況調(diào)整
management:
  endpoints:
    web:
      exposure:
        include: "*"
  endpoint:
    health:
      show-details: ALWAYS
#如果要在Spring boot admin中查看日志重贺,需要指定存儲的文件
logging:
  file: ./logs/order-service.log

現(xiàn)在將服務(wù)全部啟動骑祟,訪問monitor的地址http://localhost:9010,就可以看到Spring boot admin的監(jiān)控頁面了:

監(jiān)控首頁.png

需要注意的是气笙,Spring Boot Admin完全依賴Actuator暴露的接口進(jìn)行監(jiān)控次企,如果沒有實(shí)現(xiàn)這些接口,默認(rèn)就會顯示離線(比如consul實(shí)例實(shí)際上是在線的)潜圃。進(jìn)入到具體的某個服務(wù)缸棵,可以看到更多的監(jiān)控指標(biāo),還能夠在線查看日志和修改logger的日志級別:
明細(xì)信息.png

Spring Boot Admin還支持對標(biāo)題和UI進(jìn)行部分的定制谭期,具體的配置項(xiàng)堵第,可參考官方文檔

monitor模塊可以收集到應(yīng)用的一些敏感信息,如果需要暴露到外網(wǎng)進(jìn)行查看隧出,就必須添加相關(guān)的安全措施踏志。我們可以通過spring security框架,快速為server端添加相應(yīng)的用戶登錄驗(yàn)證功能胀瞪。首先在monitor中加入spring security的依賴:

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

然后編寫一個Spring Security的配置類针余,驗(yàn)證規(guī)則可根據(jù)實(shí)際情況進(jìn)行修改:

@Configuration
public class SecuritySecureConfig extends WebSecurityConfigurerAdapter {
    private final String adminContextPath;

    public SecuritySecureConfig(AdminServerProperties adminServerProperties) {
        this.adminContextPath = adminServerProperties.getContextPath();
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
        successHandler.setTargetUrlParameter("redirectTo");
        successHandler.setDefaultTargetUrl(adminContextPath + "/");
        http.authorizeRequests()
                .antMatchers(adminContextPath + "/assets/**").permitAll()
                .antMatchers(adminContextPath + "/login").permitAll()
                .antMatchers(adminContextPath + "/actuator/health").permitAll()
                .anyRequest().authenticated()
                .and()
                 //login登錄頁是spring boot admin ui里面已經(jīng)集成了的
                .formLogin().loginPage(adminContextPath + "/login").successHandler(successHandler).and()
                .logout().logoutUrl(adminContextPath + "/logout").and()
                .httpBasic().and()
                .csrf()
                .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
                .ignoringAntMatchers(
                        adminContextPath + "/instances",
                        adminContextPath + "/actuator/**"
                );
    }
}

重新啟動后,再次訪問monitor模塊,就需要進(jìn)行登錄驗(yàn)證了:


登錄頁面.png

登錄的用戶名和密碼可以在application.yml中配置:

spring:
  #允許登錄監(jiān)控系統(tǒng)的用戶名和密碼
  security:
    user:
      name: admin
      password: 123456

需要注意的是圆雁,如果沒有使用注冊中心忍级,而是通過spring-boot-admin-starter-client的方式直接向server端注冊的client,還需要加入server端的驗(yàn)證信息才能成功注冊伪朽,類似像這樣:

spring
    boot:
      admin:
        client:
          #server端的注冊地址
          url: http://localhost:9010
          username: admin
          password: 123456
          instance:
            #client的訪問地址前綴轴咱,server通過該地址獲取監(jiān)控信息
            service-base-url: http://192.168.1.252:8090

本文的相關(guān)代碼可以查看這里 spring-cloud-demo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市烈涮,隨后出現(xiàn)的幾起案子嗦玖,更是在濱河造成了極大的恐慌,老刑警劉巖跃脊,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宇挫,死亡現(xiàn)場離奇詭異,居然都是意外死亡酪术,警方通過查閱死者的電腦和手機(jī)器瘪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來绘雁,“玉大人橡疼,你說我怎么就攤上這事÷郏” “怎么了欣除?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長挪略。 經(jīng)常有香客問我历帚,道長,這世上最難降的妖魔是什么杠娱? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任挽牢,我火速辦了婚禮,結(jié)果婚禮上摊求,老公的妹妹穿的比我還像新娘禽拔。我一直安慰自己,他們只是感情好室叉,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布睹栖。 她就那樣靜靜地躺著,像睡著了一般茧痕。 火紅的嫁衣襯著肌膚如雪野来。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天凿渊,我揣著相機(jī)與錄音梁只,去河邊找鬼缚柳。 笑死,一個胖子當(dāng)著我的面吹牛搪锣,可吹牛的內(nèi)容都是我干的秋忙。 我是一名探鬼主播,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼构舟,長吁一口氣:“原來是場噩夢啊……” “哼灰追!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起狗超,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤弹澎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后努咐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體苦蒿,經(jīng)...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年渗稍,在試婚紗的時候發(fā)現(xiàn)自己被綠了佩迟。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,745評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡竿屹,死狀恐怖报强,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拱燃,我是刑警寧澤秉溉,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站碗誉,受9級特大地震影響召嘶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜诗充,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一苍蔬、第九天 我趴在偏房一處隱蔽的房頂上張望诱建。 院中可真熱鬧蝴蜓,春花似錦、人聲如沸俺猿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽押袍。三九已至诵冒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間谊惭,已是汗流浹背汽馋。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工侮东, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人豹芯。 一個月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓悄雅,卻偏偏與公主長得像,于是被迫代替她去往敵國和親铁蹈。 傳聞我的和親對象是個殘疾皇子宽闲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評論 2 354

推薦閱讀更多精彩內(nèi)容