jueves, 18 de septiembre de 2014

Monitorizar NGINX con Nagios

Nagios es la leche, eso lo tenemos todos claro, pero cada vez que intentas hacer cualquier cosita necesitas bucear entre media docena de ficheros de configuración y, muchas veces sudar, sangre.

Estas son mis notejas para poder monitorizar una instalacion de nginx desde Nagios con el menor dolor posible.

Lo que vamos a monitorizar del nginx es la página de status.  Esta página está disponible al compilar nginx con el módulo ngx_http_stub_status_module.  Para comprobar si está disponible en tu instalación puedes verlo en la información de nginx:
nginx -V 2 | grep -o with-http_stub_status_module
Si está disponible, lo primero es crear una Location nueva en nginx para que sirva dicha página de status.  La ventaja del status page es que no solo compruebas que el servidor está levantado, sino que además te da las conexiones activas y otros valores de rendimiento, por lo que se puede usar para obtener estadísticas y sacar medidas del rendimiento... muy cuco.  Para más info, la documentación oficial:  http://nginx.org/en/docs/http/ngx_http_stub_status_module.html


La location quedaría más o menos así:
   location /nginx_status {
        stub_status on;
        access_log   off;
        allow 172.16.0.0/24;
        deny all;
   }
Comentarios:

  • Deshabilitamos el access_log.  No es necesario, pero se trata de un chequeo periódico, de modo que si no lo deshabilitamos vamos a meter en nuestro log de accesos una entrada cada X minutos.  Nada de vida o muerte, pero tampoco aporta nada y es tan fácil quitarlo...
  • Ponemos una regla de acceso.  En nuestro caso permitimos únicamente el acceso a dicha location desde la subred 172.16.0.0/24.  Se podría poner únicamente la IP del Nagios, pero no es nada recomendable dejarlo abierto.  Cuanto menos información tenga un posible atacante: mejor.

Una vez configurado, se podría acceder a la página de status desde cualquier equipo de la red permitida en la url http://tuservidor.com/nginx_status y verás algo parecido (los valores,obviamente cambiarán) a lo indicado en la página de la documentación oficial:
Active connections: 291
server accepts handled requests
16630948 16630948 31070465
Reading: 6 Writing: 179 Waiting: 106

Vale... ya estamos en marcha.  Ahora vamos con nagios.
Vamos a usar un plugin muy majo llamado check_nginx_status, disponible en github por cortesía del usuario regilero:
https://github.com/regilero/check_nginx_status/

Está escrito en perl y bastante bien documentado.
Lo descargamos en el directorio de plugins, le cambiamos el propietario a root y los permisos:
chown root:root check_nginx_status
chmod 755 chown root:root check_nginx_status
Podéis probarlo a las bravas aquí directamente, pero con un matiz que comentaré al final del post sobre el fichero de históricos

Creamos un host, si no está ya creado, para este servidor que está en la IP 172.16.0.10, llamémosle nginx_server y vamos a usar el template linux-server para ir más rápidos:

define host{
        use                     linux-server
        host_name              nginx_server
        alias                   Servidor NGINX
        address                 172.16.0.10
        }

El plugin tiene muchos parámetros y se puede personalizar un montón.  Nosotros no nos vamos a complicar demasiado.  Creamos el check command:

define command{
        command_name    check_nginx
        command_line    $USER1$/check_nginx_status -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$ $ARG3$
        }
De modo que el primer parámetro será los valores para Warning, el segundo los valores para Critical y el tercero lo dejamos abierto por si queremos incluir algún parámetro adicional.
Con el command definido, definimos el service (usamos el template local-service para ir más rápidos):
define service{
        use                             local-service        
        host_name                        nginx_server
        service_description             NGINX
        check_command                   check_nginx!-1!-1!
        notifications_enabled           0
        }
Aqui hemos puesto los umbrales en -1 de acuerdo con la documentación, porque de momento no queremos levantar alarmas, solo monitorizar.  Si queremos poner valores se pueden especificar los umbrales para conexiones activas, request por segundo o conexiones por segundo separándolos por comas.
Por ejemplo, para lanzar un warning con 10000 conexiones activas, 100 request por segundo y 200 conexiones por segundo y un critical con 20000 conexiones activas, 200 request por segundo y 300 conexiones por segundo pondríamos:
check_command        check_nginx!10000,100,200!20000,200,300!
Ver la documentacion del plugin para más información

Pues ya está todo.  Si reiniciamos nuestro nagios deberíamos ver los checks del servicio... o no.  Porque puede haber varios problemas:

El status devuelve "Service check did not exit properly"
Esto se suele deber a que Nagios tiene un intérprete de perl propio y los scripts no son siempre compatibles con este intérprete, aunque sí funcionen perfectamente con perl.  Si tienes habilitado el ePN (embedded Perl Nagios) es posible que tengas que deshabilitarlo para este script.  Según reza la documentación de Nagios: http://nagios.sourceforge.net/docs/3_0/embeddedperl.html

To tell Nagios to NOT use the embedded Perl interpreter for a particular script, add this line to the Perl script:
# nagios: -epn
Either line must be located within the first 10 lines of a script for Nagios to detect it.
Es decir, editar el script check_nginx_status y añadir al principio del fichero
# nagios: -epn

El status da un error diciendo que no puede escribir en el fichero temporal (unable to write temporary data in bla bla bla)
La típica tontería que se te pasa y se soluciona en 2 segundos.  Si estuviste jugando con el script desde linea de comandos antes de pelearte con la configuración, puede pasar que en esas ejecuciones se haya creado el fichero temporal con el histórico de valores.  Y claro, se crea con los permisos del usuario que lanza el plugin.  Es decir, que el fichero puede ya existir y el servicio, al intentar escribir en él, no tiene suficientes permisos y da un error.
Solución: o cambias el propietario y los permisos del fichero (que está ubicado en /tmp/ por defecto y su nombre es DIR_IP_DEL_HOST_check_nginx_statusMD5_DE_LA_URL) o bien simplemente lo borras y se acabó.  Cuando el Nagios intente de nuevo crear el fichero, no habrá ninguno, de modo que lo creará con los permisos que él necesite.


Bonus!
El fichero que que crea el plugin con los datos históricos del servicio es compatible con PNP4Nagios (https://docs.pnp4nagios.org/) que es (citando su documentacion) un complemento para Nagios que analiza los datos de rendimiento obtenidos por los plugins y los almacena automáticamente en bases de datos RDD.  O dicho de otro modo: saca gráficos de rendimiento muy cucos de los datos que vienen de los plugins.
Si en tu instalación dispones de PNP, el plugin check_nginx_status tiene un template para poder representar gráficamente los datos obtenidos de rendimiento.  Este template está disponible en https://gist.github.com/maethor/8714514



jueves, 19 de febrero de 2009

¿Privacidad? ¿De que? Yo tengo EULA, chaval...

Sony Online Entertainment (en adelante SOE) ha decidido ceder gratuitamente nada mas y nada menos que 60Tb de logs de su juego Everquest 2 a investigadores.

Ars Technica

Para el que no lo sepa, Everquest 2 es un Multiplayer Massive Online Role Playing Game (también llamados MMORPGs para abreviar), es decir un juego de rol totalmente online. Aunque se denomina juego de rol, no es el clásico juego de tablero conocido por todos, realmente yo lo llamaría FPS multiplayer con estética del señor de los anillos y chat integrado.



Pues bien, un servidor lleva meneando su trasero por esos mundos virtuales de Norrath desde el año 2005 en Everquest 2 y con anterioridad Everquest 1 desde año 2000 más o menos. Son bastantes años en los que llegas a conocer y comprender las vicisitudes de los MMORGPs. Es un mundo bastante complejo, con su economia, sus jerarquias, sus normas no escritas... realmente entiendo que resulte objeto de estudio y en anteriores ocasiones ya se han escrito diversos ensayos sobre los paralelismos de la economía de los mundos virtuales y el real o estudios sociológicos de la población jugadora entre otros. La motivación es totalmente comprensible e incluso el fin puede llegar a ser loable, pero como viene pasando ultimamente, el fin ha primado sobre los medios.

Una de esas reglas no escritas es la privacidad de la información. En general, en todos estos años he visto bastante respeto por la intimidad de las personas. Es cierto que se comparte mucha información de la vida real (también conocida como RL), muchas personas acaban convirtiéndose en parejas reales después de conocerse online e incluso hay un fenómeno bastante interesante (gracioso es, desde luego) conocido como Cybering o, expresando en la lengua de Cervantes, decirse cochinadas y ponerse palote chateando.

A parte de la conveniencia y del interes del estudio, SOE ha de ser consciente de que existe mucha interacción en esos 60Tb de logs, mucha información personal, confidencias, etc. Imagínese que una empresa graba todas sus conversaciones de teléfono y decide ofrecerlas de manera altruista a una institución para que realice cualquier tipo de investigación respecto a los usuarios. Inconcebible, ¿verdad? Pues aquí es perfectamente posible, porque uno mismo lo autoriza. Es la temible EULA (End User License Agreement) que hay que aceptar obligatoriamente cada vez que se incia el juego, donde SOE se cubre las espaldas sobre cualquier cosa que pueda ocurrir, regula el tema de licenciamiento y entre otras joyitas se autoriza a SOE para que tome cualquier tipo de dato que suministres consciente o inconscientemente y haga con el lo que le de la santa gana. ¿¿¿Gran Hermano de que???

En fin, a parte de la aberración en cuanto a privacidad, el estudio no deja de proporcionar informacion cuando menos graciosa. Para muestra un boton:
The average age of players turned out to be 31. "These aren't just pasty white teenage boys in a basement—to be sure, they're there, but they're not typical," he said. The older players tended to play more than the kids and, although the total hours played seem large, he said that the time mostly displaced either TV watching or movie going. And the surveys showed that those who viewed TV news in the first place continued to do so, suggesting that gamers really slotted EQ2 into their entertainment time.

Mostly, the gamers seemed healthy; their body mass index was better than the US average and, although they were slightly more depressed than average, they were also less anxious.


Resulta gracioso, habrá cambiado la imagen que todo el mundo tenía del jugador de rol online de esto:




¿A esto?



Aunque lo que más gracia me ha hecho es esta perlita:

Buried among those happy, average players was a small subset of the population—about five percent—who used the game for serious role playing and, according to Williams, "They are psychologically much worse off than the regular players." They belong to marginalized groups, like ethnic and religious minorities and non-heterosexuals, and tended to use the game as a coping mechanism.
O dicho de otra manera... los RolePlayers son unos frikis y unos taraos... ¡Sorpresa!

miércoles, 18 de febrero de 2009

Una de plagios

Veo en la tele el anuncio de Mazda 2, que dinámico, que mono... la música la verdad es que resulta un poco infernal y poco original. Esta "maravilla" musical se le atribuye a un grupo llamado The Noissetes. ¿Cual sería la traducción al castellano? ¿Los ruidosetes? No le va val el nombre, no.

Para aquellos que no coincidan en absoluto con mis gustos musicales les pueden encontrar en Myspace:
http://www.myspace.com/noisettesuk
Me resulta gracioso leer el link "noisettesuk", en mi opinión quedaría mejor "noisettesuck". Incluso el nombre de la canción acompaña: "Don't upset the rhythm" (No disgustes al ritmo)... demasiado tarde chavales :) Pero dejemos a los pobres chicos, que tendrán seguro su público incondicional que de ninguna manera coincidirán conmigo.

En cualquier caso este anuncio tiene algo que me resulta familiar...



A lo mejor es mi retorcida mente trastornada, pero un servidor encuentra numerosos parecidos a cierto videoclip creado por el genio Michel Gondry para los geniales White Stripes. Una canción que hemos podido oir hasta la saciedad y que se ha utilizado incluso como cántico popular para una selección del fútbol.



Aunque, como ya he dicho, lo más probable es que sea fruto de mi personalidad trastornada, porque es bien sabido que los genios publicitarios nunca plagian, sino que "se inspiran". Pues nada, una ración de inpiración al canto.

Presentación

Era cuestión de tiempo.

Después de la anterior tentativa a la blogosfera que desgraciadamente tuve que abandonar, he decidido darle otro tiento. Esta vez intentaré no tocar temas excesivamente personales, pero el gusanillo me pica y tengo ciertas cosas dentro que me gustaría dejar salir.

Como el propio nombre del blog indica, la intención es pura y bienintencionada, únicamente pretendo dejar salir esas cositas que me atormentan cuando veo la tele, cuando voy en metro, paseando por la calle... vamos, lo que viene siendo mis pajillas mentales...

En fin... hágase la luz!