Analizando logs en 5 minutos con ELK

A partir de una idea de Santiago, y tomando como base algunos componentes que los muchachos de MercadoLibre utilizan para su infraestructura de gestión de logs, se me ocurrió hacer una prueba de concepto de a lo que es posible arribar rápidamente utilizando la tríada ElasticSearch + Logstash + Kibana, más conocida com ELK.

Para dar una mínima introducción, diremos que ElasticSearch es un motor de búsqueda RESTful basado en el archiconocido Lucene, Logstash es una especie de concentrador/manipulador/estandarizador de logs provenientes de múltiples fuentes, y Kibana es un visualizador de eventos que corre enteramente en el navegador. Los tres son componentes que pueden utilizarse en forma separada, pero en conjunto aplican precisamente esto de que el todo es más que la suma de las partes. De hecho yo había estado viendo Logstash aparte para una charla sobre logging que diera algunos años atrás, cuando aún era un proyecto incipiente, y ahora me encuentro con que es un proyecto ampliamente utilizado en un montón de lados.

Pero hoy no quiero detenerme demasiado en la teoría; la idea de este post es analizar registros yendo de 0 a 100 en 5 minutos (o lo que tarde en bajar cada aplicación) y para ello nada mejor que arrancar ahora. Así que…

Analizando logs en 5 minutos con ELK

Prerrequisitos

Como prerequisito es necesario el motor de ejecución java 1.6 o 1.7. En distribuciones basadas en debian alcanza con instalar openjdk-6-jre u openjdk-7-jre. O eso creo, a lo mejor es necesario el jdk también; prueben por las dudas. El resto de los pasos se pueden hacer sin necesidad de ser root, como usuario común.

Paso 0. Ubicarnos en un directorio limpio

mkdir elk
cd elk

Paso 1. Obtener logstash

wget -c https://download.elasticsearch.org/logstash/logstash/logstash-1.4.2.tar.gz
tar zxf logstash-1.4.2.tar.gz

Paso 2. Obtener elasticsearch

wget -c https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.1.1.tar.gz
tar zxf elasticsearch-1.1.1.tar.gz

Paso 3. Obtener un log de apache

… de algún lado. Si tienen un apache a mano, cópiense el archivo al directorio actual y dénle permisos de lectura para su usuario

cp /var/log/apache2/access.log access.log
chmod go+r access.log

O si no tienen ninguno a mano, acá les dejo uno que es un fragmento del log de este mismo sitio. Ustedes pueden hacer lo que les plazca con él, total este es un blog personal. Si quieren optar por otra alternativa, google hacking es su amigo y yo no se los recomendé.

wget -c http://maurom.com/files/access.elk.log -O access.log

Paso 4. Iniciar elasticsearch

echo Iniciando Elasticsearch. Aguarde 15s ...
elasticsearch-1.1.1/bin/elasticsearch &
sleep 15

Paso 5. Crear un archivo de configuración para parsear logs de apache

Para ello, creen un archivo de texto llamado logstash-apache.conf en el directorio actual y copien y peguen el siguiente bloque. Luego editen la ruta al archivo de logs, indicándola en forma absoluta, y configuren el tipo de entradas de log y el lenguaje de los meses según corresponda (sino tira unos errores horribles).

input {
  file {
    # apuntar a donde haga falta, con ruta absoluta!
    path => "/home/usuario/elk/access.log"
    # desde donde leer el log ("end" para tomar datos en vivo)
    start_position => beginning
  }
}
filter {
  if [path] =~ "access" {
    mutate { replace => { "type" => "apache_access" } }
    grok {
      # depende del formato de archivo
      match => { "message" => "%{COMBINEDAPACHELOG}" }
      # match => { "message" => "%{COMMONAPACHELOG}" }
    }
    kv {
      # con esto parsea incluso querystrings
      source => "request"
      target => "params"
      field_split => "?&"
    }
  }
  date {
    match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
    # si los meses estan en ingles, u otro lenguaje en tal caso
    locale => "en"
  }
}
output {
  elasticsearch { host => localhost }
  # salida estandar coloreada, util para debug
  #stdout { codec => rubydebug }
}

Todo este archivo tiene su lógica según la documentación de logstash.

Paso 6. Iniciar logstash+kibana con la configuracion dada

echo Iniciando Logstash. Aguarde 15s ...
logstash-1.4.2/bin/logstash -f logstash-apache.conf -- web &
sleep 15

Paso 7. Levantar un navegador web

xdg-open "http://localhost:9292/index.html#/dashboard/file/logstash.json"

Paso 8. Jueguen con los filtros, los gráficos y deléitense con la visualización.

Fíjense de qué epoca son las entradas del log, pues puede que tengan que modificar algunas cosas para que Kibana les encuentre los eventos para esas fechas. Por ejemplo, el log de apache que les pasé solo tiene entradas para el mes de julio de 2014, así que seleccionen ese rango en el filtro de fechas de Kibana.

Acá les dejo algunas capturas de lo que pueden llegar a hacer, que si bien no son de análisis de apache, dan una idea de las posibilidades:

Paso 9. Terminar la tarea

Para cerrar los procesos, matelos sanamente con kill PID a cada proceso java asociado.

Ah, y una mención antes de terminar: cada vez que logstash procesa un archivo, anota hasta donde leyó para no volver a cargar la información, por lo que si están jugando con la configuración van a tener que borrar unos archivos .sincedb_algo que genera en el directorio $HOME del usuario para que vuelva a recorrer el mismo log.

Por último, en este caso estamos parseando son entradas de accesos a un sitio web, pero el combo ELK puede procesar casi cualquier tipo de flujo de eventos, y si bien java mucho no me atrae, todo este paquete vale la pena; piensen cuanto habrían tardado en programar ustedes una interfaz tan flexible y completa…

Como sé que ustedes son tan haraganes como yo, acá tienen todo en un solo script que lo hace de una.

Si se quedaron manija, acá van algunas demos y algo de documentación:

Eso es todo por hoy. Feliz análisis y Felices fiestas!

Oh, la ironía… | Mozilla

mozilla-drm-wtf

Les dejo el aviso de prensa en inglés y en español, la posición de la EFF, y un comentario de Ian Hickson que me pareció interesante.

SUBE no quiere Ubuntu(s)

No hace mucho comentaba en este mismo blog sobre mis dificultades para hallar el listado de viajes realizados en el sistema web de la tarjeta SUBE. Hoy volvemos a tocar este tema a partir de lo descubierto por un gran amigo.

Para (volverlos a) poner en contexto la tarjeta SUBE, o más bien el Sistema Único de Boleto Electrónico, es: “Un servicio para abonar con una sola tarjeta viajes en colectivos, subtes y trenes adheridos, en la Región Metropolitana de Buenos Aires.

Un excelente profesional, con el que tengo el gusto de compartir el trabajo diario, me remitió el siguiente correo:

Una curiosidad. Estando en casa, quise entrar en la página de la tarjeta SUBE para ver los viajes realizados (https://gestiones.sube.gob.ar/bienvenida.aspx), y me encontré con este mensaje de error:

sin-sube-en-ubuntu
No le presté demasiada atención en ese momento (será problema del sitio, me dije a mí mismo). Al día siguiente intenté nuevamente, con idéntico resultado. Pero oh sorpresa, con otro navegador (Chromium en vez de Firefox) sí pude ingresar.

Probé cambiarle el useragent al Firefox ¡y también pude ingresar!
Y luego de un rato llegué a la conclusión de que lo que no le gusta al sitio es la palabra Ubuntu en el useragent del Firefox: quitándola, o reemplazándola por cualquier cosa como Windows, Suse, Debian o incluso la palabra ‘basura’, entra sin dramas.

Y corroboré ese hallazgo cambiando el useragent de chromium, agregándole la palabra Ubuntu. Ejecutando desde la línea de comandos $ chrome –user-agent=”Mozilla/5.0 (X11; Ubuntu; U; Linux i686; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.619.0 Safari/534.16″ tampoco me dejó ingresar.

No contento con lo encontrado, se tomó unos minutos para seguir investigando:

Descubrí algo más. No es la palabra Ubuntu de por sí la que dispara el filtro, ya que lanzando el navegador con –user-agent=”Ubuntu” también deja ingresar a la página para realizar gestiones.

La cuestión parece ser “X11; Ubuntu”

Si uno suprime el X11, o si los cambia de lugar (por ej. “Ubuntu; X11”), también entra.

Ahora bien, ¿me puede explicar alguien qué tiene de malo Ubuntu como para que restrinjan ese sistema operativo en la plataforma del sistema SUBE? Como hemos visto, el error sólo ocurre con Ubuntu, con Debian funciona correctamente.

DROP TABLE IF EXISTS Captcha

Justo a mí me viene a tocar…

captcha-drop-table-users

Como mínimo, espero hayan implementado correctamente la validación de entradas.

Antipatrones de SQL

Así lo describen en el sitio web

Bill Karwin ha ayudado a miles de personas a escribir mejor SQL y construir bases de datos relacionales más fuertes. Ahora él comparte su colección de antipatrones – los errores más comunes que ha identificado en esas miles de peticiones de ayuda.

El libro al que me refiero es “SQL Antipatterns: Avoiding the Pitfalls of Database Programming” y a mi juicio debería ser de lectura obligada para que todo desarrollador que toca bases de datos conozca lo que NO debe hacer. Al menos en mi experiencia, he visto estos antipatrones implementados demasiadas veces.

Estas slides algo viejas, de la MySQL Conference & Expo 2009, les darán una idea de lo que trata el texto:

Sql Antipatterns Strike Back from Karwin Software Solutions LLC

Your browser matters nothing to me

Your browser matters” dicen en Microsoft, porque en un montón de medios salieron a vitorear que publicaron con un sitio web que “analiza la seguridad que nos brinda nuestro navegador web”.

Pfffff… Puro verso. Qué me dicen de esto?

Chromium 6.0 no está mal. Llega a puntuar 4/4 (el máximo) .

Prueben ejecutando:

$ chromium-browser --user-agent="Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)" http://www.yourbrowsermatters.org/

o bien

$ chrome --user-agent="Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)" http://www.yourbrowsermatters.org/

Your browser matters… Mentira, lo único que importa es el User-Agent.

Livepass es una mierda

Me lo venía aguantando… Conocen el sitio de venta de entradas Livepass? No? Qué suerte que tienen! Yo lamentablemente lo conocí cuando intenté comprar entradas para el show de Roger Waters. Como un gran número de gente (llegó a trending topic en Twitter) encontré que no sólo es prácticamente imposible adquirir entradas por Internet, sino que por vía telefónica es más probable hablar con el rey de Francia a que te atienda algún operador de la empresa.

El sitio web se les cae a pedazos… evidentemente no han previsto y/o no tienen la más remota idea de como manejar un pico de tráfico… por si fuera poco está hecho con ASP en IIS, no me extrañaría que el backend sea una base de datos Access 2003… No sólo da time-outs y fallos a mitad de las transacciones; falla hasta el procesador de pagos (NPS, otro responsable del quilombo) incluso luego de haber cargado la tarjeta. Por si fuera barato el “cargo por servicio”, de qué servicio me están hablando?

Y si las caídas frecuentes no son suficiente escarnio, como medida “paliativa” se les ocurrió agregar una demora al ingreso:

Welcome! Por favor aguarde unos instantes, Ud. a ingresado a una sala de espera y sera redireccionado en unos minutos para poder adquirir sus entradas.

Welcome! … Ud ( H)A ingresado … (y la traducción?? y el corrector ortográfico??!!) Además de que la demora no es otra cosa que un meta refresh que actualiza la página cada 20 segundos, es decir, el equivalente a pasársela apretando F5 todo el día, nada de cola de espera por orden de llegada ni un control más efectivo, acá gana el que tiene la latencia más baja y los hue*os más grandes. Si llego a conseguir UNA entrada, obviamente voy al recital con una remera que diga en grande ME CAGO EN LIVEPASS, LA PRÓXIMA VENDAN ENTRADAS PARA CARAMELITO.

Para colmo de males, a la mediatarde surge en twitter un detalle de la página de la empresa. Un video con el título “NO ANDA NADA WANDA NARA” y un enlace al video de Anonymous. Inside joke? I hope so! Pero que oportuno, me deja mucho más tranquilo saber que es una empresa que protege los datos de sus clientes igual que protege a su (paupérrima) infraestructura…

Update: parece que algunos usuarios han encontrado una mejor forma de expresar su cariño. Tienen todo mi apoyo.

Contra esto hay que quejarse. Informen de esta falta de respeto a la gente del show (help@rogerwaters.com / tickets@rogerwaters.com) que responden personalmente y a Defensa del ConsumidorUpdate: también recomiendan publicar su experiencia en tema abierto en el foro del artista e informarse sobre como denunciar estos abusos en Protectora.org.ar. Otro más: los que quieran saber hasta donde llega la estafa, lean este excelente (e indignante a la vez) post en T!.

En resumen, si quieren aprender cómo se hace una venta por internet para el orto, aprendan de Livepass. En el remoto caso de que algún productor de espectáculos llegue a leer este post, por favor le pido encarecidamente que evite contratar a esta empresa de novatos.

PD: me hicieron calentar… y no es que los demás sean mejores eh. He tenido dolores de cabeza similares con TicketPortal, Ticketek, EntradaPlus, y demás… todos tienen sistemas de venta hechos por los amiguitos de mi sobrino de 6 años. Aprendan a laburar, inútiles!

Sobre el bloqueo a leakymails

Hace unos días, Fabio publicó en su blog una buena nota de opinión sobre el bloqueo en Argentina al sitio LeakyMails. Yo que ya venía medio indignado con este tema, aproveché la ocasión para descargarme con el comentario que transcribo, que va a colación de otros sumamente interesantes. Sepan disculpar el auto-bombo…

A ver si alguno me puede aclarar algo… desde mi ignorancia puedo pensar en algunas formas de bloquear un sitio web, Uds. me podrán iluminar con muchas más:

1) bloquear la resolución DNS del nombre de dominio, lo que requiere que todos los servidores DNS de ISP de la Argentina deniegen tal solicitud, por lo que bastaría con apuntar los resolvers a los de OpenDNS u Google (8.8.8.8) para zafar.

2) bloquear el acceso a la dirección IP que hostea el sitio, que fue el *moco* que se mandó Telecom, bloqueando a su vez el acceso a buena parte de blogspot.com y,peor aún, mail-attachment.googleusercontent.com (que es desde donde gmail descarga los adjuntos)… Sí, señora, por eso Ud. no pudo bajar las fotos de su nieta estos días.

3) bloquear el acceso según la URL que aparece en la cabecera HTTP de cada paquete dirigido al puerto 80. Lo que implica que todo ISP de la Argentina tendrá que analizar cada una de las cabeceras de capa de aplicación de cada uno de los paquetillos que pasen por su red, por si registrar los sitios que visitamos y “caparnos” la velocidad no fuera agravio suficiente.

Ahora, y es mi opinión.. hay que ser muy bol^Wignorante para “DECRETAR PREVENTIVAMENTE el bloqueo por parte de los proveedores locales de servicios de Internet en el acceso…” sin tener la menor idea de cómo funciona la red por debajo. Cualquiera de estos métodos es un engorro para todo ISP, además que pueden aparecer mirrors del sitio cada dos días y medio, y así van a seguir jugando al gato y al ratón.

Pero aún así, es mayor el abuso del que estamos siendo víctimas los usuarios finales con este tipo de decisiones chabacanas. Este fallo ya ha sentado precedencia, y de esto a bloquear cualquier otro sitio por el motivo que se le cante a alguno de los del tope de la pirámide hay, lamento decirlo, pocas teclas de distancia.

Fíjense que acá no hablo siquiera del contenido del sitio, que para el caso podría haber sido de correos verdaderos, apócrifos, o de recetas de cocina tailandesa.

Alabanza a la Wikipedia

¿Cómo definir en pocas palabras la inconmensurable fuente, corrijo: apuntador de conocimiento que es nuestra Wikipedia? Y digo nuestra porque no deja de ser de todos. Sin dejar de lado, por cierto, el catalejo que hoy es Internet, pudiendo alcanzar desde nuestra latitud las más lejanas reseñas.

Si es que por recomendación de un amigo comencé leyendo de Osvaldo Bayer, y tal cúmulo de información me permite llegar a “Los vengadores de la patagonia trágica” (más conocida por el film “La Patagonia Rebelde”), a Osvaldo Soriano, o a Rodolfo Walsh, todo en una noche de desvelo.

O posteriormente, desde El Hombre Mediocre, pueda saltar a la reseña biográfica de José Ingenieros, y mismo desde su obra, a Arístipo, a Diógenes Laercio (el historiador), a Diógenes (el más conocido), para luego releer el argumento del mal de Epicuro.

Para los que nos consideramos completos ignorantes, tal es mi caso, ¿qué otra invención más que Internet, y particularmente dentro de ella la Wikipedia, nos posibilita tal alcance?

Te invito a salir de Facebook

facebook

Mauro tiene:
3.141592 amigos
653 fotos
589 notas
79 publicaciones en el muro
31 grupos
Te invito a salir de Facebook

Hola, Lector:

Estoy un poco cansado de que las redes sociales como myspace, facebook, hi5, dadanet, badoo, tagged, sonico y pichuflito utilicen la lista de contactos de mis amigos para autopromocionarse haciendo spam contra todas las direcciones que poseen. No tengo dudas de que si el servicio realmente vale la pena, mi amigo se tomaría el tiempo de invitarme escribiendo y enviandome un mensaje desde su propia cuenta de correo.

Por eso, te pido que me acompañes en esta cruzada para salir de Facebook, o al menos no darle acceso a tu lista de contactos.

Gracias,
Mauro

Para saber como salir de facebook, hacé clic en alguno de los siguientes enlaces:
http://www.malaspalabras.com/me-borre-de-facebook
http://www.lanacion.com.ar/1088028
Mira quién más te ha invitado a Facebook:
Fernandito Puchero
14 cervezas
Martín Cito
Anís 8 hermanos

Copyright © All Rights Reserved · Green Hope Theme by Sivan & schiy · Proudly powered by WordPress