This RRD was created on other architecture

Print Friendly, PDF & Email

Neulich hatte ich das Vergnügen ein Monitoring-System zu migrieren. Hintergrund war, daß alle Programme von den Sourcen installiert waren. Der große Nachteil dieser Variante: solche Sytsteme sind nur sehr schwer wartbar.
Betroffene Komponenten:

  • Nagios
  • NRPE
  • nagiosgraph
  • cfengine

Nach dem Umzug der RRD-Datenbanken mußte ich feststellen, daß diese scheinbar nicht kompatibel waren. Es war im LOG nur
This RRD was created on other architecture
zu sehen. Dies lässt den Schluß zu, daß RRD-Datenbanken, welche auf einem 32bit System erstellt wurden, nicht auf einem 64bit System verwendet werden können. Wer ‚TOBI OETIKER‘ kennt, weiß, daß seine ‚RRDTOOLS‘ eine Lösung hierfür liefern.
Hier ein kleiner Auszug aus der Manpage von rrddump:

To transfer an RRD between architectures, follow these steps:
1. On the same system where the RRD was created, use rrdtool dump to export the data to XML format.
2. Transfer the XML dump to the target system.
3. Run rrdtool restore to create a new RRD from the XML dump. See rrdrestore for details.

Man muß die RRD-Datenbanken auf dem 32bit System exportieren
Da die scripte hier nicht ganz das taten, was ich brauchte, war ein wenig Anpassung notwendig.( Danke Helmschrott.de für die Inspiration)
Hierzu hab ich ein kleines script geschrieben, welches mir die RRD-Datenbanken in *.xml exportiert und dann auf den Zielhost in den bevorzugten Ordner synct.

#!/bin/bash

RRD_DIR='/usr/local/nagios/var/rrd'

pushd $RRD_DIR

# Export:

# outer_loop (hostnames)
for h_name in $(ls -1); do
  for sufx in rrd rrd_min rrd_max; do
    for f in $(find ${h_name} -name '*.${suffx}' -print); do
      if [ $sufx eq rrd ]; then
        f_xml=$(dirname $f)/$(basename $f .$sufx).xml
      else
        f_xml=$(dirname $f)/$(basename $f .rrd).xml
      fi
      echo "dumping \"$f\" to \"${f_xml}\""
      rrdtool dump "$f" > "${f_xml}"
    done
  done
done

popd

### RRD part
RSYNC=$(which rsync)
RSYNC_OPTS="-avH --delete"
RSYNC_EXCLUDE="--exclude *.rrd --exclude *.rrd_min --exclude *.rrd_max --delete-excluded"

S_HOST="prehive"
RRD_SOURCE="/usr/local/nagios/var/rrd"

D_HOST="nagios"
RRD_DEST="/var/lib/nagios/rrd"

cd ${RRD_SOURCE}
for i in $(ls -1); do
  $RSYNC $RSYNC_OPTS $RSYNC_EXCLUDE ${i} ${D_HOST}:${RRD_DEST}/
done

Auf dem Zielhost habe ich dann folgendes script verwendet, um die *.xml Dateien wieder zu importieren.

#!/bin/bash
#
## !! This RRD was created on other architecture !!
# hmm, we need to convert rrd files due to architecture change 32bit -> 64bit
#
### You need to export to xml and then import again
# Export: ‘rrdtool dump $file.rrd > $file.xml’
# Import: ‘rrdtool restore $file.xml $file.rrd’
RRD_DIR='/var/lib/nagios/rrd'

pushd $RRD_DIR
# Import:

# outer_loop (hostnames)
for h_name in $(ls -1); do
#h_name=achilleus
  for sufx in .rrd .rrd_min .rrd_max; do
    for f in $(find ${h_name} -name '*.xml' -print); do
      if [ "$sufx" = ".rrd" ]; then
        f_rrd=$(dirname $f)/$(basename $f .xml)$sufx
        echo "restoring \"$f\" to \"${f_rrd}\""
        rrdtool restore -r -f "$f" "${f_rrd}"
        chown nagios: "${f_rrd}"
      else
        f_rrd=$(dirname $f)/$(basename $f $sufx.xml)$sufx
      fi
      if [ -f $(dirname $f)/$(basename $f $sufx.xml)$sufx.xml ]; then
        echo "restoring \"$f\" to \"${f_rrd}\""
        rrdtool restore -r -f "$f" "${f_rrd}"
        chown nagios: "${f_rrd}"
      else
        continue
      fi
    done
  done
done

popd


Schreibe einen Kommentar

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Powered by WordPress. Designed by elogi.