by malambra

Categories

  • Nagios
  • SysAdmin
  • docs

Tags

  • linux
  • nagios
  • rrd
  • tips

Me he encontrado varias veces problemas con los ficheros rrd que usa pnp para graficar en Nagios.

Indicando que faltan uno o varios (DS)-DataSource… esto sucede normalmente, porque se ha cambiado el plugin de un servicio y el nuevo plugin genera una salida diferente, lo cual genera un nuevo XML, pero el RRD que teníamos sigue con la definición anterior y faltan los (DS) indicados.

NOTA:

Para cada servicio, tenemos dos ficheros…

  • XML –> Estructura de BBDD rrd.
  • RRD –> BBDD

Como proceder… tenemos dos alternativas….

1.- Mas rápida… pero con perdida de histórico del servicio.

Borramos el rrd y el xml, y en el siguiente check se generaran de nuevo, pero habremos perdido el histórico para ese servicio.

2.- Creamos los DS que faltan.

De este modo mantendremos el historico del servicio para el resto de DS’s

NOTA: El script usado «rrd_add_datasource.pl» se puede descargar o copiarlo directamente.-

– Caso Practico –

1.- Verificar los DS que tenemos en el XML:

#cat /var/lib/pnp4nagios/XXXXXXX/DISK-linux.xml |grep ""
1
2
3
4
5

2.- Verificar los DS que tenemos en el rrd:

#rrdtool info /var/lib/pnp4nagios/XXXXXXX/DISK-linux.rrd |grep type
ds[1].type = "GAUGE"
ds[2].type = "GAUGE"
ds[3].type = "GAUGE"

3.- Debemos añadir el DS 4 y 5

# /root/rrd_add_datasource.pl /var/lib/pnp4nagios/XXXXXXX/DISK-linux.rrd 4 GAUGE
Processing /var/lib/pnp4nagios/XXXXXXX/DISK-linux.rrd... ok.
# /root/rrd_add_datasource.pl /var/lib/pnp4nagios/XXXXXXX/DISK-linux.rrd 5 GAUGE
Processing /var/lib/pnp4nagios/XXXXXXX/DISK-linux.rrd... ok.

4.- Verificamos que el RRD ya tiene los DS correctos

[root@s2-argos ~]# rrdtool info /var/lib/pnp4nagios/XXXXXXX/DISK-linux.rrd |grep type
ds[1].type = "GAUGE"
ds[2].type = "GAUGE"
ds[3].type = "GAUGE"
ds[4].type = "GAUGE"
ds[5].type = "GAUGE"

Tras esto el mapa se mostrara correctamente.

– Script «rrd_add_datasource.pl» –

#!/usr/bin/perl
use strict;
use warnings;
use RRD::Simple();
my $rrd_file = shift @ARGV;
my $DS_name = shift @ARGV;
my $DS_type = shift @ARGV;
my $rrd = RRD::Simple->new();
print "Processing $rrd_file...";
$rrd->add_source($rrd_file, $DS_name => $DS_type);
print " ok.\n";

e.j.

./rrd_add_datasource.pl $RRD_FILE $DS_NAME $TYPE
./rrd_add_datasource.pl /var/lib/pnp4nagios/XXXXXXX/DISK-linux.rrd 5 GAUGE