Compartir a través de


Registro con pila elástica

Sugerencia

Este contenido es un extracto del libro electrónico, Arquitectura de aplicaciones .NET nativas de nube para Azure, disponible en .NET Docs o como un PDF descargable gratuito que se puede leer sin conexión.

Miniatura de la portada del libro electrónico

Hay muchas buenas herramientas de registro centralizadas y varían en el costo de las herramientas gratuitas y de código abierto, a opciones más costosas. En muchos casos, las herramientas gratuitas son tan buenas o mejores que las ofertas de pago. Una de estas herramientas es una combinación de tres componentes de código abierto: Elasticsearch, Logstash y Kibana.

En conjunto, estas herramientas se conocen como pila elástica o ELK.

Pila elástica

Elastic Stack es una opción eficaz para recopilar información de un clúster de Kubernetes. Kubernetes admite el envío de registros a un punto de conexión de Elasticsearch y, por lo general, todo lo que necesita para empezar es establecer las variables de entorno como se muestra en la figura 7-5:

KUBE_LOGGING_DESTINATION=elasticsearch
KUBE_ENABLE_NODE_LOGGING=true

Figura 7-5. Variables de configuración para Kubernetes

Este paso instalará Elasticsearch en el clúster con el propósito de enviar todos los registros del clúster a Elasticsearch.

Ejemplo de un panel de Kibana que muestra los resultados de una consulta sobre registros ingeridos desde Kubernetes figura 7-6. Ejemplo de un panel de Kibana que muestra los resultados de una consulta en los registros que se ingieren desde Kubernetes

Para obtener más información sobre la configuración, consulte Configuración del registro (Kibana).

¿Cuáles son las ventajas de Elastic Stack?

Elastic Stack proporciona un registro centralizado de una manera fácil de usar en la nube, escalable y de bajo costo. Tu interfaz de usuario simplifica el análisis de datos para que puedas dedicar tiempo a extraer información de tus datos en lugar de luchar con una interfaz torpe. Admite una amplia variedad de datos de entrada, por lo que, a medida que su aplicación distribuida abarque más y diferentes tipos de servicios, puede seguir alimentando datos de registro y métricas en el sistema. Elastic Stack también admite búsquedas rápidas incluso en grandes conjuntos de datos, lo que permite incluso que las aplicaciones grandes registren datos detallados y puedan tener visibilidad sobre ellos de forma eficaz.

Logstash

El primer componente es Logstash. Esta herramienta se usa para recopilar información de registro de una gran variedad de orígenes diferentes. Por ejemplo, Logstash puede leer registros del disco y también recibir mensajes de bibliotecas de registro como Serilog. Logstash puede realizar algunos filtros y expansión básicos en los registros a medida que llegan. Por ejemplo, si los registros contienen direcciones IP, Logstash se puede configurar para realizar una búsqueda geográfica y obtener un país o región o incluso una ciudad de origen para ese mensaje.

Serilog es una biblioteca de registro para lenguajes .NET, que permite el registro con parámetros. En lugar de generar un mensaje de registro de texto que inserte campos, los parámetros se mantienen separados. Esta biblioteca permite un filtrado y una búsqueda más inteligentes. Aparece una configuración de Serilog de ejemplo para escribir en Logstash en la figura 7-7.

var log = new LoggerConfiguration()
         .WriteTo.Http("http://localhost:8080")
         .CreateLogger();

Figura 7-7. Configuración de Serilog para escribir información de registro directamente en logstash a través de HTTP

Logstash usaría 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. Configuración de Logstash para consumir registros de Serilog

En escenarios en los que no se necesita una manipulación extensa del registro, hay una alternativa a Logstash conocida como 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 Logstash y Beats.

Una vez recopilados los registros por Logstash, debe colocarlos en algún lugar. Aunque Logstash admite muchas salidas diferentes, una de las más emocionantes es Elasticsearch.

Elasticsearch

Elasticsearch es un motor de búsqueda eficaz que puede indexar los registros a medida que llegan. Agiliza las consultas en ejecución en los registros. Elasticsearch puede controlar grandes cantidades de registros y, en casos extremos, se puede escalar horizontalmente entre muchos nodos.

Los mensajes de registro que se han diseñado para contener parámetros o que han tenido parámetros divididos a través del procesamiento de Logstash, se pueden consultar directamente a medida que Elasticsearch conserva esta información.

Una consulta que busca las 10 páginas principales visitadas por jill@example.com, aparece en la figura 7-9.

"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 10 páginas principales visitadas por un usuario

Visualización de información con paneles web de Kibana

El componente final de la pila es Kibana. Esta herramienta se usa para proporcionar visualizaciones interactivas en un panel web. Los paneles pueden ser diseñados incluso por los usuarios que no son técnicos. La mayoría de los datos que residen en el índice de Elasticsearch se pueden incluir en los paneles de Kibana. Los usuarios individuales pueden tener diferentes deseos de panel y Kibana permite esta personalización a través de permitir paneles específicos del usuario.

Instalación de Elastic Stack en Azure

La Elastic Stack se puede instalar en Azure de muchas maneras. Como siempre, es posible aprovisionar máquinas virtuales e instalar Elastic Stack directamente en ellas. Esta opción es preferida por algunos usuarios experimentados, ya que ofrece el mayor grado de personalizació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 de Docker en los que ya se ha configurado Elastic Stack. Estos contenedores se pueden agregar a 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 bien documentado y probado.

Otra opción es una oferta de ELK como servicio anunciada recientemente.

Referencias