• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Perl nagios
 

Perl nagios

on

  • 436 views

 

Statistics

Views

Total Views
436
Views on SlideShare
436
Embed Views
0

Actions

Likes
0
Downloads
5
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Perl nagios Perl nagios Document Transcript

    • DESARROLLO • PerlCreamos nuestros propios plugins para NagiosEL VIGILANTEPodemos crear un plugin en Perl para aprovechar la potencia de la herramienta de monitorización Nagios.POR MICHAEL SCHILLIP uede que le sea familiar la muchas otras cosas. Si tenemos resultados al cliente, que resulta ser siguiente escena: escucha- alguna necesidad especial no un plugin de Nagios. El plugin mos la voz de nuestro cubierta por los plugins estándar, interpreta entonces los resultados ycompañero (definitivamente tecnó- podemos confeccionar uno que se usa el código de salida parafobo) en el despacho contiguo adapte a nuestras necesidades. indicarle a Nagios si los valores songritando “¡Mi Internet no funciona!” Sólo por dar un ejemplo, Nagios correctos o si ha encontradoUna posible respuesta puede ser puede llevar a cabo tests para verifi- problemas (véase Tabla 1).comprobar laboriosamente si el rou- car si un proveedor de hosting nos El script CGI, iostat.cgi, usa la fun-ter está realmente hablando está dando un servidor con suficien- ción tap del módulo Sysadm::Installcon nuestro proveedor o si tes recursos, en lugar de sobrecargar de CPAN para llamar al comando ios-podemos acceder al servidor el servidor albergando demasiadas tat con los valores 1 y 2 (línea 8).de DNS. Pero la localización y páginas Web en él. Si, por razo- Debido al valor del intervalo de 1, yresolución de problemas es nes de seguridad, la al valor de contador de 2, mide elmucho más fácil si dispo- instalación de Nagios en la rendimiento de la CPU y de la E/Snemos de un software que máquina local no tiene del disco duro dos veces pormonitoriza las funciones acceso directo a la shell segundo y genera el resultado de lacríticas y nos muestra del lado servidor, pode- Figura 3.un amigable resumen mos instalar un agente El primer test nos da el valorbasado en Web como en la página Web. medio desde el último reinicio,el mostrado en la mientras que el segundo es másFigura 1. Estadísticas E/S interesante para Nagios, ya que La herramienta Si situamos el agrega el rendimiento por segundoen software libre script de agente mientras se está ejecutando. LaNagios es perfecta iostat.cgi (Listado columna %idle nos indica el tiempopara este tipo de 1) en el directorio que ha estado disponible la CPU, ymonitorización. Los CGI del servidor iowait mide cuánto ha tenido quedesarrolladores dis- Web que queremos esperar la CPU al disco duro. Desdeponen de una gran investigar, nos será el punto de vista del consumidor lolista de plugins en de gran ayuda. El más deseable es un valor alto de[2]. Los plugins pue- script se activa con %idle y un valor bajo de %iowait.den ayudarnos a una petición HTTP, El script iostat.cgi del Listado 1 leemonitorizar páginas llama al comando la salida de iostat y descarta el pri-Web, bases de iostat de Linux, y mer conjunto de valores medidos.datos, redes y envía algunos Para ello, usa la expresión regular $RE{num}{real} del repositorio Regexp::Common para analizar los valores numéricos. A continuación Tabla 1: Valores de salida Valor de Texto Significado salida 0 OK Todo correcto 1 WARNING Problema en servicio 2 CRITICAL Problema en servicio crítico 3 UNKNOWN Problema con el plugin54 Número 20 WWW.LINUX- MAGAZINE.ES
    • Perl • DESARROLLO La configuración define service de la Figura 4 define el nuevo servicio Iostat. Se construye en base a la plantillas use ez-service, que defini- mos anteriormente, y acepta varios parámetros para ejecutar tests, noti- ficaciones por email y muchas otras cosas. Estas configuraciones de plantilla se heredan luego por la definición de servicio y pueden ser anuladas en caso necesario. Algunas configuraciones y sus significados: la entrada notification_interval 0 evita que Nagios envíe múltiples emails para reportar un único pro- blema. Los administradores pueden fijar normal_check_interval para especificar el intervalo entre tests de servicio, en minutos, y max_check_attempts para especificar qué número de tests permitimos queFigura 1: Esta página resumen de Nagios nos muestra que los tests locales han sido fallen antes de que nos lo notifiquecompletados con éxito, pero que el router y todo lo que está más allá, están inaccesibles. Nagios. service_notification_options especifica qué cambios en el estadode la cabecera HTTP obligatoria, check_iostat -url= U de Nagios se nos deben notificar condevuelve una cadena tal que user http://server/cgi/iostat.cgi un mensaje. La opción w se refiere a2.99 nice 0.00 sys 0.00 iowait 0.00 un aviso, u para desconocido, c deidle 96.52. La llamada declaración el plugin devuelve las siguientes crítico y r de recuperación. Un prin-de anchura cero, G (línea 20), evita líneas de salida: cipio similar se aplica aque el motor de expresiones regula- host_notification_options: ademásres vuelva atrás al comienzo del IOSTAT OK - user 2.99 U de unknown y recovery, nos permitetexto en cada ocasión y le indica que nice 0.00 sys 0.00 la opción d para caído.continúe la búsqueda tras la última iowait 0.00 idle 96.52coincidencia. El Servidor Solitario Más tarde Nagios llamará al plugin Si el servidor Nagios está aislado delCarga Límite de esta manera, interpretará los resto del mundo debido a un fallo enEn la parte de Nagios, el plugin del valores de salida y mostrará el texto la red, obviamente no vamos a reci-Listado 2 hace uso de LWP::Simple resultante del plugin en stdout. bir ningún email a través depara llamar al script CGI que acaba- Nótese que Nagios::Clientstatus Internet. En este caso, el administra-mos de ver en el servidor, captura la requiere la versión 2.35 o superior dor recibe al menos un email delínea de salida y ejecuta split para de Getopt::Long. recuperación tan pronto como sedividir la salida en campos para haya arreglado el problema. Nagiosguardarlos en el hash %values. Si la Integrar el Plugin soporta también administradores dedisponibilidad de la CPU es menor Para añadir el nuevo plugin a la insta- eventos para definir acciones quedel 50%, el plugin reporta un estado lación de Nagios, el administrador llevar a cabo al detectar un error. Elcrítico. Para valores menores al 80% debe copiar el script check_iostat al sistema puede solucionar problemassólo muestra un aviso. Se aplica el directorio /usr/local/nagios/libexec y de manera autónoma sin la interven-mismo principio al valor iowait, darle permisos de ejecución. En la ción de un administrador.pero los valores umbral son del 10 y Figura 4 se añade una plantilla deno- Con Nagios 2.0, un servicio siem-20 por ciento en este caso. minada ez-service a la configuración de pre se mapea a un host al que se le El módulo Nagios::Clientstatus de Nagios. Esto hace más sencillo añadir comprueba la disponibilidad inde-CPAN descarga algo de trabajo del más servicios posteriormente. En las pendientemente. Las especificacionesplugin al verificar si éste ha pasado configuraciones de Nagios es una del host requieren entradas en eltodos los parámetros requeridos. El práctica común definir plantillas, que archivo de configuración. La líneamétodo exitvalue también entiende se identifican con facilidad por sus host_name dreamhost en lacadenas como warning, más que el entradas register 0. Las definiciones de configuración del ejemplo define elvalor numérico 1 del mundo de los servicios pueden usarse más tarde nombre del host, al que nos vamos aNagios. Si ejecutamos el plugin en para añadir entradas especiales a las referir más tarde en la página delínea de comandos tecleando: plantillas. visualización de Nagios. WWW.LINUX- MAGAZINE.ES Número 20 55
    • DESARROLLO • Perl específicos. En el clásico estilo de plugins de Nagios, acepta parámetros en línea de comandos para los valores umbral. Si realizamos la llamada: check_temperature -warn=30 U -crit=35 -dsname=Inside Listado 2: check_iostat 01 #!/usr/bin/perl 02 ############################## 03 use strict; 04 use LWP::Simple; 05 use Log::Log4perl qw(:easy); 06 use Nagios::Clientstatus; 07 08 my $version = “0.01”; 09 my $ncli =Figura 2: Nagios nos muestra un gráfico para indicarnos con qué frecuencia ha sido imposible Nagios::Clientstatus->new(acceder a un sistema. 10 help_subref => 11 sub { print “usage: $0 El parámetro de definición de comandos a ejecutar. La línea urln” },servicio check_command especifica check_command puede tomar 12 version =>cómo realizar la llamada al plugin argumentos opcionales, que pasa a $version,check_iostat. Sin embargo, la continuación a la definición del 13 mandatory_args => [ “url”llamada no se realiza directamente comando. Separada por un signo de ],en la definición del servicio. En su exclamación, la URL de la línea 14 );lugar, usa un comando configurado check_command se pasa a la 15anteriormente por define command definición del comando iostat y 16 my $url =para especificar la línea de reemplaza al parámetro de $ncli->get_given_arg(“url”); sustitución $ARG1$. 17 Listado 1: iostat.cgi El valor 24x7 de check_period y 18 my $data = get $url; notification_period requiere configu- 19 01 #!/usr/bin/perl -w raciones para definir la dirección de 20 unless($data) { 02 use strict; email del administrador y la disponi- 21 print “Failed to get 03 use Sysadm::Install qw(:all); bilidad. Podemos encontrar un $urln”; 04 archivo de ejemplo llamado ezna- 22 exit 05 use CGI qw(:all); gios.cfg en [1], y añadir una línea tal $ncli->exitvalue(“unknown”); 06 use Regexp::Common; que: 23 } 07 use Sysadm::Install qw(:all); 24 08 cfg_file= U 25 my %values = split ‘ ‘, $data; 09 my($stdout, $stderr, $rc) = /usr/local/nagios/etc/eznagios.cfg 26 10 tap “iostat”, 1, 2; 27 my $status = 11 al archivo de configuración nagios.cfg. Al 28 $values{idle} < 50 ? 12 $stdout =~ mismo tiempo, eznagios.cfg define los “critical” : /avg-cpu.*?avg-cpu/gs; tests de Nagios que nos indican cuanto 29 $values{idle} < 70 ? 13 espacio en disco está ocupado y si el rou- “warning” : 14 print header(); ter y servidor de DNS de nuestro 30 $values{iowait} > 20 ? 15 proveedor están funcionando. “critical” : 16 for my $key (qw(user nice sys 31 $values{iowait} > 10 ? 17 iowait idle)) Calentito, calentito… “warning” : { check_temperature es otro ejemplo claro 32 “ok”; 18 if($stdout =~ de plugin de cosecha propia para Nagios. 33 19 El script (véase el Listado 3) contacta 34 print “IOSTAT “, uc($status), /G.*?($RE{num}{real})/gs) { una base de datos round-robin en busca “ - $datan”; 20 printf “%s %s “, $key, de la medida de temperatura indicada en 35 $1; [3], y nos alerta si la medida más 36 exit 21 } reciente de la temperatura externa o $ncli->exitvalue($status); 22 } interna excede unos umbrales56 Número 20 WWW.LINUX- MAGAZINE.ES
    • Perl • DESARROLLO valores resul- tado y la salida define command { del plugin para command_name distintas confi- check_temper guraciones de ature los parámetros. command_line U De un modo $USER1$/check_temperature U similar al plugin -warn=$ARG1$ -crit=$ARG2$ U Iostat que hemos -dsname=$ARG3$ visto anterior- } mente, la entrada del ser- La sección central de la colorida vicio tabla de la Figura 1 muestra queFigura 3: iostat muestra el tiempo que ha estado la CPU sin utilizar ycuánto ha estado esperando al disco duro. check_command ambas temperaturas son bastante check_tempera- normales: 18.8º C (internos) y 15.9ºse dispara un aviso si la temperatura ture!25!30!Inside pasa los C (externos). Al menos mi aparta-interna sube por encima de los 30º parámetros 25, 30 e “Inside” al mento no está en llamas.centígrados. El umbral crítico es script. La entrada command corres-35º. La Figura 5 muestra varios pondiente es algo como: Listado 3: check_temperature 01 #!/usr/bin/perl -w $i++) { 02 ############################## 33 if($dsnames->[$i] eq 03 use strict; 34 04 use RRDTool::OO; $nc->get_given_arg(“dsname”)) 05 use Getopt::Std; { 06 use Pod::Usage; 35 $temp = $values[$i]; 07 use Nagios::Clientstatus; 36 last; 08 37 } 09 my $N = “TEMPERATURE”; 38 } 10 39 } 11 my $nc = 40 Nagios::Clientstatus->new( 41 my $status = “ok”; 12 help_subref => sub { 42 pod2usage() }, 43 if(! defined $temp) { 13 mandatory_args => [qw( 44 $status = “unknown”; 14 crit warn dsname 45 } 15 )], 46 elsif($temp >= 16 ); 47 17 $nc->get_given_arg(“crit”)) { Figura 4: Configuración de Nagios para el 18 my $rrd = RRDTool::OO->new( 48 $status = “critical”; nuevo plugin Iostat. 19 file => 49 } “/tmp/temperature.rrd” ); 50 elsif($temp >= Instalar Nagios 20 51 21 my $dsnames = $nc->get_given_arg(“warn”)) { Creamos un usuario y grupo para $rrd->meta_data(“dsnames”); 52 $status = “warning”; Nagios: 22 53 } adduser nagios 23 $rrd->fetch_start( 54 cd nagios-2.0 24 start => time() - 6*60, 55 printf “$N %s - %s: %sn”, ./configure 25 end => time() 56 uc($status), make all 26 ); 57 Instalamos los ejecutables, los scripts 27 $nc->get_given_arg(“dsname”), CGI y las páginas HTML. Creamos el 28 my $temp; 58 defined $temp ? script de arranque en /etc/rc.d/init.d, y 29 59 sprintf(“%.1f”, $temp) : generamos por último una configu- 30 if(my($time, @values) = 60 “NODATA”; ración de ejemplo: 31 61 make install $rrd->fetch_next()) { 62 exit $nc->exitvalue($status); make install-init 32 for(my $i=0; $i<@$dsnames; make install-config WWW.LINUX- MAGAZINE.ES Número 20 57
    • DESARROLLO • PerlFigura 5: Resultados y valores del plugin de la temperatura con diferentes parámetros en líneade comandos.Instalación Afortunadamente, la distribución nos Figura 6: Configuración del servidor WebEl tarball de la distribución 2.0 de Nagios ofrece una colección de archivos de para Nagios.está disponible en la página Web del ejemplo que podemos editar. Para ello,proyecto [4]. Tras desempaquetarla, simplemente renombramos los archivos Nagios, cgi.cfg, las entradas del Listado 4podemos seguir las instrucciones del .cfg-sample bajo /usr/local/nagios/etc a permitirían a un usuario no autenticadocuadro “Instalar Nagios” para conseguir .cfg. acceder a toda la información y coman-un servidor Nagios operativo. Otro La instalación de Nagios no debería dos de servicio.tarball [2] contiene los plugins estándar ser accesible públicamente a través depara Nagios 2.0. Tenemos que Internet. Puede que queramos usar los Dormir a Pierna Sueltadesempaquetar el tarball en ajustes de la Figura 6 al configurar el ser- Tras realizar todos estos cambios en los/usr/local/nagios/libexec. vidor Web de nuestro Nagios. Tras archivos de configuración, podría ser El principal obstáculo para echar a ejecutar el demonio de Nagios tecleando una buena idea verificar si laandar Nagios es la configuración. Tras /etc/rc.d/init.d/nagios restart (como configuración está libre de errores antesinstalar la herramienta, el administrador root), y enviar una señal HUP al servidor de intentar reiniciar el demonio. Paradebe crear al menos seis(!) archivos de Web, los usuarios autenticados pueden verificar la sintaxis:configuración diferentes. acceder a los datos medidos y las series de reportes en http://localhost/nagios cd /usr/local/nagios (véase Figura 1). bin/nagios -v etc/nagios.cfg Si la página de Nagios está Una buena estrategia de monitoriza- ubicada tras ción, llevada a cabo de manera fiable un firewall, por Nagios, garantiza al administrador y estamos el poder dormir a pierna suelta, a seguros de menos que salten las alarmas, claro. que sólo Siempre será preferible despertarse puede por un aviso de Nagios a nuestro accederse busca que saltar de la cama por un por usuarios usuario malhumorado que nos llama autorizados, en mitad de la noche. I podemos ignorar la autenticación y comentar las líneas Require valid-user. En el archivo de configuración de RECURSOS [1] Listados de este artículo: http://www. Listado 4: Guest Access linux-magazine.es/Magazine/ Downloads/20 01 # cgi.cfg: 02 default_user_name=guest [2] Plugins estándar para Nagios-2.0: http://prdownloads.sourceforge.net/ 03 nagiosplug/nagios-plugins-1.4.2.tar. 04 authorized_for_system_information=nagiosadmin,guest gz 05 authorized_for_configuration_information=nagiosadmin, [3] Michael Schilli, “¿Está que arde?”, 06 authorized_for_all_services=nagiosadmin,guest Número 18 de Linux Magazine edi- 07 authorized_for_all_hosts=nagiosadmin,guest ción en castellano, pag. 46 08 authorized_for_all_service_commands=nagiosadmin,guest [4] Nagios: http://www.nagios.org 09 authorized_for_all_host_commands=nagiosadmin,guest58 Número 20 WWW.LINUX- MAGAZINE.ES