将 Spring Boot 指标暴露给 influxDB 以实现 grafana 可视化
Posted
技术标签:
【中文标题】将 Spring Boot 指标暴露给 influxDB 以实现 grafana 可视化【英文标题】:Exposing Spring Boot metrics to influxDB for grafana visualization 【发布时间】:2015-12-15 20:27:42 【问题描述】:我有一个在 Cloud Foundry 上运行的 Spring Boot 应用程序,它分别通过 /metrics 和 /health 端点公开指标和健康信息。我想将这些指标作为连续流发布到 influxDB 用户提供的服务,以便在 grafana 仪表板上进行可视化。我正在寻找任何可以解释数据流如何工作的资源,并希望得到任何建议。
谢谢。
【问题讨论】:
您是否出于某种原因特别需要将数据导入 InfluxDB(除此之外它很棒)?我之所以问,是因为有资源可以将指标数据导入 Graphite(并因此将其存储在 Whisper db 中)。然后,您可以轻松地将 grafana 指向石墨服务器并可视化数据。绝对可以添加到 InfluxDB,但我猜这需要大量的手动编码(我不知道有任何现成的解决方案) 谢谢 - 是的,我的景观中只有 influxDB(使用 Grafana)绑定 【参考方案1】:据我所知,没有现成的解决方案。 但是,您可以为 InfluxDB 实现自定义 Exporter。
可以在here 找到如何在 Spring Boot 中执行此操作的详细信息。 本质上,您需要实现一个导出器,将 Spring Boot 指标数据转换为 InfluxDB 的line protocol
另一种可能的解决方案是获取Spring Boot metrics into Dropwizard metrics,然后使用this 外部库将Dropwizard 指标报告到InfluxDB(或使用已经是InfluxDB 后端的dropwizard 指标的master 分支)。
最后,如果您想放弃 InfluxDB 而是将数据保存到 Graphite 的存储(Whisper 数据库)中,您应该查看this 或this。一旦数据在 Graphite 中,Grafana 可以轻松地将其可视化,如图所示here
【讨论】:
非常感谢@geoand。我已经尝试了您的第二个建议,并被 github.com/davidB/metrics-influxdb 外部库卡住了,因为它支持 influxDB 0.8x 而不是 0.9x。在我等待此库的修复时,您能否分享您提到的用于将数据报告到 Graphite API 的资源(您最初的建议)? 不客气!检查我更新答案以获得额外的建议 再次感谢。但是,只有来自 Spring Boot 应用程序的 /metrics 端点的 counter.* 和 gauge.* 指标显示在 grafana 中(通过石墨)。有没有办法将包括 jvm 参数、cpu util 等在内的整套指标作为计划作业公开?我遇到了一些链接,但每个人似乎都有自己的方式(并使用其他库)来做到这一点。推荐的前进方式是什么? @citizenBane 很高兴它在这里工作(至少部分)。我不能说我已经为您的问题准备了一个现成的解决方案。看来您必须将找到的解决方案与现有实现集成 @NikolayChernov 感谢您的报告!固定【参考方案2】:也许可以编写一个telegraf 插件来将指标发送到 InfluxDB。否则,influxdb-java 库可能会简化直接从 Spring Boot 发出指标的过程。
【讨论】:
【参考方案3】:influxdb 有两种可能的实现方式:-
a) 对于 influxdb 版本
b) 对于 influxdb 版本 > 0.8.8,您可以使用 influxdb-java jar 将您的应用时间序列数据放在正在运行的 influxdb 服务器上。
现在关于如何使用 grafana 安装和管理 influxdb,您可以点击以下有用链接:- http://www.philipotoole.com/influxdb-and-grafana-howto/ http://blog.sflow.com/2014/12/influxdb-and-grafana.html https://devops.profitbricks.com/tutorials/creating-a-grafana-and-influxdb-docker-container/ https://influxdb.com/docs/v0.6/ui/grafana.html
【讨论】:
【参考方案4】:Telegraf 满足您的要求。它从 jolokia 中提取数据并保存到 InfluxDB。
你需要做的就是为 SpringbootApplication 启用 actuator 和 jolokia,很容易为你的 maven 添加依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.jolokia</groupId>
<artifactId>jolokia-core</artifactId>
</dependency>
在此之后,您需要配置 telegraf 以连接您的 Web 服务器和 influxDB,这是一个示例配置:
[tags]
dc = "local-1"
[agent]
interval = "10s"
[[inputs.jolokia]]
context = "/jolokia"
[[inputs.jolokia.servers]]
name = "catalog"
host = "web server ip address"
port = "web server port"
[[inputs.jolokia.metrics]]
name = "metrics"
mbean = "org.springframework.boot:name=metricsEndpoint,type=Endpoint"
attribute = "Data"
[outputs]
[outputs.influxdb]
url = "http://influxdb:port"
database = "telegraf"
precision = "s"
确保上层配置的网络可用,然后你会在你的influxDB中获取数据。
配置grafana显示存储在influxDB中的数据:
-
添加一个 influxDB 类型的数据源
创建一个新的仪表板和图表面板。
配置图表面板并选择要在指标设置中显示的文件。
您将在面板上看到数据。
【讨论】:
【参考方案5】:InfluxDB(与 Prometheus 不同)是一个基于推送的系统。它不能轮询 HTTP 端点来收集指标。您的应用程序需要连续/定期将数据推送到 InfuxDB 实例中。
为了将应用程序推送到 InfluxB,其他人建议使用诸如 influxdb-java、metrics-influxdb 等库。
还有一种(更好的 IMO)解决方案。
您可以查看由 Spring 团队开发的新库,名为 micrometer。
Micrometer 是一个度量收集库,支持大量 TSDB(Influx 就是其中之一)。它是在 Spring 2 中首次引入的,此后一直向后移植到 Spring 1.3+。
Micrometer 开箱即用地发布all of default actuator metrics。 get started with 超级简单。您可以阅读所有功能 here。
【讨论】:
以上是关于将 Spring Boot 指标暴露给 influxDB 以实现 grafana 可视化的主要内容,如果未能解决你的问题,请参考以下文章
在不使用 spring-boot 执行器的情况下将来自 spring 应用程序的指标公开给 prometheus
Spring Boot之执行器端点(Actuator Endpoint)实现剖析