Logs en Streaming

En Transparent CDN estamos en constante crecimiento y buscando mejoras para todos nuestros clientes, y es por esto que ponemos a disposición de nuestros clientes todos sus logs en tiempo real, lo que supone un análisis mayor de todos sus datos. 

Consumiendo los logs

 

En la actualidad existen multitud de destinos para tus logs, te podría interesar el ingestarlos en un elasticsearch para hacer análitica de datos, o tal vez subirlos a un servicio de terceros como Datadog o Amazon S3, las opciones son casi infinitas y va a depender mucho de tus necesidades de negocio.

Es por esto que, siendo fieles a nuestra filosofia de hacer las cosas lo más simples posible, te vamos a proponer que uses dos herramientas ampliamente utilizadas en la comunidad como son Filebeat o/y Logstash para consumir tus logs de nuestro sistema de Logs en Streaming.

Filebeat vs Logstash

Es muy común, sobre todo para gente que no está familiarizada con este tipo de tecnologías el confundir cuando usar Logstash, cuando usar Filebeat o cuando usarlos juntos que también se puede. Aquí vamos a intentar explicarlo de una manera un poco somera pero lo suficientemente sencilla como para poder tomar una decisión al respecto.

Logstash es un programa escrito en java parte del stack ELK (ElasticSearch – Logstash – Kibana) desarrollado y mantenido por la compañía ElasticSearch.

Filebeat sin embargo está escrito en Go por la misma compañía y surgio como respuesta a una necesidad incipiente de la comunidad de tener una herramienta ligera para transportar logs ya que logstash consume bastante más que Filebeat al estar escrito en java.

Filebeat como digo es un software muy liviano que te permite transportar logs de un sitio a otro, lo mismo que Logstash (este segundo no tan liviano), sin embargo, Logstash es mucho más versatil y potente de Filebeat y te permite consumir logs (Inputs) de un número mayor de sitios y enviarlos también a un número mayor de salidas (Ouputs).

Aquí os dejo los enlaces a los Input y Output de Logstash y Filebeat

Por tanto usar Logstash o Filebeat para sacar los logs de nuestro sistema de Logs en Streaming va a depender de tus necesidades, principalmente de el destino final de los mismos, logs por segundo y si quieres hacer algún tipo de transformación con los mismos.

Resumiendo, nuestra recomendación es que uses Filebeat siempre que puedas ya que es más ligero y fácil de configurar. Si necesitas alguna salida que no está en Filebeat o hacer alguna transformación usa Logstash.

Recuerda que siempre tendrás una tercera opción que también es válida y contemplamos en esta documentación y es que escribas tu propio consumer usando tu lenguaje de programación favorito.

Consumir logs mediante Filebeat

Veamos ahora un despliegue sencillo de Filebeat en un servidor Debian como primera toma de contacto en que vamos a dejar el log en un fichero de texto.

La documentación oficial se puede encontrar en: https://www.elastic.co/es/beats/filebeat

Usemos estos datos de ejemplo:

  • Certificados c83.crt.pem y c83.encrypted.key.pem

  • Contraseña: password

  • Topic: c83

  • Consumer group: c83_0

Primero descargamos e instalamos el paquete de Filebeat en nuestro servidor:

Habilitamos el módulo de kafka:

Editamos la configuración de Filebeat /etc/filebeat/filebeat.yml y dejamos el fichero como muestra a continuación:

A continuación, creamos el directorio para los logs:

En el servidor donde configuremos Filebeat, copiamos la clave pública y privada del certificado así como la CA de Transparent CDN a las rutas indicadas en la configuración, o las que se prefieran usar en este caso, ya que sólo son un ejemplo rápido.

Si todo ha ido bien, podrás ver cómo entran los logs de tus Sitios en /var/log/tcdn_streaming:

Consumer a medida en Python

Se puede programar un consumer en muchos lenguajes distintos, vamos a ver un ejemplo con Python, utilizando el cliente o librería de «confluent-kafka-python» https://github.com/confluentinc/confluent-kafka-python

Otra opción también muy popular es https://github.com/dpkp/kafka-python

Vamos con el ejemplo (nuevamente, usaremos Debian como sistema operativo):

Instalamos los paquetes necesarios:

Creamos el fichero python con el siguiente contenido, la parte importante estaría en el apartado de configuración, edítala para que se ajuste a tus datos:

Nota: en este ejemplo, usamos el Keystore en lugar del par de claves privada y pública, tendrás que copiarlo al servidor donde ejecutes el consumer.

Si todo es correcto, al iniciar el consumer recibirás el siguiente mensaje y empezarás a consumir del topic:
root@server1:~# ./consumer.py
[2020.08.21 09:57:21][INFO] Assigned consumer: <cimpl.Consumer object at 0x7fada8213f28> on partition [TopicPartition{topic=c83,partition=0,offset=-1001,error=None}, TopicPartition{topic=c83,partition=1,offset=-1001,error=None}]