原文地址 http://blog.didispace.com/spring-boot-jolokia-grafana-monitor/
Spring’s JMX support: https://docs.spring.io/spring/docs/current/spring-framework-reference/integration.html#jmx
由于最近在做监控方面的工作,因此也读了不少相关的经验分享。其中有这样一篇文章总结了一些基于 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
端点并不是根据时间轴来进行监控的,同时在不同节点上的相同应用模块(水平扩展)也没有得到聚合。这意味着您将面对这两种情况:没有时间序列的监控数据、只有对孤立节点的监控数据快照。
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
和visualvm
可能是另外一种选择,它们通过 RMI 直接连接到 JMX 节点。Actuator 存储来自 JMX 的 MBean 内的 Metrics 数据。另外,通过使用 Jolokia,MBeans 以 RESTful HTTP 端点的方式暴露,/jolokia
。所以,相同的信息可以通过两个端点来获取:JMX MBean Metrics 和 Rest HTTP Jolokia 端点。然而,这种方式存在同样的问题,它们直接连接到集群环境中的单个节点,另外还伴随着痛苦的老式 RMI 协议。
JConsole old-school JMX Metrics of a given application node
VisualVM JMX Metrics of a give application node
继续前进,我尝试了一些可能可以解决这些问题的现代化运维工具:
- 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 实现,零编码,只需要通过一些正确的配置。
- Jolokia: Spring Boot 认可使用 Jolokia 来通过 HTTP 导出 export JMX 数据。你只需要在工程类路径中增加一些依赖项,一切都是开箱即用的。不需要任何额外的实现。
- Telegraf: Telegraf 支持通过整合 Jolokia 来集成 JMX 数据的收集。它有一个预制的输入插件,它是开箱即用的。不需要任何额外的实现。只需要做一些配置即可。
- InfluxDB: InfluxDB 通过 输出插件从 Telegraf 接收指标数据,它是开箱即用的,不需要任何额外的实现。
- Grafana: Grafana 通过连接 InfluxDB 作为数据源来渲染图标。它是开箱即用的,不需要额外的实现。
简而言之,配置所有这些东西都非常的简单。
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