es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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?

Tags:  , , ,

Answer

  1. Avatar for 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:

    filter {
      grok {
        match => { "message" => "%{DAY:día} %{MONTH:mes} %{MONTHDAY:díadelmes} %{TIME:hora} %{YEAR:año} %{GREEDYDATA:mensajeerror}" }
      }
    
      if "Error al obtener la base de datos" in [mensajeerror] {
        mutate {
          add_field => { "Gravedad" => "alta" }
        }
      } else if "No se puede conectar con la base de datos" in [mensajeerror] {
        mutate {
          add_field => { "Gravedad" => "baja" }
        }
      }
    }
    

    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ón if 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 filtro mutate.

    Este método debería ser mucho más rápido que usar múltiples filtros grok con tag_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.

Comments are closed.