18
내 로그는 다음과 같이 포맷 :Logstash grok 수 여러 메시지
2014-06-19 02:26:05,556 INFO ok
2014-06-19 02:27:05,556 ERROR
message:space exception
at line 85
solution:increase space
remove files
이벤트의 2 종류가 있습니다
-log 같은 여러 라인의 첫 번째
-log 같은 한 줄에 두 번째
한 줄 이벤트를 처리 할 수 있지만 두 번째 형식을 처리 할 수 없습니다. 한 변수에서 메시지를 저장하고 다른 솔루션에서 솔루션을 저장하려고합니다. . 그래서 내가 한 일이다
input {
file {
path => ["logs/*"]
start_position => "beginning"
codec => multiline {
pattern => "^%{TIMESTAMP_ISO8601} "
negate => true
what => previous
}
}
}
filter {
#parsing of one line event
grok {
patterns_dir => "./patterns"
match=>["message","%{TIMESTAMP_ISO8601:timestamp} %{WORD:level} ok"]
}
#the parsing fail, so we assumed we are in multiline events, now I process them and I am stuck when I am getting to the new line.
if "_grokparsefailure" in [tags] {
grok {
patterns_dir => "./patterns"
match=>["message","%{TIMESTAMP_ISO8601:timestamp} %{WORD:level}\r\n"]
}
}
}
, 나는 다음 내 콘솔 출력하고 싶은 :
이
내 설정이다 내가하고 싶습니다{
"@timestamp" => "2014-06-19 00:00:00,000"
"path" => "logs/test.log"
"level"=>"INFO"
},
{
"@timestamp" => "2014-06-19 00:00:00,000"
"path" => "logs/test.log"
"level"=>"ERROR"
"message" => "space exception at line 85"
"solution"=>"increase space remove files"
}
구체적으로 표현식이 하나 또는 여러 행에 있는지 상관없이 두 단어 ("메시지"및 "솔루션"메시지 변수, "솔루션"및 솔루션 변수에 대한 이벤트 끝) 사이의 모든 표현을 가져옵니다.
filter
{
multiline
{
pattern => "^ "
what => "previous"
}
}
이 공백으로 시작하는 라인을 결합합니다 : 당신은 올바르게 multilines을 결합해야
: 당신이 두 가지 문제를 가지고있는 것처럼 사전에
덕분에
방금'메시지 봤어 : (?.를 *) 솔루션 :( *)'?.? 나는 모른다. grok의 개행 문자와 일치하는지 아닌지 -'. * '대신'[. \ r \ n] *'을 넣을 수 있습니다. –
Alcanzar