做过网络管理的人,对于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)按周生成的图形
本文来源于 冰山上的播客 http://xinsync.xju.edu.cn , 原文地址:http://xinsync.xju.edu.cn/index.php/archives/2351
分享到:
相关推荐
JRobin的文件结构和工作原理在"JRobin简介_files"中有所说明。 "监控CPU的使用情况.html"和"监控CPU的使用情况_files"提供了关于如何跟踪和分析CPU使用情况的具体步骤,无论你是使用RRDTool还是JRobin,这些知识都...
赠送jar包:jrobin-1.5.9.jar; 赠送原API文档:jrobin-1.5.9-javadoc.jar; 赠送源代码:jrobin-1.5.9-sources.jar; 赠送Maven依赖信息文件:jrobin-1.5.9.pom; 包含翻译后的API文档:jrobin-1.5.9-javadoc-API...
《JRobin:深入理解与应用》 在Java世界中,数据持久化是一个不可或缺的部分,而JRobin正是这样一个轻量级的、高效的RPM(Ring-Persistent Metrics)存储库,它被广泛用于记录和分析系统性能指标。JRobin-1.5.14....
赠送jar包:jrobin-1.5.9.jar; 赠送原API文档:jrobin-1.5.9-javadoc.jar; 赠送源代码:jrobin-1.5.9-sources.jar; 赠送Maven依赖信息文件:jrobin-1.5.9.pom; 包含翻译后的API文档:jrobin-1.5.9-javadoc-API...
**JRobin 流量报表详解** JRobin 是一个基于 Java 的开源项目,专门设计用于生成和展示流量数据的图形报表。作为一个轻量级框架,它为监控系统性能提供了直观、实时的图表展示功能,尤其在处理网络流量、系统资源...
学习用jrobin绘图的绝佳例子程序 学习用jrobin绘图的绝佳例子程序
**Jrobin流量监控代码详解** Jrobin是一种开源的、轻量级的时序数据存储库,专门用于性能监控和日志记录。它被设计为Rrdtool(Round Robin Database Tool)的一个替代品,Rrdtool是由Tobi Oetiker开发的用于存储和...
它集成了JRobin,一个高效的数据存储库,用于收集和展示监控数据。本篇将深入探讨JavaMelody和JRobin的核心功能以及它们在Java运行时监控中的作用。 JavaMelody的核心功能主要包括以下几个方面: 1. **性能指标...
JRobin是RRDTool的100%纯Java替代品,具有几乎完全相同的规格。 如果向RRDTool和JRobin提供相同的数据,则将获得完全相同的结果和图形。 支持所有标准RRDTool操作。
在本案例中,我们关注的是两个核心的JAR文件:`javamelody-core-1.52.0.jar`和`jrobin-1.5.9.jar`。 `javamelody-core-1.52.0.jar`是JavaMelody的核心组件,包含了实现监控功能的主要类和接口。这个版本的Java...
监控器需要的jar,需在web.xml中配置 <filter-name>monitoring <filter-class>net.bull.javamelody.MonitoringFilter</filter-class> <filter-name>monitoring <url-pattern>/* ...可以进入到监控页面
注:下文中的 *** 代表文件名中的组件名称。 # 包含: 中文-英文对照文档:【***-javadoc-API文档-中文(简体)-英语-对照版.zip】 jar包下载地址:【***.jar下载地址(官方地址+国内镜像地址).txt】 ...
这种数据库由JRobin库在Java环境中实现,而JRobin是一个轻量级、高效的RRD工具。 RRD数据库的结构由一系列数据源(Data Sources)和时序更新记录(Archives)组成。数据源代表了你要监控的特定指标,如CPU利用率或...
snmp-tutorialSNMP tutorial :Jrobin、SNMP4jsnmp4j-1x-demoSNMP4j实现同步和异步的GET的示例SNMP4j实现同步和异步的Walk的示例SNMP4j实现Trap的示例SNMP4j实现SET的示例SNMP4j实现GETBLUK的示例robin-demoJRobin ...
"jrobin-1.5.9.1.jar"是Java Robin(JRobin)的组件,它是JavaMelody的一个依赖库,用于存储和检索监控数据。JRobin是一个纯Java实现的RMON(Remote Monitoring)兼容的数据存储系统,它能够高效地记录和分析时间...
- 将`javamelody.jar`和`jrobin-x.jar`两个文件从提供的`javamelody.zip`压缩包根目录下复制到待监控Web应用的`WEB-INF/lib`目录中。 - 如果使用Maven构建工具,可以通过添加`javamelody-core`依赖项简化安装流程...
另一个`jrobin-1.5.9.1.jar`则是JRobin库,它是JavaMelody用来存储和读取性能数据的持久化组件,提供了类似于RRDTool(Round Robin Database)的功能,以高效的方式存储时间序列数据。 在使用JavaMelody时,通常会...
2. **jrobin**: JRobin是用于存储性能数据的二进制日志库,它是基于RMON(Remote Monitoring)标准的,能够高效地存储和检索性能历史数据。 3. **msyh.ttc** 和 **msyhbd.ttc**: 这两个文件可能包含的是中文字体,...
这个工具的核心组件包括javamelody.jar和jrobin-1.5.9.1.jar,这两个JAR文件在Java应用的监控中扮演着重要角色。 javamelody.jar是JavaMelody的主要实现库,它提供了全面的监控功能。这个库能够集成到任何基于...
2. **jrobin-1.5.9.1.jar**: JRobin是一个轻量级的、纯Java实现的RPN(Reverse Polish Notation)图绘制库,用于存储和读取性能数据。JavaMelody利用JRobin来持久化监控数据,如内存、CPU使用率等,以便后续分析。 ...