Volver a herramientas

Constructor y Depurador de Patrones Grok

Preguntas frecuentes

¿Qué es Grok y para qué sirve?

Grok es un lenguaje de patrones que permite extraer campos estructurados de logs no estructurados. Forma parte del stack Elastic (Logstash) y es el estándar de facto para parsing de logs. Funciona combinando patrones predefinidos mediante la sintaxis %{PATTERN:field_name}. Ejemplo concreto — Antes (log crudo): 192.168.1.1 GET /index.html 200 1234 Después (JSON estructurado): client: "192.168.1.1", method: "GET", request: "/index.html", status: "200", bytes: "1234" Esto convierte texto plano en datos consultables en Elasticsearch, permitiendo búsquedas, agregaciones y dashboards sobre cada campo.

¿Cómo usar el Constructor Grok?

Escribe o selecciona un patrón Grok en el campo superior usando la sintaxis %{PATTERN:field_name}, por ejemplo %{IP:client_ip}. Luego ingresa texto de prueba en el área inferior y haz clic en "Probar". La herramienta ejecutará el patrón contra tu texto y mostrará los campos extraídos en formato JSON estructurado. Usa el botón "Sample" para cargar un ejemplo predefinido de log Apache. Si el patrón coincide, verás cada campo con su valor; si no, recibirás un mensaje "No coincide" para que ajustes el patrón.

¿Qué patrones Grok están disponibles?

La herramienta incluye más de 20 patrones predefinidos: 🌐 Redes: IP (IPv4/IPv6), IPORHOST, MAC, HOSTNAME, PORT ⏱ Tiempo: TIMESTAMP_ISO8601, SYSLOGTIMESTAMP, HTTPDATE 📝 Texto: WORD, DATA, GREEDYDATA, QUOTEDSTRING, EMAILADDRESS 🔢 Números: NUMBER, INT, BASE10NUM, BASE16NUM ⚙️ Sistemas: SYSLOGBASE, LOGLEVEL, PATH, UNIXPATH, URIPATHPARAM 🔐 Identificadores: UUID, USERNAME Cada patrón puede combinarse y anidarse para construir parsers complejos para diferentes formatos de log.

¿Dónde se usan los patrones Grok?

Los patrones Grok se usan principalmente en tres entornos: 1️⃣ Logstash (filtro grok) — La integración más común. Ejemplo: filter { grok { match => { "message" => "%{COMBINEDAPACHELOG}" } } } 2️⃣ Elasticsearch (ingest pipelines) — Mediante el Grok Processor en pipelines de ingestión. 3️⃣ Fluentd — Mediante fluent-plugin-grok-parser, compatible con sintaxis Logstash. Casos de uso: logs de servidores web (Apache, Nginx), logs de sistema Linux (/var/log/syslog, auth.log), logs de aplicaciones Java, firewalls y bases de datos.

¿Cuál es la diferencia entre Grok y las expresiones regulares?

Grok es una capa de abstracción sobre las expresiones regulares. Mientras que una regex pura requiere escribir patrones complejos desde cero, Grok ofrece patrones predefinidos reutilizables que se combinan de forma legible. Ejemplo — Regex pura para un log Apache: (?:\d{1,3}\.){3}\d{1,3} \S+ \S+ \[\d{2}/\w{3}/\d{4}:\d{2}:\d{2}:\d{2} [+-]\d{4}\] "\w+ \S+ HTTP/\d\.\d" \d{3} \d+ ✅ Grok equivalente: %{IP:client} %{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] "%{WORD:method} %{URIPATHPARAM:request} HTTP/%{NUMBER:httpversion}" %{NUMBER:status} %{NUMBER:bytes} Ventajas: legibilidad, mantenibilidad, más de 120 patrones predefinidos mantenidos por Elastic.

¿Se puede usar Grok con Fluentd?

Sí, Fluentd es compatible con Grok mediante el plugin oficial fluent-plugin-grok-parser. Este plugin permite usar la misma sintaxis de patrones Grok de Logstash dentro de las configuraciones de Fluentd. Ejemplo: <source> @type tail path /var/log/apache/access.log tag apache.access <parse> @type grok grok_pattern %{COMBINEDAPACHELOG} </parse> </source> También soporta múltiples patrones en orden, multilinea con multiline_grok, y patrones personalizados mediante custom_pattern_path.

Ejemplos de patrones Grok

Tres ejemplos prácticos que muestran cómo Grok transforma logs reales en datos estructurados.

Ejemplo 1 — Log de Apache/Nginx

El caso más común: parsear una línea de access log de servidor web.

Input (log crudo)

192.168.1.1 - - [10/Jun/2026:14:30:22 +0000] "GET /index.html HTTP/1.1" 200 1234

Patrón Grok

%{IP:client} %{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] "%{WORD:method} %{URIPATHPARAM:request} HTTP/%{NUMBER:httpversion}" %{NUMBER:status} %{NUMBER:bytes}

Output JSON

{  "client":      "192.168.1.1",
  "ident":       "-",
  "auth":        "-",
  "timestamp":   "10/Jun/2026:14:30:22 +0000",
  "method":      "GET",
  "request":     "/index.html",
  "httpversion": "1.1",
  "status":      "200",
  "bytes":       "1234"
}

Ejemplo 2 — Syslog de Linux

Parsear un mensaje de autenticación del demonio SSH en syslog.

Input (log crudo)

Jun 10 14:30:22 webserver sshd[12345]: Failed password for root from 192.168.1.1 port 22 ssh2

Patrón Grok

%{SYSLOGTIMESTAMP:timestamp} %{SYSLOGHOST:hostname} %{DATA:program}\[%{NUMBER:pid}\]: %{GREEDYDATA:message}

Output JSON

{  "timestamp": "Jun 10 14:30:22",
  "hostname":  "webserver",
  "program":   "sshd",
  "pid":       "12345",
  "message":   "Failed password for root from 192.168.1.1 port 22 ssh2"
}

Ejemplo 3 — Log de aplicación Java

Parsear logs de aplicaciones Java con niveles, hilos y clases.

Input (log crudo)

2026-06-10 14:30:22,456 ERROR [io.netty.handler] (default I/O worker) - Connection reset by peer

Patrón Grok

%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level} \[%{DATA:logger}\] \(%{DATA:thread}\) - %{GREEDYDATA:message}

Output JSON

{  "timestamp": "2026-06-10 14:30:22,456",
  "level":     "ERROR",
  "logger":    "io.netty.handler",
  "thread":    "default I/O worker",
  "message":   "Connection reset by peer"
}