This RRD was created on other architecture
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
Du musst angemeldet sein, um einen Kommentar abzugeben.