sábado, 19 de mayo de 2012

Plugin para monitorizar el contenido de la pantalla

El objetivo de este plugin de Nagios es comprobar que una pantalla nos muestra algún contenido específico. No es la panacea, porque se basa en OCR, pero en nuestro caso sirvió perfectamente puesto que permite la monitorización de pantallas de información para comprobar si están funcionando y mostrando la info que queremos o no.

La instalación requiere tesseract-ocr e imagemagick, así como algún módulo de perl adicional.

Instrucciones de prerequisitos (Debian Based distro)

apt-get install tesseract-ocr
apt-get install imagemagick
perl -MCPAN -eshell
cpan shell -- CPAN exploration and modules installation (v1.9402)
Enter 'h' for help.
 
cpan[1]> install Image::OCR::Tesseract
cpan[1]> install Net::VNC
 

Es recomendable hacer el siguiente cambio en el módulo de tesseract de perl para evitar ciertas salidas en medio de nuestro script:
Localizamos Tesserat.pm normalmente ubicado en
/usr/local/share/perl/X.Y.Z/Image/OCR/Tesseract.pm (en Debian)
donde X.Y.Z es la versión de perl que corresponda
Modificamos la línea donde se ejecuta el tessaract y añadir una redir del STDOUT a /dev/null
Es decir donde pone
my $cmd =
      ( sprintf '%s %s %s',
         $WHICH_TESSERACT,
         shell_quote($abs_image),
         shell_quote($abs_image)
      ) .
      ( defined $lang ? " -l $lang" : '' ) .
      "  2>/dev/null";
añadir >/dev/null tal que esto
 my $cmd =
      ( sprintf '%s %s %s',
         $WHICH_TESSERACT,
         shell_quote($abs_image),
         shell_quote($abs_image)
      ) .
      ( defined $lang ? " -l $lang" : '' ) .
      "  2>/dev/null >/dev/null";

Código fuente del Script

#!/usr/bin/perl
use strict;
use warnings;
use Getopt::Std;
use Image::OCR::Tesseract 'get_ocr';
use File::Which 'which';


my $prg_n = "verificapantallas.pl";
my $prg_v = "v1.0";
my %opts;
my $vncc=which('vnccapture');

my $timeout="30";

my $retval = {
        OK => 0,
        WARNING => 1,
        CRITICAL => 2,
        UNKNOWN => 3
};


sub uso {
        print @_ if @_;
        print <<"EOF";
Uso: $prg_n -H <hostname|ip>

-H Hostname o IP de la pantalla a monitorizar
-P Clave de acceso VNC
-S Cadena a buscar
-U Realiza la comparación con todo e mayúsculas
-h Muestra esta ayuda

EOF
print "$prg_n $prg_v by Clean75" unless @_;
        exit $retval->{UNKNOWN};
}
getopts('H:P:S:h:U', \%opts);

uso if defined $opts{h};

uso("Introduzca un nombre de host o IP!\n") unless defined $opts{H};
uso("Introduzca la clave del VNC!\n") unless defined $opts{P};
uso("Introduzca la cadena a comprobar!\n") unless defined $opts{S};

my $srv=$opts{H};
my $clave=$opts{P};
my $cadena=$opts{S};
my $flag_mayus = $opts{U};

my $P1="/tmp/$srv$$.png";

if(!-e $vncc)
{
        uso("No se ha encontrado el $vncc\n");

}

$SIG{ALRM} = sub {
        print "Error de timeout. Puedes incrementarlo (actual: $timeout)";
        exit $retval->{CRITICAL};
};

`$vncc -H $srv -P $clave -o $P1`;
my $texto;
$texto=get_ocr($P1);
if($flag_mayus)
{
        $cadena=uc($cadena);
        $texto=uc($texto);
}
        `/bin/rm -f $P1`;
if($texto=~/$cadena/)
{
        print "OK: Pantalla $srv\n";
        exit $retval->{OK};
}
else
{
        print "CRITICAL: Pantalla $srv está malita\n";
        exit $retval->{CRITICAL};
}


Prueba del script 

(datos de parámetros ficticios, cada uno que ponga los que necesite)

/usr/lib/nagios/plugins/verificapantallas.pl -H 100.100.100.100 -P Clave -S Texto

No hay comentarios:

Publicar un comentario

L2TP Ipsec Windows to Mikrotik eror 789

 Add this to registry REG ADD HKLM\SYSTEM\CurrentControlSet\Services\PolicyAgent /v AssumeUDPEncapsulationContextOnSendRule /t REG_DWORD /d...