由于最近在做監控方面的工作,是以也讀了不少相關的經驗分享。其中有這樣一篇文章總結了一些基于Spring Boot的監控方案,是以翻譯了一下,希望可以對大家有所幫助。
Spring Boot Actuator通過<code>/metrics</code>端點,以開箱即用的方式為應用程式的性能名額與響應統計提供了一個非常友好的監控方式。
由于在叢集化的彈性環境中,應用程式的節點可以增長、擴充,并由非常大量的應用執行個體所組成。對于孤立節點的監控可能即費力又沒有什麼實際效果。是以,使用基于時間序列的資料聚合工具将獲得更好的效果。
本文的目标在于找出一種僅需要通過工具和配置的方式就能實作的解決方案,來對Spring Boot Metrics實作基于時間序列的監控。
像NewRelic, AppDynamics或DataDog這些APM系統都能很好地完成這樣的任務,它們通過使用JVM和位元組碼工具來生成自己的名額、分析工具和相關事務。也可以通過使用<code>@Timed</code>注釋方法來實作。但是,這些方法将忽略所有Spring Boot Actuator庫所提供的可用資源。另外,使用這些方法還有一個與保留資料相關的問題,它們對于短時間視窗内的監控是相對模糊的。
NewRelic在1分鐘時間視窗内被發現和檢測的事務
<code>spring-boot-admin</code> 可以作為另外一個備選方案,因為它可以連接配接到Spring Boot的執行個體、并且可以聚合節點等。但是, <code>/metrics</code> 端點并不是根據時間軸來進行監控的,同時在不同節點上的相同應用子產品(水準擴充)也沒有得到聚合。這意味着您将面對這兩種情況:沒有時間序列的監控資料、隻有對孤立節點的監控資料快照。
Spring Boot Admin with metrics from Actuator: a snapshot of metrics data of a given application node
Spring Boot Admin with JMX and MBeans read data of a give application node
JConsole old-school JMX Metrics of a given application node
VisualVM JMX Metrics of a give application node
繼續前進,我嘗試了一些可能可以解決這些問題的現代化運維工具:
經過一番研究,我發現了一個更好的解決方案:通過InfluxDB 和Telegraf實作,零編碼,隻需要通過一些正确的配置。
簡而言之,配置所有這些東西都非常的簡單。
Spring Boot Actuator Raw Metrics
Metrics sent by Telegraf to InfluxDB, collected by Jolokia and JMX over HTTP
Grafana InfluxDB data source configuration
Grafana Metric chart query and configuration: gauges of an API