Introducci贸n a ELK Stack

    Los productos que creamos a menudo se basan en m煤ltiples servidores web y / o m煤ltiples servidores de bases de datos. En tales casos, a menudo no tenemos herramientas centralizadas para analizar y almacenar registros. En tales circunstancias, identificar diferentes tipos de eventos y correlacionarlos con otros tipos de eventos es una misi贸n casi imposible.

    Una sola condici贸n de excepci贸n, en alg煤n lugar en el medio del sistema, puede ser desastrosa tanto para el usuario final como para el equipo de desarrollo. Un usuario puede terminar viendo una p谩gina en blanco despu茅s de enviar el pago por su servicio, o puede ocurrir una gran p茅rdida de paquetes dentro de su red, lo que puede hacer que un simple trabajo de 10 minutos se convierta en un dolor de cabeza de 10 horas.

    Lo l贸gico ser铆a saber exactamente qu茅 pas贸 y c贸mo evitar que vuelva a suceder. Sin embargo, esto significa extraer registros de m谩quinas individuales, agregarlos para solucionar la desviaci贸n del reloj y unirlos a trav茅s de alg煤n tipo de identificaci贸n de transacci贸n antes de que pueda comenzar a hacer preguntas.

    Todo esto es bajo la condici贸n de que los registros que debe verificar est茅n en la memoria de trabajo de la computadora o cuando cat + grep + xargs no es suficiente para el an谩lisis.

    Hoy en d铆a, la mayor铆a de las infraestructuras de TI se han trasladado a nubes p煤blicas como Servicios web de Amazon, Microsoft Azure, Oc茅ano digitalo Google Cloud.

    Las herramientas de seguridad de la nube p煤blica y las plataformas de registro se convirtieron en plugins necesarios de estos servicios. Aunque son herramientas independientes, se crearon para trabajar juntas.

    Pila de ELK se crea exactamente para tales situaciones.

    驴Qu茅 es ELK Stack?

    ELK significa:

    • ElasticSearch – Se utiliza para b煤squedas profundas y an谩lisis de datos. Es una base de datos NoSQL distribuida de c贸digo abierto, construida en Java y basada en Apache Lucene. Lucene se encarga de almacenar datos de disco, indexar y escanear documentos, mientras que ElasticSearch mantiene actualizaciones de documentos, API y distribuci贸n de documentos entre instancias de ElasticSearch en el mismo cl煤ster.
    • Logstash – Se utiliza para el registro centralizado, el enriquecimiento de registros y el an谩lisis. Es una herramienta ETL (Extract, Transfer, Load) que transforma y almacena registros dentro de ElasticSearch.
    • Kibana – Se utiliza para visualizaciones de datos potentes y hermosas. Es una herramienta basada en web a trav茅s de la cual las bases de datos de ElasticSearch visualizan y analizan datos almacenados previamente.

    Estas tres herramientas son necesarias para el an谩lisis y visualizaci贸n de eventos en el sistema.

    An谩lisis de registros

    El aislamiento del rendimiento es dif铆cil de alcanzar, especialmente cuando los sistemas est谩n muy cargados. Se debe registrar cada evento relevante dentro de su sistema. Es mejor exagerar con el registro que no tener informaci贸n sobre un evento potencialmente problem谩tico.

    Un buen “objetivo” para iniciar sesi贸n en el nivel de la aplicaci贸n es todo lo relacionado con la interacci贸n del usuario con el sistema, ya sea la autorizaci贸n del usuario al sistema o una solicitud del usuario a alguna URL, un correo electr贸nico enviado al usuario, etc. registrar una variedad de informaci贸n, este registro no est谩 estructurado en absoluto, pero debe tener informaci贸n b谩sica para que pueda acceder a 茅l m谩s f谩cilmente.

    El mejor consejo con respecto al inicio de sesi贸n en sistemas distribuidos es “sellar” cualquier evento relevante en la fuente, que se propague de alguna manera a trav茅s del sistema distribuido, ya sea que toque m谩s partes del sistema o no. En el caso de una solicitud de una p谩gina web, por ejemplo, un equilibrador de carga o un servidor web se colocar铆a en dicho “sello”. Este evento sellado se transmite m谩s hasta el final de su vida. Estos “sellos” a menudo se realizan como UUID.

    Esto garantiza que no se pierda la linealidad del evento y que pueda agrupar y vincular eventos; por ejemplo, puede vincular esa solicitud de p谩gina m谩s adelante con la consulta a la base de datos necesaria para que aparezca la p谩gina.

    Logstash

    Cuando el evento se registra en el archivo de registro, Logstash entra en juego. Logstash garantiza que sus entradas se transformen en uno de los formatos de destino admitidos que luego se enviar谩n al servidor ElasticSearch.

    Recopila datos de diferentes fuentes y luego transmite los datos en forma de una canalizaci贸n de procesamiento de datos a la instancia de ElasticSearch.

    Es seguro imaginar ElasticSearch como una base de datos y LogStash como el componente de transmisi贸n que env铆a los registros o archivos.

    El procesamiento de Logstash se lleva a cabo en tres etapas:

    • Entrada – La entrada, adem谩s de un archivo, tambi茅n puede ser un syslog, Rediso Le帽ador (ahora logstash-forwarder). Redis se utiliza a menudo como un intermediario pub / sub en una infraestructura Logstash centralizada, donde los productores de Logstash env铆an sus mensajes y una de las instancias los procesa m谩s.
    • Transformaci贸n y filtrado – Esta etapa se lleva a cabo seg煤n el conjunto de reglas previamente definidas, donde adem谩s, por ejemplo, una transformaci贸n de formato de fecha, tambi茅n se puede registrar la informaci贸n de la direcci贸n IP (ciudad / pa铆s de la IP). El libre MaxMind La base de datos se utiliza para este prop贸sito.
    • Salida – La salida se puede transformar mediante plugins a casi cualquier formato, en nuestro caso ser谩 ElasticSearch.

    Echemos un vistazo a un archivo de configuraci贸n de Logstash y un ejemplo de un registro de aplicaci贸n:

    logstash.conf:

    input {
        file {
            path => ["/var/log/myapp/*.log"]
        }
    }
    
    filter {
        // Collect or process some data (e.g. 'time') as timestamp and
        // store them into @timestamp data.
        // That data will later be used by Kibana.
            
        date {
            match => [ "time" ]
        }
    
         // Adds geolocation data based on the IP address.
        geoip {
            source => "ip"
        }
    }
    
    output {
        elasticsearch {
           hosts => ["localhost:9200"]
        }
        stdout { codec => rubydebug }
    }
    

    Registro de aplicaciones::

    {
        "action": "action log",
        "user": "John",
        "time": 12:12:2012,
        "ip": "192.168....",
        "transaction-id": "r5e1244-32432-1465-q346-6ahsms57081x4"
    }
    

    ElasticSearch

    En el momento en que Logstash finaliza su trabajo y reenv铆a los registros, ElasticSearch ya puede procesar los datos.

    Con lo simple curl mando curl -XGET 'http://192.168.(host ip):9200/_search' puede ver “documentos” en la base de datos.

    192.168.(host ip) es, en este caso, la direcci贸n de boot2docker VMy 9200 es el puerto expuesto predeterminado.

    Dado que el resultado est谩 en formato JSON, sus resultados est谩n listos para su procesamiento posterior. curl -XGET 'http: //192.168.(host ip):9200/_search?hello' devuelve una versi贸n m谩s legible del documento para una r谩pida inspecci贸n. Dependiendo del desarrollo, es una pr谩ctica com煤n registrar la solicitud / respuesta de carga 煤til, el ID de correlaci贸n, etc., para poder rastrear el error a trav茅s del panel de IU de Kibana m谩s adelante.

    Kibana

    Kibana es b谩sicamente un cliente de IU est谩tico (HTML + CSS + JS) que muestra los datos de la forma deseada en la instancia de ElasticSearch, donde ve diferentes informes y an谩lisis. Excepto que a trav茅s de Kibana puedes hacer consultas f谩cilmente sobre 铆ndices de ElasticSearch, la principal ventaja es que para esas consultas, por complicadas que sean, puedes “ordenarlas” en un “tablero” muy transparente y ese “tablero” para guardar y compartir con los dem谩s.

    Kibana viene con un conjunto muy poderoso de herramientas de visualizaci贸n y, por ejemplo, puede ver con qu茅 frecuencia se repite un evento similar a lo largo del tiempo, puede agregar eventos de acuerdo con varios criterios (por ejemplo, cu谩ntas solicitudes provienen de una direcci贸n IP en particular en la 煤ltima hora, si ha aumentado el n煤mero de errores en un servidor en particular, o incluso si ha notado un aumento en el n煤mero de solicitudes para una p谩gina en particular). Adem谩s, esta es una gran herramienta para detectar anomal铆as causadas por cambios en su sistema.

    Probar ELK Stack

    Para poder probar la pila ELK y probar algunos de los comandos que estamos a punto de cubrir, deber谩 instalar ELK y Docker, o boot2docker, localmente.

    Estibador es una herramienta dise帽ada para facilitar la creaci贸n, implementaci贸n y ejecuci贸n de aplicaciones mediante el uso de contenedores.

    Los contenedores permiten al desarrollador empaquetar una aplicaci贸n con todas las partes que necesita, como bibliotecas y otras dependencias, y enviarlo todo como un solo paquete. Este art铆culo no cubrir谩 Docker y boot2docker en detalle; los recursos oficiales son m谩s que excelentes y es muy f谩cil configurar esta combinaci贸n.

    Para el prop贸sito de esta prueba, usaremos Imagen de ELK Docker:

    $ docker pull sebp/elk
    $ docker run -p 5601:5601 -p 9200:9200 -p 5000:5000 -it --name elk sebp/elk
    $ docker exec -it elk /bin/bash
    $ /logstash/bin/logstash -e 'input { stdin { } } output { elasticsearch { host => localhost } }'
    # Now write the message e.g.
    This is a test message.
    CTRL-C
    

    Desde la m谩quina host, usaremos curl:

    $ curl -s -XGET 'http://192.168.(host ip):9200/_search?hello&q=message'
    

    El resultado se ver谩 as铆:

    {
        "took" : 3,
        "timed_out" : false,
        "_shards" : {
            "total" : 6,
            "successful" : 6,
            "failed" : 0
        },
        "hits" : {
            "total" : 1,
            "max_score" : 0.4790727,
            "hits" : [ {
            "_index" : "logstash-2018.08.26",
            "_type" : "logs",
            "_id" : "Z8kCtFYHOWWinjAN6pHUqE",
            "_score" : 0.5720636,
            "_source":{"message":"This is a test message.","@version":"1","@timestamp":"2018-08-26T09:41:17.634Z","host":"5136b631e113"}
            } ]
        }
    }
    

    Como puede ver, nuestra b煤squeda dio como resultado 1 instancia de registro que se nos devolvi贸 en formato JSON.

    ElasticSearch y p茅rdida de datos en particiones de red

    Al igual que con todas las dem谩s herramientas, ELK Stack viene con su propio conjunto de problemas. Durante el a帽o anterior y este a帽o, se han escrito numerosos art铆culos sobre c贸mo ElasticSearch pierde datos debido a la partici贸n de red, incluso si las condiciones de la partici贸n de red duran solo unos segundos.

    aqu铆 Puede encontrar m谩s informaci贸n sobre c贸mo se comporta ElasticSearch durante una partici贸n de red transitiva sin tr谩nsito, as铆 como en la partici贸n de node singular.

    Lo interesante es que incluso las microparticiones pueden causar un retraso de 90 segundos dentro del cual funciona el nuevo l铆der dentro del cl煤ster y todo lo que se insert贸 durante ese cl煤ster puede descartarse potencialmente, por lo que es una buena idea mantener sus registros en el original. formato y no depender al 100% de ElasticSearch, incluso para registros “de misi贸n cr铆tica”.

    Conclusi贸n

    Con esto, solo rascamos la superficie y presentamos un conjunto muy peque帽o de posibilidades del ELK Stack.

    Los problemas resueltos en este art铆culo son el an谩lisis r谩pido y sencillo de logs y la visualizaci贸n de eventos en el sistema, utilizando una interfaz monol铆tica que puede servir de base para una mayor instrumentaci贸n.

    隆Feliz registro!

     

    Etiquetas:

    Deja una respuesta

    Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *