Si estás familiarizado con el stack de ELK sabrás lo potente y versátil que resulta monitorizar cualquier tipo de actividad en cualquier infrastructura gracias a su potente motor de búsqueda Elasticsearch y las muchas posibilidades de personalización representando los datos que ofrece Kibana.
Aunque opcional, la arquitectura recomendada para ELK debe incluir un broker entre los Beats y LogStash (Redis, Kafka o RabbitMQ) para evitar bottlenecks en la recuperación de datos de todos los orígenes que facilitan los beats:
Aunque en entornos cloud disponemos de servicios que nos permiten monitorizar toda la infrastructura, ELK puede aportarnos la flexibilidad necesaria out of the box dependiendo de la estrategia que queramos seguir.
En mi caso, quiero centralizar en una única solución toda la infrastructura PaaS de Azure (inicialmente la información crítica de salud) ya que actualmente la información se distribuye en demasiados servicios independientes ofreciendo diferentes tipos de informaciones (Application Insights, Log Analytics, Azure Monitor, etc).
LogStash dispone de plugins para habilitar la extracción de datos de los principales orígenes en Azure.
Te dejo este enlace donde, además de los plugins, encontrarás varios recursos sobre el tema:
https://github.com/Azure/azure-diagnostics-tools
https://www.elastic.co/es/blog/azure-cloud-monitoring-with-the-elastic-stack
Puedes montar ELK mediante contenedores Docker. Yo inicialmente prefiero empezar por una VM utilizando un Azure Template para contruir una imagen, aunque no descarto que pase a Docker en el futuro.
Te dejo un link interesante donde explican como montar ELK mediante Docker y enviar las trazas con Serilog (mediante una implentación específica de ILoggerFactory) y .NET Core a Event Hub para poder aprovechar la infrastructura y monitorizar desde ELK.
Como punto de partida configuraré LogStash con el plugin de Azure Event Hubs (será nuestro broker), capaz de absorber streamings de millones de eventos por segundo. También puedes añadir los plugins para añadir los inputs de Azure Service Bus y Azure Storage en el pipeline de LogStash.
Crea una imagen certificada por Bitnami en un nuevo Grupo de Recursos
Imagen de Bitnami: https://ms.portal.azure.com/#create/bitnami.elk4-6
Una vez creada, accede al menú Boot Diagnostics->Serial Log y busca en él:
«Setting Bitnami application password to» para conseguir los credenciales de acceso a Kibana.
Conéctate mediante SSH al servidor
ssh user@ip
Inicializa y configura ELK
sudo /opt/bitnami/use_elk
sudo /opt/bitnami/ctlscript.sh stop logstash
logstash-plugin install logstash-input-azureeventhub
Aquí puedes aprovechar para instalar más plugins a LogStash:
Input Azure Service Bus
https://github.com/Azure/azure-diagnostics-tools/tree/master/Logstash/logstash-input-azuretopic
Input Azure Event Hub
https://github.com/Azure/azure-diagnostics-tools/tree/master/Logstash/logstash-input-azureeventhub
Aquí los tienes todos listados:
https://github.com/Azure/azure-diagnostics-tools/tree/master/Logstash
Crea el pipeline de LogStash creando o modificando el archivo mediante nano (puedes utilizar cualquier editor)
sudo nano /opt/bitnami/logstash/conf/access-log.conf
input { azureeventhub { key => "" username => "" namespace => "" eventhub => "" partitions => 4 } } output { elasticsearch { hosts => [ "127.0.0.1:9200" ] } }
Ctrl+O para guardar y Enter para confirmar. Ctrl+X para cerrar el editor.
Puedes crear tantos nodos input como entidades en Event Hub quieras configurar y añadir tantos inputs como necesites en tu configuración.
Establece la configuración del pipeline a LogStash y arranca el servicio con los siguientes comandos:
/opt/bitnami/logstash/bin/logstash -f /opt/bitnami/logstash/conf/ --config.test_and_exit
sudo /opt/bitnami/ctlscript.sh start logstash
Puedes comprobar si se están moviendon los datos desde Event Hub a ElasticSearch:
curl 'localhost:9200/_cat/indices?v'
Ya sólo queda acceder a Kibana desde el browser mediante el user y password comentado en el inicio, configurar el índice logstash-* y a jugar 🙂
http://[ip -server]:5601
Enjoy!