Registro con pila elástica
Sugerencia
Este contenido es un extracto del libro electrónico “Architecting Cloud Native .NET Applications for Azure” (Diseño de la arquitectura de aplicaciones .NET nativas en la nube para Azure), disponible en Documentos de .NET o como un PDF descargable y gratuito que se puede leer sin conexión.
Existen muchas herramientas buenas de registro centralizadas a distintos precios, desde herramientas gratuitas y de código abierto a alternativas más costosas. En muchos casos, las opciones gratuitas son tan buenas o mejores que las de pago. Una de estas herramientas combina tres componentes de código abierto: Elasticsearch, Logstash y Kibana.
La combinación de estas herramientas se conoce como Elastic Stack o pila ELK.
Elastic Stack
Elastic Stack es una opción excelente para recopilar información de un clúster de Kubernetes. Kubernetes admite enviar registros a un punto de conexión de Elasticsearch y en la mayoría, para comenzar solo se necesita establecer las variables de entorno, como se explica en la figura 7-5:
KUBE_LOGGING_DESTINATION=elasticsearch
KUBE_ENABLE_NODE_LOGGING=true
Figura 7-5. Variables de configuración en Kubernetes
En este paso se instalará Elasticsearch en el clúster y le enviará todos los registros del clúster.
Figura 7-6. En el ejemplo de un panel de Kibana se muestran los resultados de una consulta frente a los registros ingeridos de Kubernetes
¿En qué consisten las ventajas de Elastic Stack?
Elastic Stack ofrece un registro centralizado fácil de usar en la nube, escalable y a bajo coste. Su interfaz de usuario simplifica los análisis de datos para que pueda dedicar más tiempo a obtener información a partir de los datos en lugar de lidiar con una interfaz engorrosa. Admite una variedad amplia de entradas para que las aplicaciones distribuidas abarquen más y diferentes tipos de servicio y podrá continuar introduciendo datos de registro y de métricas en el sistema. Elastic Stack también admite búsquedas rápidas, incluso en conjuntos de datos amplios. Las aplicaciones grandes también pueden registrar datos detallados y seguir teniendo visibilidad de forma eficaz.
Logstash
El primer componente es Logstash. Esta herramienta se usa para recopilar información de registro de una amplia variedad de orígenes. Por ejemplo, Logstash puede leer registros de un disco y recibir también mensajes de biblioteca de registros como Serilog. Logstash puede aplicar algunos filtros y expansiones básicos en los registros a medida que llegan. Por ejemplo, si los registros contienen direcciones IP, puede que Logstash se configure para hacer una búsqueda geográfica y obtener el país o región o incluso la ciudad de origen de ese mensaje.
Serilog es una biblioteca de registros para lenguajes .NET con la que se pueden hacer registros con parámetros. En lugar de generar un mensaje de registro de texto que inserta campos, los parámetros se mantienen por separado. Con esta biblioteca son posibles un filtrado y una búsqueda más inteligentes. En la figura 7-7 se puede observar un ejemplo de configuración de Serilog para escribir en Logstash.
var log = new LoggerConfiguration()
.WriteTo.Http("http://localhost:8080")
.CreateLogger();
Figura 7-7. Configuración de Serilog para escribir directamente información de registro en Logstash a través de HTTP
Logstash usa una configuración como la que se muestra en la figura 7-8.
input {
http {
#default host 0.0.0.0:8080
codec => json
}
}
output {
elasticsearch {
hosts => "elasticsearch:9200"
index=>"sales-%{+xxxx.ww}"
}
}
Figura 7-8. Una configuración de Logstash para consumir registros de Serilog
En escenarios donde no es necesaria la manipulación exhaustiva de registros, existe una alternativa a Logstash, llamada Beats. Beats es una familia de herramientas con las que se puede recopilar una amplia variedad de datos desde registros a datos de red e información del tiempo de actividad. Muchas aplicaciones usarán tanto Logstash como Beats.
Una vez que Logstash ha recopilado los registros, es necesario un lugar para colocarlos. Aunque Logstash admite muchas salidas diferentes, una de las más apasionantes es Elasticsearch.
Elasticsearch
Elasticsearch es un motor de búsqueda potente que puede indexar los registros a medida que llegan. Agiliza las consultas en ejecución en los registros. Elasticsearch puede trabajar con cantidades enormes de registros y, en casos extremos, se puede escalar horizontalmente en muchos nodos.
Los mensajes del registro que se han diseñado para contener parámetros o de los que se han separado los parámetros en un procesamiento de Logstash, se pueden consultar directamente a medida que Elasticsearch conserva esta información.
En la Figura 7-9 se puede ver una consulta que busca las diez primeras páginas visitadas por jill@example.com
.
"query": {
"match": {
"user": "jill@example.com"
}
},
"aggregations": {
"top_10_pages": {
"terms": {
"field": "page",
"size": 10
}
}
}
Figura 7-9. Una consulta de Elasticsearch para buscar las diez primeras páginas que un usuario ha visitado
Visualización de información con los paneles web de Kibana
El componente final de la pila es Kibana. Esta herramienta ofrece visualizaciones interactivas en un panel web. Incluso los usuarios sin conocimientos técnicos pueden diseñar los paneles. Se pueden incluir en los paneles de Kibana la mayoría de los datos residentes en el índice de Elasticsearch. Los distintos usuarios pueden buscar distintas cosas en los paneles y con Kibana se pueden personalizar paneles específicos para el usuario.
Instalación de Elastic Stack en Azure
Elastic Stack se puede instalar en Azure de muchas maneras. Como siempre, es posible aprovisionar máquinas virtuales e instalar directamente Elastic Stack en ellas. Puesto que permite el mayor grado de personalización, algunos usuarios experimentados prefieren esta opción. Al implementarse en una infraestructura como servicio, se introduce una sobrecarga de administración significativa que obliga a los usuarios a tomar posesión de todas las tareas asociadas a la infraestructura como servicio como proteger máquinas y mantenerse al día con revisiones.
Una opción con menos sobrecarga es usar uno de los muchos contenedores Docker en el que ya se ha configurado Elastic Stack. Estos contenedores se pueden colocar en un clúster de Kubernetes existente y ejecutarse junto con el código de la aplicación. El contenedor sebp/elk es un contenedor de Elastic Stack que está bien documentado y se ha probado.
Otra opción es una oferta de ELK como servicio que se ha anunciado recientemente.