RousselTMLEARNING

Observabilidad

Logstash: los filtros, grok y dissect

Versión escrita de las lecciones en vídeo: los filtros esenciales (mutate, date, json, kv, drop), el plugin grok y sus patrones, dissect y cómo elegir entre ambos.

1. Los filtros #

Transformar los eventos.

Los filtros esenciales #

Línea en bruto, división, date, mutate, documento ECS.
FiltroFunción
mutaterenombrar, convertir, eliminar, añadir campos
daterellenar @timestamp a partir de un campo de fecha
json / kvdecodificar JSON o pares clave=valor
dropeliminar eventos inútiles
fingerprintcalcular un identificador estable
filter {
  json   { source => "message" skip_on_invalid_json => true }
  date   { match => ["time", "ISO8601"] remove_field => ["time"] }
  mutate {
    rename  => { "lvl" => "[log][level]" }
    convert => { "[http][response][status_code]" => "integer" }
  }
  if [url][path] == "/health" { drop {} }
}

2. El plugin grok #

Patrones con nombre.

Principio #

grok asocia expresiones regulares con nombre a campos: %{IP:[source][ip]} captura una dirección IP en source.ip. Se incluyen más de 120 patrones (IP, NUMBER, TIMESTAMP_ISO8601, COMBINEDAPACHELOG…).

# 2026-11-09T10:15:00Z ERROR 203.0.113.7 GET /api/commande 500 132ms
grok {
  match => { "message" => "%{TIMESTAMP_ISO8601:ts} %{LOGLEVEL:[log][level]} %{IP:[source][ip]} %{WORD:[http][request][method]} %{URIPATH:[url][path]} %{NUMBER:[http][response][status_code]:int} %{NUMBER:duree_ms:int}ms" }
}
Buena práctica: Construye tus patrones con el Grok Debugger de Kibana (Dev Tools) y ánclalos (^…$): un patrón sin anclar que falla recorre toda la línea y consume mucha CPU.
Error común: Ignorar la etiqueta _grokparsefailure: las líneas no reconocidas se envían sin estructura y falsean los paneles. Vigílala y envía esos eventos a un data stream aparte.

3. ¿dissect o grok? #

Elegir la herramienta adecuada.

dissect #

dissect divide la línea según delimitadores fijos, sin expresiones regulares: es mucho más rápido, pero no sabe tratar un formato variable.

dissect {
  mapping => { "message" => "%{ts} %{[log][level]} %{[source][ip]} %{[http][request][method]} %{[url][path]} %{[http][response][status_code]} %{duree}" }
}
dissectgrok
Métododelimitadoresexpresiones regulares
Rendimientomuy rápidomás costoso
Formato variablenosí (alternativas, partes opcionales)
Tipadocon mutate o convert_datatypeen el patrón (:int)
Buena práctica: Combina ambos: dissect para la cabecera fija de la línea y grok solo para la parte variable.

Artículos relacionados

Logstash: función, concepto de pipeline e instalación

Versión escrita de las lecciones en vídeo: para qué sirve Logstash, cómo funciona un pipeline (inputs, filtro…

Logstash: las entradas (inputs) y las salidas (outputs)

Versión escrita de las lecciones en vídeo: los inputs habituales (beats, file, tcp/udp, http, kafka, jdbc) y …

Logstash: gestionar los plugins y adoptar Elastic Common Schema (ECS)

Versión escrita de las lecciones en vídeo: listar, instalar, actualizar y empaquetar sin conexión los plugins…

Seguir aprendiendo

Apoyar

♥ APOYAR

Apoya RousselTM Learning

Los cursos, artículos, prácticas y certificados siguen siendo gratuitos y sin publicidad intrusiva. Una contribución libre, por el importe que elijas, financia el alojamiento, los entornos de prácticas y nuevos contenidos.

Contribuir con PayPal Importe libre · tarjeta o cuenta PayPalMás información
QR code PayPal
O escanea este código QR con tu teléfono

¡Gracias, cada contribución cuenta!