Tema 8
Tema 8
Herramientas DevOps
Captura de logs y
telemetría mediante
Beats
Índice
Esquema 3
Ideas clave 4
8.1. Introducción y objetivos 4
8.2. Arquitectura y topología de Beats y Logstash 5
© Universidad Internacional de La Rioja (UNIR)
A fondo 23
Test 25
© Universidad Internacional de La Rioja (UNIR)
Herramientas DevOps
Tema 8. Esquema
Esquema
3
Ideas clave
En el tema anterior hemos visto cómo un buen almacén de esta información puede
ser ElasticSearch dadas sus capacidades para ingerir gran cantidad de información y
poder analizarla de forma sencilla y rápida.
En este tema vamos a ver algunas herramientas que podemos usar para resolver este
problema, centrándonos en las más populares y las que más sencillas son de operar
en los casos frecuentes.
Herramientas DevOps
4
Tema 8. Ideas clave
Aprender en detalle Filebeat, la herramienta más frecuente para procesar
ficheros.
En el siguiente vídeo sobre Beats y Logstash: Casos de uso se estudian los casos de
uso para Beats y Logstash, cuando utilizar cada uno y sus principales características.
Los Beats son remitentes de datos de código abierto que se instalan como agentes
en los servidores para enviar datos operativos a ElasticSearch. Beats puede enviar
datos directamente a ElasticSearch o a través de Logstash, donde estos datos se
procesan y mejoran, antes de ser visualizados en Kibana. Beats están escritos en Go
y permiten crear nuevos fácilmente mediante a la librería libbeat.
En la Figura 1 podemos ver cómo es posible usar en la misma solución tanto Beats
como Logstash.
© Universidad Internacional de La Rioja (UNIR)
Herramientas DevOps
5
Tema 8. Ideas clave
Figura 1. Esquema de Elastic Stack con Beats y Logstash. Fuente: [Link].
Si los Beats son utilizados como agentes para recopilar nuestras métricas y son
capaces de enviar datos directamente a ElasticSearch, ¿cuándo debemos usar
Logstash? La respuesta es simple: Logstash permite tratar y normalizar los datos y
soporta muchas fuentes de datos no soportadas por Beats. Por ejemplo, puede leer
Herramientas DevOps
6
Tema 8. Ideas clave
datos de bases de datos que permitan realizar consultas complejas si son necesarias.
A su vez, Logstash permite manipular los datos mucho más lo que permite normalizar
entre distintos tipos de emisores y agentes.
Al ser Beats más livianos en su consumo, esto los hace idóneos para recopilar la
información en los sistemas productivos y Logstash como una forma de consolidar la
información y de leer de sistemas no soportados por Beats.
Ya hemos visto que Beats son remitentes de datos de código abierto que instala como
agentes en sus servidores para enviar datos operativos a ElasticSearch.
Herramientas DevOps
7
Tema 8. Ideas clave
Tabla 1. Tipos de beats según datos.
Estos son solo los Beats oficiales. Existen muchos más Beats desarrollados por la
comunidad y es posible desarrollarlos mediante una librería llamada libbeat en el
lenguaje Go.
Cada tipo de Beats requiere una documentación específica, pero tienen algunos
conceptos comunes que nos ayudarán a entender cómo funciona su configuración.
En Beats, todos los archivos YAML comienzan con un diccionario, una colección
desordenada de pares de nombre / valor. Además de los diccionarios, YAML también
admite listas, números, cadenas y muchos otros tipos de datos. Todos los miembros
de la misma lista o diccionario deben tener el mismo nivel de indentación.
Herramientas DevOps
8
Tema 8. Ideas clave
Los diccionarios están representados por pares key: value simples, todos con el
mismo nivel de indentación. Después de la clave y los dos puntos, debe ir un espacio
seguido del valor.
Las listas se introducen con guiones `-`. Todos los miembros de la lista serán líneas
que comienzan con `-` en el mismo nivel de indentación.
- Rojo
- Verde
- Azul
filebeat:
inputs:
- type: log
paths:
- /var/log/*.log
multiline:
pattern: '^['
match: after
Herramientas DevOps
9
Tema 8. Ideas clave
output:
elasticsearch:
index: 'beat-%{[[Link]]}-%{+[Link]}'
[Link]: 'beat-%{[[Link]]}-%{+[Link]}'
En el caso de listas:
filebeat:
inputs:
- type: log
Se almacena como:
[Link]: log
[Link]:
- type: log
paths: ["/var/log/*.log"]
[Link]: '^['
[Link]: after
[Link]: ["[Link]
© Universidad Internacional de La Rioja (UNIR)
enabled: true
disabled: false
Herramientas DevOps
10
Tema 8. Ideas clave
Como curiosidad, es posible utilizar yes y on como alternativas a true. Y es posible
utilizar no y off como alternativas a false. Esto en ocasiones hace que se lea algo
mejor, pero suele despistar a los que no lo conocen, así que evitad abusar de esto.
integer: 123
negative: -1
float: 5.4
En YAML los strings se soportan cerrados por comillas dobles (“string”), comillas
simples (‘string’) y sin poner comillas. Las comillas dobles permiten escapar
caracteres mediante la barra invertida: \. Es necesario tener cuidado si no utilizamos
comillas de que el texto no haga conflicto con ningún otro significado en YAML.
Es posible especificar duraciones con las siguientes unidades: ns, us, ms, s, m, h.
duration1: 2.5s
duration2: 6h
duration_disabled: -1s
Por último, es posible referenciar otras variables mediante los strings formateados
(sprintf). Se accede mediante “%{acceso:valor por defecto}”. Para acceder a campos
usamos “[campo]”. Es posible formatear los campos de tiempo mediante
“+FORMATO”. Por ejemplo:
© Universidad Internacional de La Rioja (UNIR)
Herramientas DevOps
11
Tema 8. Ideas clave
Por último, es posible mostrar un error específico cuando la variable no está presente
como: ${VAR:?texto_de_error}.
[Link]: '${ES_HOST:localhost}'
[Link]:
hosts: ['[Link]
namespace1:
subnamespace:
host: localhost
sleep: 1s
namespace2:
subnamespace:
host: localhost
sleep: 1s
Es posible escribir:
namespace1: ${shared}
namespace2: ${shared}
© Universidad Internacional de La Rioja (UNIR)
shared:
subnamespace:
host: localhost
sleep: 1s
Herramientas DevOps
12
Tema 8. Ideas clave
Esto puede ayudar con los problemas de mantenibilidad evitando que solo una de las
dos configuraciones reciba el cambio.
[Link]:
hosts: ["[Link]
username: username
password: password
[Link]:
enabled: false
hosts: ["[Link]
username: username
password: password
[Link]:
pretty: true
Herramientas DevOps
13
Tema 8. Ideas clave
8.4. Filebeat
Así es como funciona Filebeat: cuando inicia Filebeat, inicia una o más entradas que
se leen en las ubicaciones que ha especificado. Para cada fichero o registro que
Filebeat localiza, Filebeat inicia un recolector. Cada recolector lee el contenido nuevo
de un único log y envía los nuevos datos de registro a libbeat, que agrega los eventos
y envía los datos agregados a la salida que ha configurado para Filebeat.
© Universidad Internacional de La Rioja (UNIR)
Herramientas DevOps
14
Tema 8. Ideas clave
Filebeat consta de dos componentes principales: entradas y recolectores. Estos
componentes trabajan juntos para crear una cola de registros y enviar datos de
eventos a la salida que especifique.
Herramientas DevOps
15
Tema 8. Ideas clave
Si el tipo de entrada es log, la entrada encuentra todos los archivos en la unidad que
coinciden con las rutas globales establecidas e inicia una cosechadora para cada
archivo. Cada entrada se ejecuta en su propia rutina Go.
El siguiente ejemplo configura Filebeat para recolectar líneas de todos los archivos
de registro que coinciden con los patrones globales especificados:
[Link]:
- type: log
paths:
- /var/log/*.log
- /var/path2/*.log
Filebeat actualmente admite varios tipos de entrada o input. Cada tipo de entrada
se puede definir varias veces. La entrada de log verifica cada archivo para ver si es
necesario iniciar un recolector, si ya se está ejecutando o si se puede ignorar el
archivo (ver ignore_older). Las nuevas líneas solo se recogen si el tamaño del archivo
ha cambiado desde que se cerró el recolector.
archivos tan pronto como la salida vuelva a estar disponible. Mientras Filebeat se está
ejecutando, la información de estado también se guarda en la memoria para cada
entrada. Cuando se reinicia Filebeat, los datos del archivo de registro se utilizan para
reconstruir el estado, y Filebeat continúa cada recolector en la última posición
conocida.
Herramientas DevOps
16
Tema 8. Ideas clave
Para cada entrada, Filebeat mantiene un estado de cada archivo que encuentra.
Debido a que los archivos se pueden renombrar o mover, el nombre de archivo y la
ruta no son suficientes para identificar un archivo. Para cada archivo, Filebeat
almacena identificadores únicos para detectar si un archivo se cosechó
anteriormente.
Si su caso de uso implica la creación de una gran cantidad de archivos nuevos todos
los días, es posible que el archivo de registro sea demasiado grande. Esto no es un
problema salvo con programas que creen muchos ficheros de logs diversos por
cliente y casuísticas similares. Hay soluciones a este problema si lo encontramos, pero
no es frecuentes durante la monitorización de servidores.
evento se envíe al menos una vez, pero puede terminar con eventos duplicados que
se envían a la salida. Puede configurar Filebeat para esperar una cantidad de tiempo
específica antes de apagarse configurando la opción de shutdown_timeout.
Herramientas DevOps
17
Tema 8. Ideas clave
Existe una limitación para la garantía de entrega de Filebeat al menos una vez que
implica la rotación de logs y la eliminación de archivos antiguos. Si los archivos de
registro se escriben en el disco y giran más rápido de lo que Filebeat puede procesar,
o si los archivos se eliminan mientras la salida no está disponible, los datos podrían
perderse. En general, esto es improbable y ocurre solo cuando tenemos una gran
cantidad de archivos rotando o cuando la salida está rota durante un tiempo y
reiniciamos Filebeat repetidamente durante ese período.
La primera de las secciones es la de inputs. Los inputs son una lista de diferentes
configuraciones que vamos a leer desde Filebeat. Por ejemplo:
© Universidad Internacional de La Rioja (UNIR)
[Link]:
- type: log
enabled: true
paths:
- /var/log/*.log
Herramientas DevOps
18
Tema 8. Ideas clave
#- c:\programdata\elasticsearch\logs\*
Una opción muy potente es unir líneas consecutivas. Hasta el momento todo el
análisis se ha realizado línea a línea. Pero hay ocasiones en que varias líneas
pertenecen al mismo evento. Para esto es necesario utilizar la opción multiline y
configurarla para que el tipo de patrón nos permita juntar las líneas cuando sean
parte del mismo evento. El ejemplo más clásico de esto son las trazas de excepción,
que frecuentemente se detallan con varias líneas, por ejemplo:
Herramientas DevOps
19
Tema 8. Ideas clave
Se podría analizar como un único evento mediante:
[Link]: '^\['
[Link]: true
[Link]: after
También es muy útil utilizar la opción fields o campos, que permite incluir campos
adicionales a cada línea.
Azure eventhub.
Cloud Foundry.
Container.
Docker.
Google Pub/Sub.
HTTP JSON.
Kafka.
MQTT.
© Universidad Internacional de La Rioja (UNIR)
NetFlow.
Redis.
s3.
Herramientas DevOps
20
Tema 8. Ideas clave
Stdin.
Syslog.
TCP.
UDP.
8.5. Conclusiones
Con este conocimiento, podemos extraer los datos operacionales de gran variedad
de sistemas, incluyendo su consumo de recursos, sus logs operacionales y otras
métricas avanzadas.
© Universidad Internacional de La Rioja (UNIR)
Todos estos datos pueden ser enviados a ElasticSearch para su posterior consumo y
procesamiento.
Herramientas DevOps
21
Tema 8. Ideas clave
El siguiente paso es analizar esos datos de ElasticSearch para hacerlo más fáciles de
consumir. Veremos cómo en el siguiente tema.
Herramientas DevOps
22
Tema 8. Ideas clave
A fondo
¿Cómo afinar la performance de Beats?
Hasan, I. (2018, 31 julio). How to Tune Elastic Beats Performance: A Practical Example
with Batch Size, Worker Count, and More. Elastic Blog.
[Link]
example-with-batch-size-worker-count-and-more
Logstash
Documentación de Logstash
[Link]
Herramientas DevOps
23
Tema 8. A fondo
Prometheus
Documentación de Prometheus
[Link]
Herramientas DevOps
24
Tema 8. A fondo
Test
1. ¿Cuáles son las principales ventajas de Beats frente a Logstash?
A. Su mejor consumo de recursos y su fácil mantenimiento.
B. Su gran capacidad para procesar los datos en el propio proceso antes de
enviarlos.
C. Su capacidad para enviar a muchos más destinos que Logstash.
D. El estar escritos en Java frente a Go utilizado para Logstash.
3. AuditBeat:
A. C y D son correctas.
B. Permite obtener información de audio.
C. Permite auditar que los ficheros del sistema no han sido modificados.
D. Es frecuentemente utilizado para detectar intrusiones.
Herramientas DevOps
25
Tema 8. Test
5. Los beats se configuran mediante:
A. Una serie de ficheros en disco.
B. Un único fichero YAML.
C. Un único fichero XLM.
D. Un único fichero TOML.
6. El formato YAML:
A. B y C son correctas.
B. La indentación permite hacer más fácil de leer YAML, pero no es considerada
para parsear el formato.
C. Permite expresar todos los tipos de JSON como las listas y los objetos.
D. Es más fácil de leer y escribir por humanos que JSON.
Herramientas DevOps
26
Tema 8. Test
9. Si necesitamos cambiar el valor de una variable sin cambiar el fichero de
configuración:
A. Podemos modificar parte mediante el argumento -e.
B. Si utilizamos el nombre correcto de la variable de entorno podemos cambiar
cualquier valor de configuración.
C. Si utiliza interpolación de variables de entorno, podemos cambiarlo pasando
esa variable de entorno.
D. A y C son correctos.
Herramientas DevOps
27
Tema 8. Test