请输入您要查询的百科知识:

 

词条 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条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2024/11/15 12:40:48