Logstash Grok 패턴

Logstash Grok 패턴

우선 이것에 대해 사과드립니다. 저는 정규 표현식에 매우 서툴러서 다음 항목에 있는 svn 로그를 구문 분석하기 위해 사용자 정의 패턴을 작성하려고 합니다(기존 grok 패턴에서 뭔가를 찾을 수 없거나 뭔가 빠졌을 수도 있기 때문입니다). 형식

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

그래서 그것은 다음과 같은 형식이다.

$REVISION:$USER ID:$DATE:$CHECKED IN MESSAGE:$FILE CHECKED IN 

그래서 맞춤 패턴을 작성했습니다.

SVN [r0-9]
SVN_TIMESTAMP %{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{HOUR}:?%{MINUTE}(?::?%{SECOND})?%{ISO8601_TIMEZONE}?  (%{DAY}, %{MONTHDAY} %{MONTH} %{YEAR})

필터 섹션에 대한 내 Logstash-conf는 다음과 같습니다.

filter {
  grok {
  match => { "message" => "%{SVN:revision}|%{USERNAME:username}|%{SVN_TIMESTAMP:svntimestamp}|%{GREEDYDATA:syslog_message}||%{GREEDYDATA:syslog_message" }
}

}

나는 그것이 올바른지 확신하지 못하지만 평소처럼 작동하지 않습니다. 어떤 도움이라도 정말 감사하겠습니다.

답변1

다음은 시작하는 데 도움이 될 수 있는 간단한 버전의 패턴입니다.

(?<SVN>[0-9]+)\|%{USERNAME:username}\|(?<SVN_TIMESTAMP>[^\|]+)\|%{GREEDYDATA:syslog_message}

단순화를 위해 명명된 패턴을 사용하지 않았으며 타임스탬프도 전혀 구체적이지 않지만 수정하기가 더 쉬울 것입니다.

참고할 중요한 사항:

  • 파이프 문자는 이 표현식에서 논리적 OR이므로 이스케이프해야 합니다.
  • @tigran이 지적했듯이 SVN 개정판에서 "하나 이상의" 숫자에는 더하기 기호가 필요합니다.
  • SVN_TIMESTAMP 패턴은 매우 복잡하지만 올바르지 않은 것 같습니다. 일치시키려면 최소한 괄호를 이스케이프 처리해야 합니다.

나는 당신이 입력한 내용과 내 패턴을 가져와서https://grokdebug.herokuapp.com/-- 그러면 실제로 필요한 수준으로 점진적으로 향상될 수 있습니다.

관련 정보