내 logstash 구성으로 구문 분석하려는 아래 여러 줄 로그가 있습니다.
2020-05-27 11:59:17 ----------------------------------------------------------------------
2020-05-27 11:59:17 Got context
2020-05-27 11:59:17 Raw context:
[email protected]
NAME=abc.def
PAGER=+11111111111111
DATE=2020-05-27
AUTHOR=
COMMENT=
ADDRESS=1.1.1.1
ALIAS=abc.example.com
ATTEMPT=1
2020-05-27 11:59:17 Previous service hard state not known. Allowing all states.
2020-05-27 11:59:17 Computed variables:
URL=abc.example.com
STATE=UP
2020-05-27 11:59:17 Preparing flexible notifications for abc.def
2020-05-27 11:59:17 channel with plugin sms
2020-05-27 11:59:17 - Skipping: set
2020-05-27 11:59:17 channel with plugin plain email
2020-05-27 11:59:20 --------------------------------------------------------------------
이것은 내 logstash 구성입니다.
input {
stdin { }
}
filter {
grok {
match => { "message" => "(?m)%{GREEDYDATA:data}"}
}
if [data] {
mutate {
gsub => [
"data", "^\s*", ""
]
}
mutate {
gsub => ['data', "\n", " "]
}
}
}
output {
stdout { codec => rubydebug }
}
Filebeat 구성 :
multiline.pattern: '^[[:space:]][A-Za-z]* (?m)'
multiline.negate: false
multiline.match: after
내가 달성하고 싶은 것 : 여러 줄 로그는 먼저 여러 줄 패턴과 일치하고 다음과 같은 줄로 분할됩니다.
Message1: 2020-05-27 11:59:17 ----------------------------------------------------------------------
Message2: 2020-05-27 11:59:17 Got context
Message3: 2020-05-27 11:59:17 Raw notification context:
[email protected]
NAME=abc.def
PAGER=+11111111111111
DATE=2020-05-27
AUTHOR=
COMMENT=
ADDRESS=1.1.1.1
ALIAS=abc.example.com
ATTEMPT=1
그런 다음 이러한 로그 행이 구문 분석되면 다시 구분 기호로 분할되고 kv 필터를 사용하여 단일 메시지 번호 3에서 ALIAS = abc.example.com과 같은 각 키 값 쌍을 읽을 수 있습니다.
이것을 달성하는 방법을 조언 해 줄 수 있습니까?
여러 줄 코덱을 사용하여 파일에서 읽을 것을 제안합니다 (표준 입력을 사용하는 경우 필터 섹션에서 정의 할 수도 있음). 각 새 줄에 타임 스탬프 접두사를 사용하여 패턴을 제공합니다.
그런 다음 grok 필터에서 KV 필터 를 사용하여 다음 과 같이 필드와 값을 분할합니다.
input {
file {
path => "C:/work/elastic/logstash-6.5.0/config/test.txt"
start_position => "beginning"
codec => multiline {
pattern => "^%{TIMESTAMP_ISO8601}"
negate => true
what => "previous"
}
}
}
filter {
kv {
field_split => "\r\n"
value_split => "="
source => "message"
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "test"
}
}
Kibana의 결과는 다음과 같습니다.
이:
편집 : 당신은 당신이 공백을 포함한 전체 가치를 보지 못했다고 언급했습니다. 귀하가 제공 한 새로운 STATE로 내 솔루션을 다시 테스트했으며 정상적으로 작동합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다