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.

Patrón de grok de Logstash para capturar la primera línea con la cadena “Exception”.

Este es un ejemplo de registro:

2022-01-07 11:05:01,185 [http-nio-8080-exec-526] WARN  de.web.Main| = - Error al ejecutar la solicitud
javax.servlet.ServletException: com.cg.blart.web.HttpInvocationException: Sesión del inquilino no válida
    at com.cg.blume.web.DispatchingServlet.doGet(DispatchingServlet.java:169)
    at de.jinx.lee.web.AutoDBUpgradeDispatchingServlet.lambda$doGet$0(AutoDBUpgradeDispatchingServlet.java:200)
    at de.jinx.lee.web.AutoDBUpgradeDispatchingServlet.addMDCKey(AutoDBUpgradeDispatchingServlet.java:297)
Caused by: com.cg.blume.web.HttpInvocationException: Sesión del inquilino no válida
    at com.cg.blume.web.procedure.HttpSessionManager.get(HttpSessionManager.java:190)
    at de.jinx.lee.web.session.leeHttpSessionManager.get(leeHttpSessionManager.java:76)
    ... 41 más

Hasta ahora, este es el patrón:

^.*?Exception: +%{DATA:exception}$

El resultado que obtengo es cercano, pero no del todo correcto: "com.cg.blart.web.HttpInvocationException: Invalid tenant session". No entiendo cómo hacer que coincida con toda la línea. ¿Puedes mostrarme el camino? El resultado deseado es:

javax.servlet.ServletException: com.cg.blart.web.HttpInvocationException: Invalid tenant session

Aquí tienes un enlace a una herramienta de prueba: https://grokdebug.herokuapp.com/

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para que coincida con la salida deseada, que debe incluir toda la línea, puedes utilizar el siguiente patrón de expresión regular:

    %{TIMESTAMP_ISO8601:timestamp} \[%{DATA:thread}\] %{LOGLEVEL:loglevel} %{DATA:class}\|%{DATA:method}\| - %{GREEDYDATA:message}
    

    Este patrón incluye:

    • %{TIMESTAMP_ISO8601:timestamp} para coincidir con la marca de tiempo en formato ISO8601
    • \[ y \] para escapar los corchetes alrededor del nombre del hilo
    • %{DATA:thread} para coincidir con el nombre del hilo
    • %{LOGLEVEL:loglevel} para coincidir con el nivel de registro (por ejemplo, WARN)
    • %{DATA:class} para coincidir con el nombre de la clase
    • \| para escapar el carácter de tubería
    • %{DATA:method} para coincidir con el nombre del método
    • - para coincidir con el carácter guion
    • %{GREEDYDATA:message} para coincidir con el resto del mensaje de registro

    Utilizando este patrón, la salida para el ejemplo de registro sería:

    {
      "timestamp": "2022-01-07 11:05:01,185",
      "thread": "http-nio-8080-exec-526",
      "loglevel": "WARN",
      "class": "de.web.Main",
      "method": "=",
      "message": "Error while execute Request\njavax.servlet.ServletException: com.cg.blart.web.HttpInvocationException: Invalid tenant session\n\tat com.cg.blume.web.DispatchingServlet.doGet(DispatchingServlet.java:169)\n\tat de.jinx.lee.web.AutoDBUpgradeDispatchingServlet.lambda$doGet$0(AutoDBUpgradeDispatchingServlet.java:200)\n\tat de.jinx.lee.web.AutoDBUpgradeDispatchingServlet.addMDCKey(AutoDBUpgradeDispatchingServlet.java:297)\nCaused by: com.cg.blume.web.HttpInvocationException: Invalid tenant session\n\tat com.cg.blume.web.procedure.HttpSessionManager.get(HttpSessionManager.java:190)\n\tat de.jinx.lee.web.session.leeHttpSessionManager.get(leeHttpSessionManager.java:76)\n\t... 41 more"
    }
    

Comments are closed.