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
añadir >/dev/null tal que estomy $cmd = ( sprintf '%s %s %s', $WHICH_TESSERACT, shell_quote($abs_image), shell_quote($abs_image) ) . ( defined $lang ? " -l $lang" : '' ) . " 2>/dev/null";
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`/bin/rm -f $P1`;
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);
}
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