[collectd] Problems with exec script

Christian Dervaric christian.dervaric at googlemail.com
Wed Oct 19 13:22:14 CEST 2011


I wrote a small script for the exec plugin to measure the download time 
of some image from different media servers. I added the script to my 
exec config, and it looks like its executed, when I add logging, 
everything looks fine. But for some reason the corresponding folders in 
the rrd output folder are never created and the results of the script 
therefore never got stored. I have another script for checking disk 
space in place, and it works just fine.
I also made some experiments with the working check disk space script 
which I copied, added to config and changed the name of the identifier 
in the PUTVAL output, like exchanging "space" for "spoce" and similar 
changes. Sometimes, it worked and sometimes not. I am confused.

Has anyone an idea, what could be wrong? I added the config, script and 
the output below.

Thanks in advance,

Example output looks like:

PUTVAL "serverxyz/mediadl/time_fb1" interval=300 N:355
PUTVAL "serverxyz/mediadl/time_fb2" interval=300 N:864
PUTVAL "serverxyz/mediadl/time_fb3" interval=300 N:299
PUTVAL "serverxyz/mediadl/time_fb4" interval=300 N:236
PUTVAL "serverxyz/mediadl/time_fb5" interval=300 N:499
PUTVAL "serverxyz/mediadl/time_fb6" interval=300 N:473
PUTVAL "serverxyz/mediadl/time_fb7" interval=300 N:596

My exec config looks like:

LoadPlugin exec
TypesDB "/etc/collectd/add-ons/exec-types.db"

<Plugin exec>
         Exec "gd:gd" "/etc/collectd/add-ons/exec/check_disk_space.sh"
         Exec "gd:gd" 

The script is:

# This script test the download timings for a test file from the fb 
media servers.
# The test file is named test.jpg - resides in the media root dir and is 
about 20k big.


function downloadTestFile() {
         time $(wget -q --timeout=10 -O - 
http://fb$1.someserver.org/test.jpg >> /dev/null)

function measureFBDownload() {
         # value like "real      0m0.586s"
         value=$(downloadTestFile "$1" 2>&1 | grep real)
         # split minutes, seconds, millis
         minutes=$(echo -n "$value" | grep -Eo "[0-9]+m" | grep -Eo 
         seconds=$(echo -n "$value" | grep -Eo "m[0-9]+" | grep -Eo 
         millis=$(echo -n "$value" | grep -Eo "[0-9]+s" | grep -Eo 
         [ -z "${millis}" ] && millis=0
         totalMillis=$(( ($minutes * 60 * 60) + ($seconds * 60) + $millis ))
         echo "$totalMillis"

for i in {1..7} ; do
         millis=$(measureFBDownload $i)
         OUTPUT="${OUTPUT}PUTVAL \"${HOSTNAME}/mediadl/time_fb${i}\" 
interval=${INTERVAL} N:${millis}\n"

# output full result at once and remove empty lines
echo -e "${OUTPUT}" | sed '/^$/d'

exit 0

More information about the collectd mailing list