Control de colas de correo desde Zabbix

Hoy vamos a ver cómo podemos controlar las colas de correo de Zimbra (y en general de postfix) desde nuestra herramienta de monitorización.
Antes de comenzar, vamos a hacer una breve introducción a qshape, una utilidad nativa de postfix que permite controlar la antigüedad de los correos. Dicho de otra forma, nos permite saber cuánto tiempo lleva un correo en una cola. Todos sabemos que ne postfix hay 4 colas principales, active, deferred, hold e incoming. Si hacemos uso qshape podremos saber exactamente cuanto correo hay en cada cola. Veamos un ejemplo.
shell> qshape deferred
              T  5 10 20 40 80 160 320 640 1280 1280+
       TOTAL  3  0  0  0  1  0   0   0   0    0     2
    yahoo.es  1  0  0  0  1  0   0   0   0    0     0
 hotmial.com  1  0  0  0  0  0   0   0   0    0     1
    gmail.es  1  0  0  0  0  0   0   0   0    0     1
Como podéis observar, se le pasa como parámetro la cola que nos interesa y nos devuelve la cantidad de mail's que hay en ella. La primera columna representa el nombre del destino, que como se puede observar suelen ser nombres mal escritos. La segunda columna, representada como una T, representa el total de los mail's en cola y el resto de columnas lo mismo pero por minutos.

Para poder graficar y controlar estos valores, primero necesitamos tener un pequeño script que nos los devuelva. Así que aquí os dejo el que yo hice (no muy currado).
#!/usr/bin/perl
#
# Usage: zabbix_qshape <queue> <time>
# <queue>: active, deferred, hold, incoming
# <time>: T (all), 5,10,20,40,80,160,320,640,1280,1280+
# Returns the number of messages in <queue> for <minutes>

use strict;

my $num_args = $#ARGV + 1;
if ($num_args != 2) {
   print "Usage: zabbix_qshape <queue> <time>\n";
   exit;
} else {
   my $queue = @ARGV[0];
   my $time = @ARGV[1];
   my %tindex = ('T' => 2,
      '5' => 3,
      '10' => 4,
      '20' => 5,
      '40' => 6,
      '80' => 7,
     '160' => 8,
     '320' => 9,
     '640' => 10,
    '1280' => 11,
   '1280+' => 12);
   my $index=$tindex{$time};
   if(!$index) {
      print "Usage: zabbix_qshape <queue> <time>\n";
      exit;
   }
   my $command = "sudo /opt/zimbra/postfix/sbin/qshape.pl $queue \
                 | grep TOTAL \
                 | awk {'print \$$index'}";
   my $sal = qx@$command@;
   chomp($sal);
   print "$sal\n";
}
Con este pequeño script al pasarle una cola y un tiempo, nos devuelve el número de mail's que están en dicha cola. De forma más gráfica,
shell> perl /usr/local/bin/zabbix_qshape deferred T
3
Así que ahora sólo queda crear un nuevo item que se encargue de monitorizarlo. Puesto que queda más limpio, soy de los que prefiere emplear el UserParameter del fichero de configuración, creando ahí una nueva key_ que se encargue de controlar esto. Puesto que le vamos a pasar 2 parámetros, vamos a crearla con opciones.
UserParameter=zimbra.queue[*], /usr/local/bin/zabbix_qshape $1 $2
Ahora ya sólo queda crear los items que deseamos monitorizar, tal que así:
Name                    : Zimbra monitor: $1
Type                    : Zabbix agent
Key                     : zimbra.queue[deferred, T]
Type of information     : numeric (unsigned)
Data type               : Decimal
Update interval (in sec): 300
Applications            : Zimbra
De la forma que la hemos creado, tenemos una única key_ a la que le podemos pasar como parámetros la cola y el tiempo y lógicamente, mostrarlos como parte del nombre. En el ejemplo anterior la key_ creada es para la cola deferred. Para monitorizar el resto de colas, las key's a crear serán:
zimbra.queue[active, T]
zimbra.queue[hold, T]
zimbra.queue[incoming, T]
Sólo para terminar, un detalle importante es el empleo de sudo en el comando. Algunos ya os habréis dado cuenta, pero para los que no, simplemente deciros que antes de que esto funcione debemos de añadir la siguiente línea al fichero /etc/sudoers.
zabbix  ALL=NOPASSWD: /opt/zimbra/postfix/sbin/qshape.pl
Como nota adicional decir que el comando qshape de zimbra está localizado bajo /opt/zimbra/bin/qshape, pero como todo el sistema Zimbra está preparado para ser ejecutado con el usuario zimbra. Sin embargo, la instalación de postfix ofrece también dicho comando, localizado /opt/zimbra/postfix/sbin/qshape.pl al que sí le podemos añadir fácilmente permisos con sudo para el usuario zabbix.


No hay comentarios :

Publicar un comentario

Formulario de contacto

Nombre

Correo electrónico *

Mensaje *

Últimos comentarios