由于最近在做監控方面的工作,是以也讀了不少相關的經驗分享。其中有這樣一篇文章總結了一些基于Spring Boot的監控方案,是以翻譯了一下,希望可以對大家有所幫助。
原文: Near real-time monitoring charts with Spring Boot Actuator, Jolokia and Grafana
Spring Boot Actuator通過
/metrics
端點,以開箱即用的方式為應用程式的性能名額與響應統計提供了一個非常友好的監控方式。
由于在叢集化的彈性環境中,應用程式的節點可以增長、擴充,并由非常大量的應用執行個體所組成。對于孤立節點的監控可能即費力又沒有什麼實際效果。是以,使用基于時間序列的資料聚合工具将獲得更好的效果。
本文的目标在于找出一種僅需要通過工具和配置的方式就能實作的解決方案,來對Spring Boot Metrics實作基于時間序列的監控。
像NewRelic, AppDynamics或DataDog這些APM系統都能很好地完成這樣的任務,它們通過使用JVM和位元組碼工具來生成自己的名額、分析工具和相關事務。也可以通過使用
@Timed
注釋方法來實作。但是,這些方法将忽略所有Spring Boot Actuator庫所提供的可用資源。另外,使用這些方法還有一個與保留資料相關的問題,它們對于短時間視窗内的監控是相對模糊的。

spring-boot-admin
可以作為另外一個備選方案,因為它可以連接配接到Spring Boot的執行個體、并且可以聚合節點等。但是,
/metrics
端點并不是根據時間軸來進行監控的,同時在不同節點上的相同應用子產品(水準擴充)也沒有得到聚合。這意味着您将面對這兩種情況:沒有時間序列的監控資料、隻有對孤立節點的監控資料快照。
jconsole
和
visualvm
可能是另外一種選擇,它們通過RMI直接連接配接到JMX節點。Actuator存儲來自JMX的MBean内的Metrics資料。另外,通過使用
Jolokia,MBeans以RESTful HTTP端點的方式暴露,
/jolokia
。是以,相同的資訊可以通過兩個端點來擷取:JMX MBean Metrics和Rest HTTP Jolokia端點。然而,這種方式存在同樣的問題,它們直接連接配接到叢集環境中的單個節點,另外還伴随着痛苦的老式RMI協定。
繼續前進,我嘗試了一些可能可以解決這些問題的現代化運維工具:
- Prometheus : 由SoundCloud編寫,它存儲一系列的監控資料并賦予漂亮的圖示展現。Prometheus Gauges和Actuator Metrics并不完全相容,是以人們寫了 一個資料轉換器 。你也可以配置Prometheus來收集JMX資料。
- Sensu : 作為Nagios和Zabbix的現代化替代品,它有一個插件可以直接連接配接到Spring Boot, 但是這個倉庫最近已經不太更新了 ,是以我決定放棄它。
- StatsD : Spring Boot有一篇文章是 關于自定義導出資料給StatsD 。然而,你除了要為Spring Boot應用安裝StatsD執行個體之外,還不得不實作一些存根來讓它工作起來。
- 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有一篇文章 關于連接配接資料到OpenTSBD . 然而,這種方式與StatsD類似,你必須實作和維護自定義的代碼來讓它工作起來。另外,OpenTSDB沒有開箱即用的圖形可視化工具。
- JMXTrans : 可以用來提取資料并發送到其他的監控工具,它也需要具體的實作。
- Ganglia : 也是基于JVM上的工具,記錄所有Actuator資源。與之前所說的APM有相同問題。
經過一番研究,我發現了一個更好的解決方案:通過InfluxDB 和Telegraf實作,零編碼,隻需要通過一些正确的配置。
- : Spring Boot 認可使用Jolokia來通過HTTP導出export JMX資料 。你隻需要在工程類路徑中增加一些依賴項,一切都是開箱即用的。不需要任何額外的實作。
- Telegraf : Telegraf支援通過整合Jolokia來內建JMX資料的收集。 它有一個預制的輸入插件 ,它是開箱即用的。不需要任何額外的實作。隻需要做一些配置即可。
- InfluxDB : InfluxDB通過 輸出插件 從Telegraf接收名額資料,它是開箱即用的,不需要任何額外的實作。
- Grafana : Grafana通過 連接配接InfluxDB作為資料源 來渲染圖示。它是開箱即用的,不需要額外的實作。
簡而言之,配置所有這些東西都非常的簡單。