我有一个Java应用程序,需要收集和报告大量的指标/操作测量/统计数据(不同的人的不同单词 - 我只会使用指标)关于各种实体。指标可以是以下之一:
'实体'可以是物理设备(计算机,交换机,调制解调器),但通常是逻辑实体(通信信道4567,用户123456,服务A的接口)。另外,这些逻辑实体中的一些是静态的,因为它们是提前知道的并且在应用程序的生命期内不会改变,而其他逻辑实体可能是瞬态的(通信通道4567可能仅存在一段时间,然后被删除)
我正在寻找帮助解决2个问题的图书馆:
请注意/需求:
过去,我的公司已经尝试过几种“本土化”的解决方案来满足这种需求。基本上,数据以某种不一致的方式被推入数据库,客户端将数据拉出,并能够使用本地或第三方图表包在固定的时间段内绘制单个值。坦率地说,我们所有的解决方案都很糟糕。我希望第三方解决方案可以解决的一些问题是:
很抱歉这么长的说明。谢谢你的帮助。
答案 0 :(得分:14)
我可以推荐Yammer的这个Java库:https://github.com/dropwizard/metrics 它提供了一个很好的API,可以有计数器,计时,直方图等。 它可以通过检测servlet和从JVM(内存等)中自动收集来自servlet的有趣数据。
然后我们将数据存储在Graphite中:http://graphite.wikidot.com/
Graphite将数据存储在类似于RRD的固定大小的数据库中,并且可以生成图表和仪表板。
答案 1 :(得分:6)
听起来像 RRD4J (Apache许可证)正是您所需要的。
它是完善的 RRDtool 的Java实现。它用于在循环数据库( RRD )中随时间收集数据。旧数据通常存档在 RRA 存档中,其中时间尺度不太精细,从而导致更节省空间。
虽然我没有RRD4J的直接经验,但我们已成功使用RRDTool和Cacti多年,用于数据中心的健康监测。由于RRD是监控的行业标准,我肯定会建议你看一下RRD4J。
答案 2 :(得分:3)
自从问了这个问题以来我已经有一段时间了,但我认为保持最新答案不是一个坏主意。
Spring Boot 2现在使用https://micrometer.io-这应该是当今在Java应用程序中收集指标的良好起点。它不负责存储或呈现它们,但可以为框架提供集成。
答案 3 :(得分:1)
另一种选择虽然相当复杂,但却是OpenTSD:http://opentsdb.net/overview.html。
答案 4 :(得分:1)
你可以试试Stagemonitor https://github.com/stagemonitor/stagemonitor
它可以与elasticsearch / graphite / Influxdb配对,用于时间序列数据存储。
您可以使用Grafana可视化指标,它可以连接到许多不同的数据库,如elasticsearch,Influxdb,prometheus,mysql。