使用Spring Boot Actuator、Jolokia和Grafana實現準實時監控

NO IMAGE

由於最近在做監控方面的工作,因此也讀了不少相關的經驗分享。其中有這樣一篇文章總結了一些基於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庫所提供的可用資源。另外,使用這些方法還有一個與保留資料相關的問題,它們對於短時間視窗內的監控是相對模糊的。

1*W_O7bNYmgarjHNasow-PsQ.png

NewRelic在1分鐘時間視窗內被發現和檢測的事務

spring-boot-admin 可以作為另外一個備選方案,因為它可以連線到Spring Boot的例項、並且可以聚合節點等。但是, /metrics 端點並不是根據時間軸來進行監控的,同時在不同節點上的相同應用模組(水平擴充套件)也沒有得到聚合。這意味著您將面對這兩種情況:沒有時間序列的監控資料、只有對孤立節點的監控資料快照。

1*KK_x2uD66NIIIfmyFIraEg.png

Spring Boot Admin with metrics from Actuator: a snapshot of metrics data of a given application node
1*MztwgrZsF2wtXL_OMZCfdQ.png

Spring Boot Admin with JMX and MBeans read data of a give application node

jconsolevisualvm可能是另外一種選擇,它們通過RMI直接連線到JMX節點。Actuator儲存來自JMX的MBean內的Metrics資料。另外,通過使用 Jolokia,MBeans以RESTful HTTP端點的方式暴露,/jolokia。所以,相同的資訊可以通過兩個端點來獲取:JMX MBean Metrics和Rest HTTP Jolokia端點。然而,這種方式存在同樣的問題,它們直接連線到叢集環境中的單個節點,另外還伴隨著痛苦的老式RMI協議。

1*-NOkLUyGMydiFYYotF2rKQ.png

JConsole old-school JMX Metrics of a given application node
1*mH5Wey1GDlCmDRdZPlHYtg.png

VisualVM JMX Metrics of a give application node

繼續前進,我嘗試了一些可能可以解決這些問題的現代化運維工具:

經過一番研究,我發現了一個更好的解決方案:通過InfluxDB 和Telegraf實現,零編碼,只需要通過一些正確的配置。

簡而言之,配置所有這些東西都非常的簡單。

1*r252t1MBNRc3thU3DMRTcQ.png

Spring Boot Actuator Raw Metrics
1*XdrZlKh1Q2G0yd6xNkSrgQ.png

Metrics sent by Telegraf to InfluxDB, collected by Jolokia and JMX over HTTP
1*K8NTfF4Z2ms1YM_4cCjyvQ.png

Grafana InfluxDB data source configuration
1*ZoQcStClNQf7iz_cQNZHxA.png

Grafana Metric chart query and configuration: gauges of an API