RousselTMLEARNING

TP · Logstash: del descubrimiento a la experiencia

Mi segundo pipeline con corrección

La corrección está integrada en el TP (Ver los recuadros verdes)

Requisitos previos #

Debe haber realizado el taller 'Mi primer pipeline'

Configuración de las entradas #

Debe crear un archivo en /etc/logstash/conf.d llamado "0-input-file-advanced.conf".

  1. Lectura de un archivo

    En este archivo, debe añadir la configuración de logstash para leer el contenido de todos los archivos de log que empiecen por: "/var/log/rousseltm/advanced-".

    Debe añadir un type para este archivo con el valor 'advanced'.
    Este ejemplo de configuración le permitirá leer este archivo:
    root@logstash-formation:/#cat /etc/logstash/conf.d/0-input-file-advanced.conf
    input {
    	file {
    		path => "/var/log/rousseltm/advanced-*.log"
    		"type" => "advanced"
    		codec => multiline {
    			pattern => "^\[%{DAY} %{MONTH} %{MONTHDAY} %{TIME} %{YEAR}\] "
    			negate => true
    			what => "previous"
    		}
    	}
    }
    
    Si observa bien el archivo, verá que de la línea 1 a la línea 8 se trata de la misma línea de log. Por tanto, hay que indicarle a Logstash que es la misma línea. Usaremos un codec de tipo multiline para indicar cómo identificar cada inicio de línea. El parámetro 'pattern' admite grok.

Configuración de los filtros #

Debe crear un segundo archivo llamado "101-filter-advances.conf".

  1. Extracción de datos

    Debe identificar el filtro más adecuado para un archivo plano y establecer la configuración que permita extraer los campos del archivo de log leído previamente, sabiendo que estos archivos contienen varios formatos de log.

    Usaremos un filtro grok, ya que hay varios formatos de log en el mismo archivo. Por tanto, proporcionaremos varios patrones para la configuración grok.

    Además, añadiremos una condición 'if' para que este nuevo filtro solo procese los datos de tipo 'advance'. Deberá revisar su filtro simple para hacer lo mismo.
  2. Cambio de tipo

    Queremos convertir el campo "HTTP_CODE" a entero. De hecho, suele haber operaciones aritméticas sobre este campo al hacer visualizaciones (paneles, alertas...). Por ejemplo, mostrar todos los códigos entre 200 y 205.

    Añadimos un filtro mutate con la opción convert para convertir el campo a entero:
    root@logstash-formation:/# cat /etc/logstash/conf.d/101-filter-advanced.conf
    ...
    	mutate {
    		convert => {"http_code" => "integer" }
    	}
    ...
  3. Eliminación de un campo

    Vamos a eliminar el campo message ya que hemos extraído la información que nos interesa.

    Añadimos un bloque remove_field, lo que nos da en conjunto:
    root@logstash-formation:/# cat /etc/logstash/conf.d/101-filter-advanced.conf
    filter {
    	if [type] == "advanced" {
    		grok {
    			match => {
    				"message" => [
    					"\[(?%{DAY} %{MONTH} %{MONTHDAY} %{TIME} %{YEAR})\] %{DATA} \[%{NUMBER:http_code}\]: %{WORD:http_verb} %{URIPATHPARAM:http_request}%{GREEDYDATA:others}",
    					"\[(?%{DAY} %{MONTH} %{MONTHDAY} %{TIME} %{YEAR})\] %{DATA} %{WORD:status}"
    				]
    			}
    			remove_field => ["message"]
    		}
    		mutate {
    			convert => { "http_code" => "integer" }
    		}
    
    	}
    
    }

Configuración de las salidas #

Debe modificar el archivo "200-output-file-nginx-access".

  1. Escritura en un archivo

    En este archivo, debe actualizar la configuración de logstash para que escriba los logs en el archivo correspondiente a su 'type'

    Esta configuración le permitirá escribir en el archivo de forma dinámica según el tipo de log:
    root@logstash-formation:/# cat 200-output-file
    output {
    	file {
    		path => "/var/log/rousseltm/parsed/%{[type]}.json"
    	}
    }

Nivel de dificultad : ●●●○○ (3/5)

Glossaire de la formation

Observabilidad

La capacidad de conocer el estado interno de un sistema a partir de los datos que emite.Estos datos se clasifican en 3 pilares: logs (registros)métric...

Elastic Common Schema (ECS)

Una especificación de código abierto que permite estructurar sus datos de manera homogénea en el ecosistema Elastic.

Logstash

Motor de recopilación de datos que permite procesar, enriquecer y transformar registros y otros eventos antes de indexarlos.

Access Log (Registro de acceso)

Archivo de registro que guarda las solicitudes procesadas por un servidor web (Apache, Nginx, Lighttpd, etc.). Permite rastrear la actividad del servi...

Client IP (IP del Cliente)

La dirección IP del usuario que realiza la solicitud hacia el servidor web. Cuando un usuario pasa por un Load Balancer o un proxy (ej: Cloudflare), l...

Timestamp (Marca de tiempo)

La fecha y la hora exactas en las que el servidor recibió la solicitud.Configuración: %t en Apache, $time_local o $time_iso8601 en Nginx.

Request (Solicitud)

La línea de solicitud inicial del cliente. Generalmente incluye el método HTTP (ej: GET), la URL solicitada y la versión del protocolo HTTP.Configurac...

Status Code (Código de estado)

El código de estado HTTP final devuelto por el servidor al cliente (ej: 200 para un éxito, 404 para recurso no encontrado).Configuración: %>s en Apach...

Size (Tamaño)

El volumen de datos devuelto al cliente, medido en bytes (generalmente sin los encabezados HTTP).Configuración: %b u %O en Apache, $body_bytes_sent en...

Referrer (Referente)

La URL de la página web desde la que el cliente hizo clic o siguió un enlace para acceder al recurso actual.Configuración: %{Referer}i en Apache, $htt...

User-Agent

La información de identificación proporcionada por el cliente sobre su navegador, su sistema operativo y su dispositivo. Su estructura estándar a menu...

Response Time (Tiempo de respuesta)

El tiempo total que tarda el servidor en procesar la solicitud y devolver la respuesta al cliente.Configuración: %D (microsegundos) o %T (segundos) en...

Articles recommandés

Grafana Alloy: Perfilado Continuo con Pyroscope

Descubra cómo configurar el perfilado continuo (Continuous Profiling) en sus entornos utilizando ...