Nagios + nagiosgraph plugin instalado.
Todo surge de un supuesto bug del nagiosgrapah, que borraba el archivo de perfdata de nagios cada vez que lo leía. Lo que pasaba es que el script de perl de nagiosgraph renombraba el fichero /var/nagios/perfdata.log a /var/nagios/perfdata.log.nagiosgraph. Después de hacer todo el proceso pertinente, este mismo plugin borraba el archivo recién renombrado, con lo que dejaba de existir el perfdata.log, y por algún motivo nagios no era capaz de volverlo a crear automáticamente, ni poniendo el modo «append» para el perfadata en el nagios.cfg. Modifiqué el script de perl del plugin para que no lo renombrara, sino que lo copiara. Y fué todo bien hasta que al cabo de unos días me empecé a encontrar estas líneas en el fichero de log de nagiosgraph /var/log/nagiosgraph.log:
Mon Jan 21 18:19:26 2013 p1.pl error RRDs::update ERR /var/nagiosgraph/rrd/localhost/System%20temperature___temp.rrd: illegal attempt to update using time 1358788713 when last update time is 1358788713 (minimum one second step)
Ni idea de lo que pasaba. Di mil vueltas por internet, cambié configuración del nagios, del plugin; y nada. Se ve que se hacía un lío cuando el plugin leía el archivo de perfdata.
Al final lo que hice fue modificar el script perl de nagiosgraph para que copiara el archivo de perfdata en vez de moverlo, y que truncara el original (perfdata.log) para que nagios lo encontrara cuando intentase escribir en él:
vi /etc/nagiosgraph/ngshared.pm
--> buscar la función readperfdata:
...
...
# mik modified
#if (! rename $fn, $worklog) {
if (! copy $fn, $worklog) {
debug(DBCRT, "cannot process perflog: rename failed for $fn");
return @lines;
}
# mik added
open(FF, ">".$fn);
close(FF);
...
...
Hay un race-condition ahí que puede provocar perdida de datos. Entre que insert.pl copia el archivo y lo trunca nagios puede agregar mas datos.
Lo que hice yo fue usar service_perfdata_command para escribir el perfdata.log en lugar de service_perfdata_file.