SlideShare a Scribd company logo
1 of 5
Download to read offline
DESARROLLO • Perl




Creamos nuestros propios plugins para Nagios


EL VIGILANTE
Podemos crear un plugin en Perl para aprovechar la potencia de la herramienta de monitorización Nagios.

POR MICHAEL SCHILLI



P
        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 y
compañero (definitivamente tecnó-      podemos confeccionar uno que se            usa el código de salida para
fobo) en el despacho contiguo          adapte a nuestras necesidades.             indicarle a Nagios si los valores son
gritando “¡Mi Internet no funciona!”     Sólo por dar un ejemplo, Nagios          correctos o si ha encontrado
Una 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::Install
con 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, y
resolución de problemas es                   nes      de    seguridad,     la     al valor de contador de 2, mide el
mucho más fácil si dispo-                       instalación de Nagios en la       rendimiento de la CPU y de la E/S
nemos de un software que                           máquina local no tiene         del disco duro dos veces por
monitoriza las funciones                            acceso directo a la shell     segundo y genera el resultado de la
críticas y nos muestra                               del lado servidor, pode-     Figura 3.
un amigable resumen                                  mos instalar un agente         El primer test nos da el valor
basado en Web como                                   en la página Web.            medio desde el último reinicio,
el mostrado en la                                                                 mientras que el segundo es más
Figura 1.                                              Estadísticas E/S           interesante para Nagios, ya que
   La   herramienta                                       Si    situamos     el   agrega el rendimiento por segundo
en software libre                                           script de agente      mientras se está ejecutando. La
Nagios es perfecta                                         iostat.cgi (Listado    columna %idle nos indica el tiempo
para este tipo de                                         1) en el directorio     que ha estado disponible la CPU, y
monitorización. Los                                      CGI del servidor         iowait mide cuánto ha tenido que
desarrolladores dis-                                  Web que queremos            esperar la CPU al disco duro. Desde
ponen de una gran                                     investigar, nos será        el punto de vista del consumidor lo
lista 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 lee
monitorizar 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
                                                                                                       plugin




54      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 que
Figura 1: Esta página resumen de Nagios nos muestra que los tests locales han sido           fallen antes de que nos lo notifique
completados 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 estado
de la cabecera HTTP obligatoria,                check_iostat -url= U                         de Nagios se nos deben notificar con
devuelve una cadena tal que user                http://server/cgi/iostat.cgi                 un mensaje. La opción w se refiere a
2.99 nice 0.00 sys 0.00 iowait 0.00                                                          un aviso, u para desconocido, c de
idle 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     a
que el motor de expresiones regula-                                                          host_notification_options: además
res vuelva atrás al comienzo del                IOSTAT OK - user 2.99 U                      de unknown y recovery, nos permite
texto 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.52
coincidencia.                                                                                El Servidor Solitario
                                              Más tarde Nagios llamará al plugin             Si el servidor Nagios está aislado del
Carga Límite                                  de esta manera, interpretará los               resto del mundo debido a un fallo en
En 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 de
para 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 de
línea de salida y ejecuta split para          de Getopt::Long.                               recuperación tan pronto como se
dividir la salida en campos para                                                             haya arreglado el problema. Nagios
guardarlos en el hash %values. Si la          Integrar el Plugin                             soporta también administradores de
disponibilidad de la CPU es menor             Para añadir el nuevo plugin a la insta-        eventos para definir acciones que
del 50%, el plugin reporta un estado          lación de Nagios, el administrador             llevar a cabo al detectar un error. El
crítico. Para valores menores al 80%          debe copiar el script check_iostat al          sistema puede solucionar problemas
só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 especificaciones
plugin al verificar si éste ha pasado         configuraciones de Nagios es una               del host requieren entradas en el
todos los parámetros requeridos. El           práctica común definir plantillas, que         archivo de configuración. La línea
método exitvalue también entiende             se identifican con facilidad por sus           host_name      dreamhost      en    la
cadenas como warning, más que el              entradas register 0. Las definiciones de       configuración del ejemplo define el
valor numérico 1 del mundo de                 los servicios pueden usarse más tarde          nombre del host, al que nos vamos a
Nagios. Si ejecutamos el plugin en            para añadir entradas especiales a las          referir más tarde en la página de
lí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                      15
anteriormente 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     umbrales




56         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 que
Figura 3: iostat muestra el tiempo que ha estado la CPU sin utilizar y
cuá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 • Perl




Figura 5: Resultados y valores del plugin de la temperatura con diferentes parámetros en línea
de comandos.

Instalación
                                                   Afortunadamente, la distribución nos
                                                                                                 Figura 6: Configuración del servidor Web
El 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 4
podemos seguir las instrucciones del            .cfg-sample bajo /usr/local/nagios/etc a         permitirían a un usuario no autenticado
cuadro “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 de
para Nagios 2.0. Tenemos que                    Internet. Puede que queramos usar los            Dormir a Pierna Suelta
desempaquetar          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 la
andar Nagios es la configuración. Tras          /etc/rc.d/init.d/nagios restart (como            configuración está libre de errores antes
instalar la herramienta, el administrador       root), y enviar una señal HUP al servidor        de intentar reiniciar el demonio. Para
debe 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,guest




58         Número 20                                  WWW.LINUX- MAGAZINE.ES

More Related Content

Similar to Perl nagios

ESTIMACION
ESTIMACIONESTIMACION
ESTIMACIONucpr
 
Code Blast 2012 - Node.js
Code Blast 2012 - Node.jsCode Blast 2012 - Node.js
Code Blast 2012 - Node.jsINSIGNIA4U
 
Como monitorear asterisk utilizando nrpe de nagios
Como monitorear asterisk utilizando nrpe de nagiosComo monitorear asterisk utilizando nrpe de nagios
Como monitorear asterisk utilizando nrpe de nagiosGuillermo Henriquez Gonzalez
 
K mparacion de sistemas operativos
K mparacion de sistemas operativosK mparacion de sistemas operativos
K mparacion de sistemas operativosResyOrek Nca Sfk Pad
 
Redes neuronales final
Redes neuronales finalRedes neuronales final
Redes neuronales finalAdán Silva
 
Como monitorear asterisk utilizando nrpe de nagios
Como monitorear asterisk utilizando nrpe de nagiosComo monitorear asterisk utilizando nrpe de nagios
Como monitorear asterisk utilizando nrpe de nagiosMcp Servicios
 
Implementacion de opmanager 10 en windows server 2008 r2
Implementacion de opmanager 10 en windows server 2008 r2Implementacion de opmanager 10 en windows server 2008 r2
Implementacion de opmanager 10 en windows server 2008 r2Andres Ldño
 
Implementacion de opmanager 10 en windows server 2008 r2
Implementacion de opmanager 10 en windows server 2008 r2Implementacion de opmanager 10 en windows server 2008 r2
Implementacion de opmanager 10 en windows server 2008 r2Andres Ldño
 
Cofiguracion de una_red
Cofiguracion de una_redCofiguracion de una_red
Cofiguracion de una_redyoes1053
 
Conferencia Rails: Integracion Continua Y Rails
Conferencia Rails: Integracion Continua Y RailsConferencia Rails: Integracion Continua Y Rails
Conferencia Rails: Integracion Continua Y RailsDavid Calavera
 
Infrastructure as Code
Infrastructure as CodeInfrastructure as Code
Infrastructure as CodeAngel Nuñez
 

Similar to Perl nagios (20)

ESTIMACION
ESTIMACIONESTIMACION
ESTIMACION
 
E1 lab 3_4_2
E1 lab 3_4_2E1 lab 3_4_2
E1 lab 3_4_2
 
PROCESOS EN LINUX. ::: http://leymebamba.com
PROCESOS EN LINUX.   ::: http://leymebamba.comPROCESOS EN LINUX.   ::: http://leymebamba.com
PROCESOS EN LINUX. ::: http://leymebamba.com
 
Code Blast 2012 - Node.js
Code Blast 2012 - Node.jsCode Blast 2012 - Node.js
Code Blast 2012 - Node.js
 
IsmaelPerez_ServiciosDNSyDHCP
IsmaelPerez_ServiciosDNSyDHCPIsmaelPerez_ServiciosDNSyDHCP
IsmaelPerez_ServiciosDNSyDHCP
 
Como monitorear asterisk utilizando nrpe de nagios
Como monitorear asterisk utilizando nrpe de nagiosComo monitorear asterisk utilizando nrpe de nagios
Como monitorear asterisk utilizando nrpe de nagios
 
K mparacion de sistemas operativos
K mparacion de sistemas operativosK mparacion de sistemas operativos
K mparacion de sistemas operativos
 
Redes neuronales final
Redes neuronales finalRedes neuronales final
Redes neuronales final
 
Como monitorear asterisk utilizando nrpe de nagios
Como monitorear asterisk utilizando nrpe de nagiosComo monitorear asterisk utilizando nrpe de nagios
Como monitorear asterisk utilizando nrpe de nagios
 
Implementacion de opmanager 10 en windows server 2008 r2
Implementacion de opmanager 10 en windows server 2008 r2Implementacion de opmanager 10 en windows server 2008 r2
Implementacion de opmanager 10 en windows server 2008 r2
 
Implementacion de opmanager 10 en windows server 2008 r2
Implementacion de opmanager 10 en windows server 2008 r2Implementacion de opmanager 10 en windows server 2008 r2
Implementacion de opmanager 10 en windows server 2008 r2
 
Actividad 7
Actividad 7Actividad 7
Actividad 7
 
Procesos de gestion de redes
Procesos de gestion de redesProcesos de gestion de redes
Procesos de gestion de redes
 
4 y 5
4 y 54 y 5
4 y 5
 
Cofiguracion de una_red
Cofiguracion de una_redCofiguracion de una_red
Cofiguracion de una_red
 
Manual bdd
Manual bddManual bdd
Manual bdd
 
Estimación temprana de proyectos software #pmot #pmlat @iprocuratio
Estimación temprana de proyectos software #pmot #pmlat @iprocuratioEstimación temprana de proyectos software #pmot #pmlat @iprocuratio
Estimación temprana de proyectos software #pmot #pmlat @iprocuratio
 
Conferencia Rails: Integracion Continua Y Rails
Conferencia Rails: Integracion Continua Y RailsConferencia Rails: Integracion Continua Y Rails
Conferencia Rails: Integracion Continua Y Rails
 
Laboratorio 4 1 introping
Laboratorio 4 1 intropingLaboratorio 4 1 introping
Laboratorio 4 1 introping
 
Infrastructure as Code
Infrastructure as CodeInfrastructure as Code
Infrastructure as Code
 

Perl nagios

  • 1. DESARROLLO • Perl Creamos nuestros propios plugins para Nagios EL VIGILANTE Podemos crear un plugin en Perl para aprovechar la potencia de la herramienta de monitorización Nagios. POR MICHAEL SCHILLI P 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 y compañero (definitivamente tecnó- podemos confeccionar uno que se usa el código de salida para fobo) en el despacho contiguo adapte a nuestras necesidades. indicarle a Nagios si los valores son gritando “¡Mi Internet no funciona!” Sólo por dar un ejemplo, Nagios correctos o si ha encontrado Una 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::Install con 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, y resolución de problemas es nes de seguridad, la al valor de contador de 2, mide el mucho más fácil si dispo- instalación de Nagios en la rendimiento de la CPU y de la E/S nemos de un software que máquina local no tiene del disco duro dos veces por monitoriza las funciones acceso directo a la shell segundo y genera el resultado de la críticas y nos muestra del lado servidor, pode- Figura 3. un amigable resumen mos instalar un agente El primer test nos da el valor basado en Web como en la página Web. medio desde el último reinicio, el mostrado en la mientras que el segundo es más Figura 1. Estadísticas E/S interesante para Nagios, ya que La herramienta Si situamos el agrega el rendimiento por segundo en software libre script de agente mientras se está ejecutando. La Nagios es perfecta iostat.cgi (Listado columna %idle nos indica el tiempo para este tipo de 1) en el directorio que ha estado disponible la CPU, y monitorización. Los CGI del servidor iowait mide cuánto ha tenido que desarrolladores dis- Web que queremos esperar la CPU al disco duro. Desde ponen de una gran investigar, nos será el punto de vista del consumidor lo lista 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 lee monitorizar 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 plugin 54 Número 20 WWW.LINUX- MAGAZINE.ES
  • 2. 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 que Figura 1: Esta página resumen de Nagios nos muestra que los tests locales han sido fallen antes de que nos lo notifique completados 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 estado de la cabecera HTTP obligatoria, check_iostat -url= U de Nagios se nos deben notificar con devuelve una cadena tal que user http://server/cgi/iostat.cgi un mensaje. La opción w se refiere a 2.99 nice 0.00 sys 0.00 iowait 0.00 un aviso, u para desconocido, c de idle 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 a que el motor de expresiones regula- host_notification_options: además res vuelva atrás al comienzo del IOSTAT OK - user 2.99 U de unknown y recovery, nos permite texto 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.52 coincidencia. El Servidor Solitario Más tarde Nagios llamará al plugin Si el servidor Nagios está aislado del Carga Límite de esta manera, interpretará los resto del mundo debido a un fallo en En 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 de para 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 de línea de salida y ejecuta split para de Getopt::Long. recuperación tan pronto como se dividir la salida en campos para haya arreglado el problema. Nagios guardarlos en el hash %values. Si la Integrar el Plugin soporta también administradores de disponibilidad de la CPU es menor Para añadir el nuevo plugin a la insta- eventos para definir acciones que del 50%, el plugin reporta un estado lación de Nagios, el administrador llevar a cabo al detectar un error. El crítico. Para valores menores al 80% debe copiar el script check_iostat al sistema puede solucionar problemas só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 especificaciones plugin al verificar si éste ha pasado configuraciones de Nagios es una del host requieren entradas en el todos los parámetros requeridos. El práctica común definir plantillas, que archivo de configuración. La línea método exitvalue también entiende se identifican con facilidad por sus host_name dreamhost en la cadenas como warning, más que el entradas register 0. Las definiciones de configuración del ejemplo define el valor numérico 1 del mundo de los servicios pueden usarse más tarde nombre del host, al que nos vamos a Nagios. Si ejecutamos el plugin en para añadir entradas especiales a las referir más tarde en la página de línea de comandos tecleando: plantillas. visualización de Nagios. WWW.LINUX- MAGAZINE.ES Número 20 55
  • 3. 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 15 anteriormente 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 umbrales 56 Número 20 WWW.LINUX- MAGAZINE.ES
  • 4. 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 que Figura 3: iostat muestra el tiempo que ha estado la CPU sin utilizar y cuá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
  • 5. DESARROLLO • Perl Figura 5: Resultados y valores del plugin de la temperatura con diferentes parámetros en línea de comandos. Instalación Afortunadamente, la distribución nos Figura 6: Configuración del servidor Web El 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 4 podemos seguir las instrucciones del .cfg-sample bajo /usr/local/nagios/etc a permitirían a un usuario no autenticado cuadro “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 de para Nagios 2.0. Tenemos que Internet. Puede que queramos usar los Dormir a Pierna Suelta desempaquetar 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 la andar Nagios es la configuración. Tras /etc/rc.d/init.d/nagios restart (como configuración está libre de errores antes instalar la herramienta, el administrador root), y enviar una señal HUP al servidor de intentar reiniciar el demonio. Para debe 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,guest 58 Número 20 WWW.LINUX- MAGAZINE.ES