
En primer lugar, me disculpo por esto, soy bastante malo con las expresiones regulares e intento escribir un patrón personalizado (ya que no puedo encontrar algo en el patrón grok existente o tal vez me falta algo) para analizar los registros svn que se encuentran en el formato de
r24|prashant|2015-02-26 12:38:04 -0800 (Thu, 26 Feb 2015)|33|Log: ABC-123 / Initial version||A test/log_testing1 A test/log_testing2 A test/log_testing3 A test/log_testing4 A test/log_testing5 \n
Entonces está en el formato de
$REVISION:$USER ID:$DATE:$CHECKED IN MESSAGE:$FILE CHECKED IN
Entonces escribí un patrón personalizado.
SVN [r0-9]
SVN_TIMESTAMP %{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{HOUR}:?%{MINUTE}(?::?%{SECOND})?%{ISO8601_TIMEZONE}? (%{DAY}, %{MONTHDAY} %{MONTH} %{YEAR})
y mi logstash-conf se vería así para la sección de filtro
filter {
grok {
match => { "message" => "%{SVN:revision}|%{USERNAME:username}|%{SVN_TIMESTAMP:svntimestamp}|%{GREEDYDATA:syslog_message}||%{GREEDYDATA:syslog_message" }
}
}
No estoy seguro de que sea correcto pero, como siempre, no funciona. Cualquier ayuda es realmente apreciada.
Respuesta1
Aquí hay una versión más simple de un patrón que podría ayudarlo a comenzar:
(?<SVN>[0-9]+)\|%{USERNAME:username}\|(?<SVN_TIMESTAMP>[^\|]+)\|%{GREEDYDATA:syslog_message}
En aras de la simplicidad, no utilicé patrones con nombre y la marca de tiempo no es muy específica en absoluto, pero debería ser más fácil de solucionar.
Cosas importantes a tener en cuenta:
- el carácter de barra vertical es un OR lógico en estas expresiones, es necesario utilizar un carácter de escape
- como señaló @tigran: necesita el símbolo más para "uno o más" dígitos en la revisión SVN
- su patrón SVN_TIMESTAMP es muy complejo, pero no parece del todo correcto. Como mínimo, debe eliminar los paréntesis para que coincidan.
Te recomendé que tomaras tus aportes y mi patrón y los pusieras enhttps://grokdebug.herokuapp.com/-- eso le permitirá mejorarlo gradualmente hasta alcanzar lo que realmente necesita.