用于收集/存储/显示应用程序度量/统计数据的java库是什么?

用于收集/存储/显示应用程序度量/统计数据的java库是什么?,java,Java,我有一个Java应用程序,它需要收集和报告关于各种实体的大量度量/操作度量/统计数据(不同的人使用不同的词-我只使用度量)。指标可以是以下指标之一: 在特定时间点测量的一些数值(当前登录到系统的用户数%,某些资源的利用率) 给定时间间隔内的一些测量数值(过去5分钟内传输的消息数) 特定时间点的某些枚举值(某些实体的运行状况为联机/警告/失败/脱机) “实体”可以是物理设备(计算机、交换机、调制解调器),但通常是逻辑实体(通信信道4567、用户123456、服务a接口)。此外,这些逻辑实体中的一些

我有一个Java应用程序,它需要收集和报告关于各种实体的大量度量/操作度量/统计数据(不同的人使用不同的词-我只使用度量)。指标可以是以下指标之一:

  • 在特定时间点测量的一些数值(当前登录到系统的用户数%,某些资源的利用率)
  • 给定时间间隔内的一些测量数值(过去5分钟内传输的消息数)
  • 特定时间点的某些枚举值(某些实体的运行状况为联机/警告/失败/脱机)
  • “实体”可以是物理设备(计算机、交换机、调制解调器),但通常是逻辑实体(通信信道4567、用户123456、服务a接口)。此外,这些逻辑实体中的一些是静态的,因为它们在应用程序生命周期内是预先知道的,并且不会改变,而其他的可能是暂时的(通信信道4567可能只存在一段时间,然后被删除)

    我正在寻找有助于解决两个问题的库:

  • 使在服务器上收集和存储这些信息变得更容易
  • 以有用的方式向用户呈现数据
  • 注/要求:

  • 产生数据的服务器应用程序基本上是作为守护进程运行的Java进程(即不是webapp)
  • 将有两种不同类型的客户端。
  • 一个是JavaSwing桌面应用程序,其中大部分的“大量”使用都将被忽略。丰富的实时图表和历史查询能力在这里很重要
  • 另一个是web UI。我的需求在这里还不是100%清楚,但是这个客户机的需求将比swing客户机轻得多。这里需要开放标准(AJAX/HTML而不是Flash)
  • 可嵌入专有软件中部署(即,无GPL许可证)。商业或免费
  • 在过去,我的公司尝试了两种“本土”解决方案来满足这一需求。基本上,数据以某种不一致的方式被推入数据库,客户机将数据取出,并能够使用自制或第三方图表包在固定的时间段内绘制单个值。坦率地说,我们所有的解决方案都糟透了。我希望第三方解决方案能够解决的一些问题是:

  • 封装用于更新/记录度量的代码,以便它不会污染实际测量值的类
  • 帮助管理指标的命名/标识。很容易就有上千个;我自己想出某种命名方案来确保唯一性是一个好主意
  • 妥善处理历史数据。能够配置数据的保存时间,以及存档或清除旧记录
  • 在客户端,内置的图表和查询功能,能够在呈现给用户之前转换数据库中的一些原始数据
  • 对不起,描述得太长了。谢谢你的帮助

    听起来(Apache许可证)正是您想要的
    它是公认的的Java实现。它是为了在循环数据库(RRD)中随时间收集数据而构建的。旧数据通常归档在RRA归档中,在RRA归档中,时间尺度不太细粒度,从而实现更节省空间的存储


    虽然我没有直接使用RRD4J的经验,但多年来,我们已经成功地将RRDTool和Cacti用于数据中心的健康监测。由于RRD是监控方面的行业标准,我绝对建议您看看RRD4J。

    另一个选项,尽管非常复杂,但它是OpenTSD:。

    我可以推荐Yammer提供的这个Java库: 它提供了一个很好的API,包含计数器、计时、直方图等。 它可以通过检测servlet和JVM(内存等)自动从servlet收集有趣的数据

    我们将数据存储在Graphite中:

    Graphite将数据存储在与RRD类似的固定大小的数据库中,并可以生成图表和仪表板。

    您可以尝试Stagemonitor

    它可以与elasticsearch/graphite/XDB配对用于timeseries数据存储


    您可以使用Grafana可视化度量,它可以连接到许多不同的数据库,如elasticsearch、influxdb、prometheus、mysql。

    我知道这个问题已经问了很久了,但我认为保持答案最新不是一个坏主意


    SpringBoot2现在使用-这应该是在Java应用程序中收集指标的一个很好的起点。它不负责存储或显示它们,但为框架提供了集成功能。

    我以前从未听说过RRD。这确实符合我想要做的事情;我现在正在看!我花了一些时间研究RRD4J。RRD和RRA正是我需要的那种存储机制。然而,RRD的性质不适合轻松处理动态指标。我必须在上面建一些东西。这个图表很方便,但是不适合我在客户端上进行实时更新,而不需要在每个更新间隔向客户端发送一个新的.png文件。我可以用JFreeChart或类似的软件做一些事情,但我还是希望能找到一些东西来为我做这些工作。我也一直在寻找一些东西。类似于AWS的CloudWatch。再一次,另一个我从未听说过的包。看起来确实有点复杂,但我肯定会仔细看看。标记功能可能非常有用。是另一个基于Java的开源时间序列数据库,它提供Java API来存储度量。这看起来非常有趣,感谢您的响应。尽管我在一年前问过这个问题,但碰巧我现在正在做一个不同的项目