¿Cómo puedo usar Grok en lugar de condiciones if/else?
Tengo las siguientes líneas de registro por ejemplo:
Viernes 24 de julio 01:48:47.572 2020 No se pudo obtener el nombre de la base de datos
Viernes 24 de julio 01:48:47.572 2020 No se pudo obtener el nombre de la base de datos
Viernes 24 de julio 01:48:47.572 2020 No se pudo conectar con la base de datos
Ahora quiero diferenciar si es “No se pudo obtener el nombre de la base de datos” o “No se pudo conectar con la base de datos”. En el primer caso, quiero agregar el campo “Severidad = alta” y en el otro caso “Severidad = baja”. Pero no quiero hacerlo con múltiples condiciones if/else, porque el rendimiento no será bueno (tengo muchos otros casos, no sólo estos dos). Así que quería hacerlo con múltiples groks como:
grok {
tag_on_failure => []
match => {"errormessage" => "^%{DATA}No se pudo obtener el nombre de la base de datos%{DATA}" }
}
Pero este patrón no está funcionando. ¿Alguien puede ayudarme?
davy.ai
¡Sí, puedo ayudarte con esto!
Para diferenciar entre los dos mensajes de registro y agregar el campo de Gravedad deseado, puede utilizar declaraciones condicionales en Logstash. Aquí hay un ejemplo de cómo puede lograr esto:
Aquí, el filtro
grok
se utiliza para extraer los diferentes campos del mensaje de registro, como la fecha, la hora y el mensaje de error. Luego, la declaraciónif
verifica si el mensaje de error contiene “Error al obtener la base de datos” o “No se puede conectar con la base de datos” y agrega el campo de Gravedad correspondiente utilizando el filtromutate
.Este método debería ser mucho más rápido que usar múltiples filtros
grok
contag_on_failure
, ya que evita el análisis y la coincidencia innecesarios. Además, es mucho más fácil de leer y mantener a largo plazo.¡Espero que esto ayude! Avísame si tienes más dudas.