Thursday, October 29, 2009

DZ3 Data Logger: Logging *Everything*

During DZ2 development it became clear tat there's no such thing as too much instrumentation data. Hence, DZ3 was architected in such a way that any object that produces DataSample<E extends Number> can have their data logged.

Here's an example how you can log temperature sensor data (this has been added to the bottom of this example):

<!-- Loggers -->
<bean id="rrdbase" class="">
<!-- This is the path in the file system. If in doubt, make it absolute --/>
<constructor-arg type="java.lang.String" value="./rrd"/>
<bean id="rrdtool" class="">
<constructor-arg type="java.lang.String" value="/usr/bin/rrdtool"/>
<bean id="rrdlogger" class="net.sf.jukebox.datastream.logger.impl.rrd.RrdLogger" init-method="start">
<constructor-arg index="0" type="java.util.Set">
<ref bean="temperature_sensor-6EE055000000"/>
<ref bean="temperature_sensor-cpu1"/>
<ref bean="temperature_sensor-cpu2"/>
<ref bean="temperature_sensor-mobo"/>
<ref bean="temperature_sensor-sda"/>
<ref bean="temperature_sensor-sdb"/>
<constructor-arg index="1" type="" ref="rrdbase"/>
<constructor-arg index="2" type="" ref="rrdtool"/>

And here's the data that it produced during its first 3 hours of operation:

3 Hours of DZ3

UPDATE (2009/11/08): Added comment to rrdbean constructor argument - thanks to David for clarification.


  1. In this example, where is the "./rrd" relative to? I'm getting an error when starting the system that says "./rrd: not a directory or not writable", but I can't tell from the logged exception what the working directory is?

  2. The value above is a relative path to the shell's working directory. It would be safe to make it absolute.

    Thanks for the suggestion, I'll convert this into absolute path when logging the exception.