[rrd-users] how can i rebuild my rrd files ?

Karl Fischer rrd-users at ficos.de
Mon Jul 2 17:20:17 CEST 2012


Am 02.07.2012 11:21, schrieb mozatkey:
> hi,all:
> 
> 1. How can I get the creating script if only having xxx.rrd ?
> There are a lot of rrd files, i can't get all the creating script for
> each one, because they have been modified many times by handle operation.
> 
> 2.How can I set the HWPREDICT with those old rrd files?
> These old rrds files don't set the HWPREDICT, but now i have to use it.
> 
> 3. Is there any orders like: "show create rrd" and "alter xxx.rrd add
> HWPREDICT" in rrdtool , just as what we did in pl/sql?

can't answer #2, but as a "show create" I'm using a little bash script.
On purpose it's bash only, no sed, no awk, no perl etc.

It's not perfect (eg. doesn't support the HWPREDICT stuff etc.) but it
works for my purpose. Feel free to add the missing functions ...

it works like this:

showcreate.sh /tmp/CPU.rrd

rrdtool create "/tmp/CPU.rrd"
        --step 2
        DS:loadavg:GAUGE:120:0:1e+03
        DS:user:COUNTER:120:0:1e+02
        DS:nice:COUNTER:120:0:1e+02
        DS:system:COUNTER:120:0:1e+02
        DS:iowait:COUNTER:120:0:1e+02
        DS:irq:COUNTER:120:0:1e+02
        DS:softrq:COUNTER:120:0:1e+02
        RRA:AVERAGE:5e-01:2:345600
        RRA:AVERAGE:5e-01:30:576000
        RRA:AVERAGE:5e-01:300:157680
        RRA:AVERAGE:5e-01:1800:52560


$ cat /usr/local/bin/showcreate.sh

#!/bin/bash

RRDTOOL=($(which rrdtool))

function rrdinfo() {
  $RRDTOOL info $1 \
  | while read line; do
      key=${line%% = *}
      pri=${key%%[*}
      ind=${key%%]*}
      ind=${ind##*[}
      sub=${key##*.}
      value=${line##* = }
      num=${value/0000e/e}
      num=${num/0000e/e}
      num=${num/00e/e}
      num=${num/0e/e}
      num=${num/.e/e}
      num=${num/e+00/}
      num=${num/#NaN/U}
      case "$pri" in
        filename)
          echo "rrdtool create $value"
          ;;
        step)
          echo -e "\t--step $value"
          ;;
        ds)
          case "$sub" in
            value)
              echo -e "\tDS:$DS:$TYPE:$HB:$MIN:$MAX"
              ;;
            type)
              DS=$ind
              TYPE=${value//\"}
              case "$TYPE" in
                GAUGE|COUNTER|DERIVE|ABSOLUTE)
                  # ok
                  ;;
                *)
                  echo "unknown data source type $TYPE"
                  exit 1
                  ;;
              esac
              ;;
            minimal_heartbeat)
              HB=$value
              ;;
            min)
              MIN=$num
              ;;
            max)
              MAX=$num
              ;;
          esac
          ;;
        rra)
          case "$sub" in
            unknown_datapoints)
              if [ -n "$CF" ]; then
                echo -e "\tRRA:$CF:$XFF:$PDPS:$ROWS"
                CF=""
              fi
              ;;
            cf)
              CF=${value//\"}
              case "$CF" in
                AVERAGE|MIN|MAX|LAST)
                  # OK
                  ;;
                *)
                  echo "unknown consolidation $CF"
                  exit 1
                  ;;
              esac
              ;;
            xff)
              XFF=$num
              ;;
            pdp_per_row)
              PDPS=$num
              ;;
            rows)
              ROWS=$num
              ;;
          esac
          ;;
      esac
    done
    echo ""
}

while [ -n "$1" ]; do
  if [ -r $1 ]; then
    rrdinfo $1
  fi
  shift
done



More information about the rrd-users mailing list