
우선 이것에 대해 사과드립니다. 저는 정규 표현식에 매우 서툴러서 다음 항목에 있는 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/-- 그러면 실제로 필요한 수준으로 점진적으로 향상될 수 있습니다.