由于最近在做監(jiān)控方面的工作,因此也讀了不少相關(guān)的經(jīng)驗分享逸绎。其中有這樣一篇文章總結(jié)了一些基于Spring Boot的監(jiān)控方案惹恃,因此翻譯了一下,希望可以對大家有所幫助棺牧。
原文:Near real-time monitoring charts with Spring Boot Actuator, Jolokia and Grafana
Spring Boot Actuator通過/metrics
端點巫糙,以開箱即用的方式為應(yīng)用程序的性能指標(biāo)與響應(yīng)統(tǒng)計提供了一個非常友好的監(jiān)控方式。
由于在集群化的彈性環(huán)境中颊乘,應(yīng)用程序的節(jié)點可以增長参淹、擴(kuò)展,并由非常大量的應(yīng)用實例所組成乏悄。對于孤立節(jié)點的監(jiān)控可能即費力又沒有什么實際效果浙值。所以,使用基于時間序列的數(shù)據(jù)聚合工具將獲得更好的效果檩小。
本文的目標(biāo)在于找出一種僅需要通過工具和配置的方式就能實現(xiàn)的解決方案开呐,來對Spring Boot Metrics實現(xiàn)基于時間序列的監(jiān)控。
像NewRelic, AppDynamics或DataDog這些APM系統(tǒng)都能很好地完成這樣的任務(wù)规求,它們通過使用JVM和字節(jié)碼工具來生成自己的指標(biāo)筐付、分析工具和相關(guān)事務(wù)。也可以通過使用@Timed
注釋方法來實現(xiàn)阻肿。但是瓦戚,這些方法將忽略所有Spring Boot Actuator庫所提供的可用資源。另外丛塌,使用這些方法還有一個與保留數(shù)據(jù)相關(guān)的問題较解,它們對于短時間窗口內(nèi)的監(jiān)控是相對模糊的。
spring-boot-admin
可以作為另外一個備選方案赴邻,因為它可以連接到Spring Boot的實例印衔、并且可以聚合節(jié)點等。但是乍楚, /metrics
端點并不是根據(jù)時間軸來進(jìn)行監(jiān)控的当编,同時在不同節(jié)點上的相同應(yīng)用模塊(水平擴(kuò)展)也沒有得到聚合。這意味著您將面對這兩種情況:沒有時間序列的監(jiān)控數(shù)據(jù)徒溪、只有對孤立節(jié)點的監(jiān)控數(shù)據(jù)快照忿偷。
jconsole
和visualvm
可能是另外一種選擇,它們通過RMI直接連接到JMX節(jié)點臊泌。Actuator存儲來自JMX的MBean內(nèi)的Metrics數(shù)據(jù)鲤桥。另外,通過使用 Jolokia渠概,MBeans以RESTful HTTP端點的方式暴露绿淋,/jolokia
。所以挣菲,相同的信息可以通過兩個端點來獲取:JMX MBean Metrics和Rest HTTP Jolokia端點筒狠。然而,這種方式存在同樣的問題箱沦,它們直接連接到集群環(huán)境中的單個節(jié)點辩恼,另外還伴隨著痛苦的老式RMI協(xié)議。
繼續(xù)前進(jìn)谓形,我嘗試了一些可能可以解決這些問題的現(xiàn)代化運維工具:
- Prometheus: 由SoundCloud編寫灶伊,它存儲一系列的監(jiān)控數(shù)據(jù)并賦予漂亮的圖標(biāo)展現(xiàn)。Prometheus Gauges和Actuator Metrics并不完全兼容寒跳,所以人們寫了 一個數(shù)據(jù)轉(zhuǎn)換器聘萨。你也可以配置Prometheus來收集JMX數(shù)據(jù)。
- Sensu: 作為Nagios和Zabbix的現(xiàn)代化替代品童太,它有一個插件可以直接連接到Spring Boot米辐,但是這個倉庫最近已經(jīng)不太更新了,所以我決定放棄它康愤。
- StatsD: Spring Boot有一篇文章是關(guān)于自定義導(dǎo)出數(shù)據(jù)給StatsD儡循。然而,你除了要為Spring Boot應(yīng)用安裝StatsD實例之外征冷,還不得不實現(xiàn)一些存根來讓它工作起來。
- Graphite: You got to be a hero to install and get Graphite running. If you get there, you can configure it along StatsD to get metrics working in a chart.
- OpenTSDB: Spring Boot有一篇文章關(guān)于連接數(shù)據(jù)到OpenTSBD. 然而誓琼,這種方式與StatsD類似检激,你必須實現(xiàn)和維護(hù)自定義的代碼來讓它工作起來。另外腹侣,OpenTSDB沒有開箱即用的圖形可視化工具叔收。
- JMXTrans: 可以用來提取數(shù)據(jù)并發(fā)送到其他的監(jiān)控工具,它也需要具體的實現(xiàn)傲隶。
- Ganglia: 也是基于JVM上的工具饺律,記錄所有Actuator資源。與之前所說的APM有相同問題跺株。
經(jīng)過一番研究复濒,我發(fā)現(xiàn)了一個更好的解決方案:通過InfluxDB 和Telegraf實現(xiàn),零編碼乒省,只需要通過一些正確的配置巧颈。
- Jolokia: Spring Boot 認(rèn)可使用Jolokia來通過HTTP導(dǎo)出export JMX數(shù)據(jù)。你只需要在工程類路徑中增加一些依賴項袖扛,一切都是開箱即用的砸泛。不需要任何額外的實現(xiàn)十籍。
- Telegraf: Telegraf支持通過整合Jolokia來集成JMX數(shù)據(jù)的收集。它有一個預(yù)制的輸入插件唇礁,它是開箱即用的勾栗。不需要任何額外的實現(xiàn)。只需要做一些配置即可盏筐。
- InfluxDB: InfluxDB通過 輸出插件從Telegraf接收指標(biāo)數(shù)據(jù)械姻,它是開箱即用的,不需要任何額外的實現(xiàn)机断。
- Grafana: Grafana通過連接InfluxDB作為數(shù)據(jù)源來渲染圖標(biāo)楷拳。它是開箱即用的,不需要額外的實現(xiàn)吏奸。
簡而言之欢揖,配置所有這些東西都非常的簡單。