- 浏览: 921650 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (263)
- J2EE (9)
- Spring (11)
- Hibernate (11)
- Struts (5)
- opensource (19)
- Hadoop (28)
- 架构设计 (8)
- 企业应用 (10)
- SNMP (8)
- SSO (4)
- webservice (11)
- RPC (2)
- 编程语言 (0)
- Java (30)
- Javascript (5)
- NoSQL (11)
- 数据库 (0)
- oracle (8)
- MySQL (3)
- web (1)
- Android (2)
- Linux (15)
- 软件工具 (15)
- 项目构建 (11)
- 测试工具 (2)
- Exception (19)
- 杂谈 (4)
- Groovy (5)
- Nodejs (1)
- MacOSX (4)
最新评论
-
fighhin:
decode(BinaryBitmap,java.util.M ...
条形码/二维码之开源利器ZXing图文介绍 -
u013489005:
追问:楼主,请问有中文文档么?我的邮箱是frankgray@s ...
Java表达式计算引擎:Expr4J -
u013489005:
感谢博主 需要引入的包是import java.io.*;im ...
Java表达式计算引擎:Expr4J -
calosteward:
感谢楼主分享。。 Zxing 我听说过的。__________ ...
条形码/二维码之开源利器ZXing图文介绍 -
u013810758:
judasqiqi 写道感谢楼主!想请问楼主一下这个生成的图片 ...
Java实现二维码QRCode的编码和解码
blog迁移至:http://www.micmiu.com
最近接触一个流量统计和网管的系统,对相关信息和技术做了一些了解和学习,在此记录,以供自己日后回顾,同时也方便给刚接触的TX们一些参考。
MRTG(Multi Router Traffic Grapher,MRTG),相信接触过网络管理的人,应该不会对它陌生的。MRTG是比较早的技术了,后来在此基础上发展了RRD技术,相比MRTG而言更加灵活方便。
JRobin(基于LGPL授权的开源技术)就是RRD的一个Java实现的版本。JRobin支持在RRD(Round Robin Database)上的所有标准操作:CREATE, UPDATE, FETCH, LAST, DUMP, XPORT和GRAPH。JRobin的API适合于那些熟悉RRDTool的概念与逻辑,但更喜欢使用纯Java实现的人。如果你提供相同的数据给RRDTool与JRobin,你将会得到相同的结果与图形。
ps:JRobin的官网:
http://oldwww.jrobin.org/
http://www.jrobin.org/index.php/Main_Page
先从Core API 开始了解学习如何定义RRD模板、如何创建RRD文件、如何获取RrdDb、如何将RRD文件和XML之间转换以及如何从RRD文件里读取数据等基础内容,下面是学习时写的一些测试代码:TestCoreRrd.java
RRD定义的模板导出XML:
RRD文件转换成XML文件的片段
最近接触一个流量统计和网管的系统,对相关信息和技术做了一些了解和学习,在此记录,以供自己日后回顾,同时也方便给刚接触的TX们一些参考。
MRTG(Multi Router Traffic Grapher,MRTG),相信接触过网络管理的人,应该不会对它陌生的。MRTG是比较早的技术了,后来在此基础上发展了RRD技术,相比MRTG而言更加灵活方便。
JRobin(基于LGPL授权的开源技术)就是RRD的一个Java实现的版本。JRobin支持在RRD(Round Robin Database)上的所有标准操作:CREATE, UPDATE, FETCH, LAST, DUMP, XPORT和GRAPH。JRobin的API适合于那些熟悉RRDTool的概念与逻辑,但更喜欢使用纯Java实现的人。如果你提供相同的数据给RRDTool与JRobin,你将会得到相同的结果与图形。
ps:JRobin的官网:
http://oldwww.jrobin.org/
http://www.jrobin.org/index.php/Main_Page
先从Core API 开始了解学习如何定义RRD模板、如何创建RRD文件、如何获取RrdDb、如何将RRD文件和XML之间转换以及如何从RRD文件里读取数据等基础内容,下面是学习时写的一些测试代码:TestCoreRrd.java
package com.snmp.jrobin; import org.jrobin.core.DsDef; import org.jrobin.core.DsTypes; import org.jrobin.core.FetchData; import org.jrobin.core.FetchRequest; import org.jrobin.core.RrdDb; import org.jrobin.core.RrdDef; import org.jrobin.core.Sample; import org.jrobin.core.Util; /** * JRobin Core学习 * @author Michael sun */ public class TestCoreRrd { /** * @param args */ public static void main(String[] args) { // 2010-10-01:1285862400L 2010-11-01:1288540800L long startTime = Util.getTimestamp(2010, 10 - 1, 1); long endTime = Util.getTimestamp(2010, 11 - 1, 1); TestCoreRrd test = new TestCoreRrd(); String rootPath = "d:/test/jrobin/"; String rrdName = "demo_flow.rrd"; // 测试创建RrdDef RrdDef rrdDef = test.createRrdDef(rootPath, rrdName, startTime); // 测试创建RRD文件 初始数据 test.createRRDInitData(startTime, endTime, rootPath, rrdName, rrdDef); // 测试获取RrdDb的方法 test.getRrdDbMethod(rootPath); // 测试FetchData获取RRD test.fetchRrdData(rootPath, rrdName); } /** * 创建RRDDef */ private RrdDef createRrdDef(String rootPath, String rrdName, long startTime) { try { String rrdPath = rootPath + rrdName; RrdDef rrdDef = new RrdDef(rrdPath, startTime - 1, 300); // DsTypes: GAUGE COUNTER DERIVE ABSOLUTE DsDef dsDef = new DsDef("input", DsTypes.DT_COUNTER, 600, 0, Double.NaN); rrdDef.addDatasource(dsDef); rrdDef.addDatasource("output", DsTypes.DT_COUNTER, 600, 0, Double.NaN); rrdDef.addArchive("AVERAGE", 0.5, 1, 600); rrdDef.addArchive("AVERAGE", 0.5, 6, 700); rrdDef.addArchive("AVERAGE", 0.5, 24, 797); rrdDef.addArchive("AVERAGE", 0.5, 288, 775); rrdDef.addArchive("MAX", 0.5, 1, 600); rrdDef.addArchive("MAX", 0.5, 6, 700); rrdDef.addArchive("MAX", 0.5, 24, 797); rrdDef.addArchive("MAX", 0.5, 288, 775); // RRD file definition is completed rrdDef.exportXmlTemplate(rootPath + rrdName + "_template.xml"); System.out.println("[RrdDef Template export xml success]"); return rrdDef; } catch (Exception e) { e.printStackTrace(); return null; } } /** * 通过RrdDef创建RRD文件并初始化数据 */ private void createRRDInitData(long startTime, long endTime, String rootPath, String rrdName, RrdDef rrdDef) { try { RrdDb rrdDb = new RrdDb(rrdDef); // / by this point, rrd file can be found on your disk // 模拟一些测试数据 //Math.sin(2 * Math.PI * (t / 86400.0)) * baseval; int baseval = 50; for (long t = startTime; t < endTime; t += 300) { Sample sample = rrdDb.createSample(t); double tmpval = Math.random() * baseval; double tmpval2 = Math.random() * baseval; sample.setValue("input", tmpval + 50); sample.setValue("output", tmpval2 + 50); sample.update(); } System.out.println("[RrdDb init data success]"); System.out.println("[Rrd path]:" + rrdDef.getPath()); // rrdDb.dumpXml(rootPath + rrdName + "_rrd.xml") rrdDb.exportXml(rootPath + rrdName + ".xml"); // If your RRD files are updated rarely, open them only when // necessary and close them as soon as possible. rrdDb.close(); System.out.println("[RrdDb export xml success]"); } catch (Exception e) { e.printStackTrace(); } } /** * 除根据RrdDef以外获取RrdDb的其他方法 */ private void getRrdDbMethod(String rootPath) { try { // 根据RRD文件获取RrdDb String rrdFullPath = rootPath + "demo_flow.rrd"; RrdDb rrdDb = new RrdDb(rrdFullPath); System.out.println("[info:]" + rrdDb.getInfo() + "[path:]" + rrdDb.getPath()); rrdDb.close(); // 根据XML文件获取RrdDb rrdDb = new RrdDb(rootPath + "copy.rrd", rootPath + "demo_flow_rrd.xml"); System.out.println("[info:]" + rrdDb.getInfo() + "[path:]" + rrdDb.getPath()); rrdDb.close(); } catch (Exception e) { e.printStackTrace(); } } /** * */ private void fetchRrdData(String rootPath, String rrdName) { try { // open the file RrdDb rrd = new RrdDb(rootPath + rrdName); // create fetch request using the database reference FetchRequest request = rrd.createFetchRequest("AVERAGE", Util .getTimestamp(2010, 10 - 1, 1), Util.getTimestamp(2010, 10 - 1, 2)); System.out.println("[requet dump:]" + request.dump()); // filter the datasources you really need // String[] filterDataSource = { "input", "output" }; // request.setFilter(filterDataSource); // if you want only the "input" datasource use: // request.setFilter("input"); // execute the request FetchData fetchData = request.fetchData(); int columnCount = fetchData.getColumnCount(); int rowCount = fetchData.getRowCount(); long[] timestamps = fetchData.getTimestamps(); System.out.println("[data column count:]" + columnCount); System.out.println("[data row count:]" + rowCount); // System.out.println("[fetch data dump:]" + fetchData.dump()); // 循环获取数据 double[][] values = fetchData.getValues(); StringBuffer buffer = new StringBuffer(""); for (int row = 0; row < rowCount; row++) { buffer.append(timestamps[row]); buffer.append(": "); for (int dsIndex = 0; dsIndex < columnCount; dsIndex++) { buffer.append(Util.formatDouble(values[dsIndex][row])); buffer.append(" "); } buffer.append("\n"); } System.out.println("[fetch data display :]\n" + buffer); } catch (Exception e) { e.printStackTrace(); } } }
RRD定义的模板导出XML:
<rrd_def> <path>d:/test/jrobin/demo_flow.rrd</path> <step>300</step> <start>1285862399</start> <datasource> <name>input</name> <type>COUNTER</type> <heartbeat>600</heartbeat> <min>+0.0000000000E00</min> <max>U</max> </datasource> <datasource> <name>output</name> <type>COUNTER</type> <heartbeat>600</heartbeat> <min>+0.0000000000E00</min> <max>U</max> </datasource> <archive> <cf>AVERAGE</cf> <xff>+5.0000000000E-01</xff> <steps>1</steps> <rows>600</rows> </archive> <archive> <cf>AVERAGE</cf> <xff>+5.0000000000E-01</xff> <steps>6</steps> <rows>700</rows> </archive> <archive> <cf>AVERAGE</cf> <xff>+5.0000000000E-01</xff> <steps>24</steps> <rows>797</rows> </archive> <archive> <cf>AVERAGE</cf> <xff>+5.0000000000E-01</xff> <steps>288</steps> <rows>775</rows> </archive> <archive> <cf>MAX</cf> <xff>+5.0000000000E-01</xff> <steps>1</steps> <rows>600</rows> </archive> <archive> <cf>MAX</cf> <xff>+5.0000000000E-01</xff> <steps>6</steps> <rows>700</rows> </archive> <archive> <cf>MAX</cf> <xff>+5.0000000000E-01</xff> <steps>24</steps> <rows>797</rows> </archive> <archive> <cf>MAX</cf> <xff>+5.0000000000E-01</xff> <steps>288</steps> <rows>775</rows> </archive> </rrd_def>
RRD文件转换成XML文件的片段
<rrd> <!-- JRobin, version 0.1 --> <version>0001</version> <!-- Seconds --> <step>300</step> <!-- Sun Oct 31 23:55:00 CST 2010 --> <lastupdate>1288540500</lastupdate> <ds> <name>input</name> <type>COUNTER</type> <minimal_heartbeat>600</minimal_heartbeat> <min>+0.0000000000E00</min> <max>NaN</max> <!-- PDP Status --> <last_ds>+6.9973544356E01</last_ds> <value>+0.0000000000E00</value> <unknown_sec>0</unknown_sec> </ds> <ds> <name>output</name> <type>COUNTER</type> <minimal_heartbeat>600</minimal_heartbeat> <min>+0.0000000000E00</min> <max>NaN</max> <!-- PDP Status --> <last_ds>+9.4423065918E01</last_ds> <value>+0.0000000000E00</value> <unknown_sec>0</unknown_sec> </ds> <rra> <cf>AVERAGE</cf> <!-- 300 seconds --> <pdp_per_row>1</pdp_per_row> <xff>+5.0000000000E-01</xff> <cdp_prep> <ds> <value>NaN</value> <unknown_datapoints>0</unknown_datapoints> </ds> <ds> <value>NaN</value> <unknown_datapoints>0</unknown_datapoints> </ds> </cdp_prep> <database> <!-- Fri Oct 29 22:00:00 CST 2010 / 1288360800 --> <row> <v>+1.4316557626E07</v> <v>+1.2619069495E-01</v> </row> <!-- Fri Oct 29 22:05:00 CST 2010 / 1288361100 --> <row> <v>+1.4063324411E-02</v> <v>+1.4316557534E07</v> </row> <!-- 省略部分信息--> ........................... </database> </rra> <!-- 省略部分信息--> ............................... </rrd>
发表评论
-
SNMP4j实现Trap的示例
2012-07-20 10:52 1798目录: 环境参数 代码示例 详见 ... -
SNMP4j实现同步和异步的WALK的示例
2012-07-19 14:10 1516目录: 环境参数 代码示例 同步WA ... -
SNMP4j实现同步和异步的GET的示例
2012-07-19 14:09 1599目录: 环境参数 代码示例 同步GE ... -
JRobin绘制指定时间段的流量图
2012-06-21 08:39 1467详见: http://www.micmiu.com ... -
SNMP4j之基础介绍
2011-05-08 15:35 3508blog迁移至:http://www ... -
Java实现snmp的get和walk代码示例
2011-05-06 10:23 8320blog迁移至:http://www.micmiu.c ... -
SNMP之JRobin画图
2010-11-18 12:57 2743blog迁移至:http://www.micmiu.c ...
相关推荐
学习用jrobin绘图的绝佳例子程序 学习用jrobin绘图的绝佳例子程序
Jrobin、SNMP4jsnmp4j-1x-demoSNMP4j实现同步和异步的GET的示例SNMP4j实现同步和异步的Walk的示例SNMP4j实现Trap的示例SNMP4j实现SET的示例SNMP4j实现GETBLUK的示例robin-demoJRobin Core学习JRobin基础画图JRobin...
在IT监控领域,RRD(Round Robin Database)和JRobin是两种常见的时序数据库,用于存储和...通过学习和掌握这些工具,你可以构建出能够实时反映IT环境健康状况的监控系统,及时发现并解决问题,确保业务的稳定运行。
JRobin-1.5.14.jar是这个项目的一个稳定版本,而其源代码的提供则为开发者提供了深入学习和定制的机会。 1. **JRobin介绍** JRobin是一个纯Java实现的RPM存储引擎,它的设计目标是高效、低内存占用和快速读写。...
赠送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...
赠送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是一种开源的、轻量级的时序数据存储库,专门用于性能监控和日志记录。它被设计为Rrdtool(Round Robin Database Tool)的一个替代品,Rrdtool是由Tobi Oetiker开发的用于存储和...
在本案例中,我们关注的是两个核心的JAR文件:`javamelody-core-1.52.0.jar`和`jrobin-1.5.9.jar`。 `javamelody-core-1.52.0.jar`是JavaMelody的核心组件,包含了实现监控功能的主要类和接口。这个版本的Java...
它集成了JRobin,一个高效的数据存储库,用于收集和展示监控数据。本篇将深入探讨JavaMelody和JRobin的核心功能以及它们在Java运行时监控中的作用。 JavaMelody的核心功能主要包括以下几个方面: 1. **性能指标...
JRobin是RRDTool的100%纯Java替代品,具有几乎完全相同的规格。 如果向RRDTool和JRobin提供相同的数据,则将获得完全相同的结果和图形。 支持所有标准RRDTool操作。
监控器需要的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】 ...
在深入学习RRD和JRobin时,需要理解RRD的数据模型、归档策略以及如何优化存储和查询效率。此外,熟悉相关工具(如RRDTool)和库(如JRobin)的API,对于开发监控和分析系统至关重要。通过"RRD环形数据库操作"的示例...
4. **JRobin与RRDTool**:JRobin是RRDTool的一个Java实现,用于存储和分析网络性能数据,支持高效、空间优化的数据记录。 【系统设计与实现】 1. **拓扑信息搜索模块**:负责收集网络设备信息,构建和更新网络拓扑...
本文将详细介绍这种工具的主要特点和使用方法,以及与之相关的技术知识点。 首先,我们关注的是"jira-javamelody.jar"这个文件。JavaMelody是一个广泛使用的开源监控解决方案,它可以集成到各种Java应用中,包括...
2. **jrobin**: JRobin是用于存储性能数据的二进制日志库,它是基于RMON(Remote Monitoring)标准的,能够高效地存储和检索性能历史数据。 3. **msyh.ttc** 和 **msyhbd.ttc**: 这两个文件可能包含的是中文字体,...
另一个`jrobin-1.5.9.1.jar`则是JRobin库,它是JavaMelody用来存储和读取性能数据的持久化组件,提供了类似于RRDTool(Round Robin Database)的功能,以高效的方式存储时间序列数据。 在使用JavaMelody时,通常会...
这个工具的核心组件包括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使用率等,以便后续分析。 ...