词条 | JRobin |
释义 | JRobin是一套开源(基于LGPL授权)的网络性能监控系统,是RRDTool的一个纯Java实现。它使用与RRDTool相同的逻辑,相同的数据源,相同的存档类型,相同的定义。JRobin支持在RRD(Round Robin Database)上的所有标准操作:CREATE, UPDATE, FETCH, LAST, DUMP, XPORT和GRAPH。JRobin的API适合于那些熟悉RRDTool的概念与逻辑,但更喜欢使用纯Java实现的人。如果你提供相同的数据给RRDTool与JRobin,你将会得到相同的结果与图形。相关文档可访问其旧的主页。 做过网络管理的人,对于MRTG应该不算陌生。MRTG可以不断收集来自SNMP的数据,保存这些数据,并且按照日、周、月、年的方式生成4幅图像及相关说明,很直观的显示出要检测数据的趋势信息。 MRTG是比较早的技术了,后来又出现了RRD技术,是在MRTG技术的基础上发展起来的,更加灵活、更加方便。其应用也不在局限在主要监测网络数据上了。你可以通过RRD提供的强大功能收集各种各样的信息,并且生成更加复杂的图像。你也可以在自己的应用程序中使用它,因为它提供了丰富接口,方便应用程序调用。 JRobin是RRD的java版本,其原理是一致的。假如你打算监测计算机的CPU使用率,除了查看当前时刻的数据外,你可能也关心计算机在过去的一天、一周,甚至一个月、一年的CPU使用率,也就是以前一段时间的数据。对于这个要求,需要考虑以下一些问题: 1、数据的采集 获取数据是监测的第一步,根据监测对象的不同,采集数据的方法也不一样,可以通过SNMP获取数据、可以通过外部程序获取数据、可以通过脚本得到数据、也可以采用Java编写代码来取得数据。这些提供数据的方式,或者说是程序,可以看成是JRobin的数据源。我们不是时时刻刻的采集数据,出于性能和成本的考虑,通常在每次采集数据之间都会有一个间隔,也就是说在采集一次数据后,等待几秒或几分钟,然后再次采集数据,将这些多次采集的离散数据用图像方式展示出来,就成了好看直观的曲线。MRTG的采集间隔是300秒,RRD较为灵活,可以以秒为单位自由设置。 2、数据的保存 在每次采集数据后,我们可以将这些数据和采集数据的时刻保存下来,这样方便以后绘制图像。假如每300秒采集一次数据,那么一天需要采集288次数据。如果打算保存一年的数据,那么数据的个数就是 365 * 288。这样的数据不算多,但是没有大多必要,因为我们对数据关心的程度与采集数据的时间远近成比例,越近的数据越关心。另外,当把这些数据显示在固定大小的图像上时,并不是数据越多就越清晰。 JRobin采用了所谓的RRD的存储方式。比如,我们打算用四个图像显示一日、一周、一月和一年内的数据,那么我们可以这么保存数据: (1)保存最近的288个数据,也就是最近一天的数据; (2)每7个数据保存一个,保存288个,也就是最近一周时间内的的一些数据; (3)每30个数据保存一个,保存288个,也就是最近一月时间内的的一些数据; (4)每365个数据保存一个,保存288个,也就是最近一年时间内的的一些数据。 实际处理时,可能并不是简单隔几个保存一个,而是应用一些简单或复杂的算法。比如或许会对多个数据作一个平均,然后保存为一个。 以这种方式保存数据在JRobin中称之为归档(Archive)。数据源于归档的关系可以用下图来简要说明: 3、数据格式 为了达到以上目的,JRobin采用自己的格式来保存数据,这种格式是平台无关的,与RRD的格式不兼容。 JRobin还提供强大的绘制图像的功能,利用其提供的接口,可以很方便的根据数据生成各种样式图像。 举例: 1、定义保存的数据格式,创建数据文件 long end = Util.getTime(), start = end - 7 * 86400; //截至时间为当前时间,起始时间为一周前 String rrdFile = "demo.rrd"; // 创建数据文件定义,保存日数据与周数据 RrdDef rrdDef = new RrdDef(rrdFile, start - 1, 300); //数据间隔为300秒 rrdDef.addDatasource("value1", "GAUGE", 600, Double.NaN, Double.NaN); //定义数据源,可以定义多个 //以下定义归档数据,即如何保存数据 rrdDef.addArchive("AVERAGE", 0.5, 1, 288); //输入给数据源的数据每一个都保存下来,保存288笔数据,即保存最近一天的数据 rrdDef.addArchive("AVERAGE", 0.5, 7, 288); //每7笔数据,取平均值,然后保存,保存288笔数据,即保存最近一周的数据 RrdDb rrdDb = new RrdDb(rrdDef); //根据数据定义创建数据文件 对于月和年的数据,可以用相同的方式处理。 2、更新数据 采用三角函数生成数据。 for (long t = start; t < end; t += 300) { Sample sample = rrdDb.createSample(t); sample.setValue("value1", Math.sin(2 * Math.PI * (t / 86400.0)) * 50 + 50); sample.update(); } 3、生成图形 String pngFile = ""; RrdGraphDef gDef = null; //生成最近一天的图形 pngFile = "demoday.png"; gDef = new RrdGraphDef(); gDef.setFilename(pngFile); gDef.setWidth(450); gDef.setHeight(250); gDef.setImageFormat("png"); gDef.setTimeSpan(end - 86400, end); gDef.setTitle("JRobin Demo"); gDef.datasource("demo", rrdFile, "value1", "AVERAGE"); gDef.line("demo", Color.GREEN, "real"); gDef.gprint("demo", "MIN", "%5.1lf Min"); gDef.gprint("demo", "AVERAGE", "%5.1lf Avg"); gDef.gprint("demo", "MAX", "%5.1lf Max"); gDef.setSmallFont(new Font("Monospaced", Font.PLAIN, 11)); gDef.setLargeFont(new Font("SansSerif", Font.BOLD, 14)); new RrdGraph(gDef); //生成最近一周的图形 pngFile = "demoweek.png"; gDef = new RrdGraphDef(); gDef.setFilename(pngFile); gDef.setWidth(450); gDef.setHeight(250); gDef.setImageFormat("png"); gDef.setTimeSpan(end - 7 * 86400, end); gDef.setTitle("JRobin Demo"); gDef.datasource("demo", rrdFile, "value1", "AVERAGE"); gDef.line("demo", Color.GREEN, "real"); gDef.gprint("demo", "MIN", "%5.1lf Min"); gDef.gprint("demo", "AVERAGE", "%5.1lf Avg"); gDef.gprint("demo", "MAX", "%5.1lf Max"); //如果需要显示中文,以下两条语句比较重要 gDef.setSmallFont(new Font("Monospaced", Font.PLAIN, 11)); gDef.setLargeFont(new Font("SansSerif", Font.BOLD, 14)); new RrdGraph(gDef); 4、生成的图形如下所示: (1)按日生成的图形 (2)按周生成的图形 |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。