sip = 1.1.1.1 dip = 2.2.2.2 sport = 100 dport = 200 action = permit
sip = 1.1.1.1 dip = 2.2.2.2 sport = 100 dport = 200 action = permit
sip = 1.1.1.1 dip = 2.2.2.2 sport = 100 dport = 200 attack = 10.10.10.10
sip = 1.1.1.1 dip = 2.2.2.2 attack = 10.10.10.10
sip = 1.1.1.1 dip = 2.2.2.2 sport = 100 dport = 200 action = permit
sip = 1.1.1.1 dip = 2.2.2.2 sport = 100 dport = 200 attack = 10.10.10.10
sip = 1.1.1.1 dip = 2.2.2.2 attack = 10.10.10.10
sip = 1.1.1.1 dip = 2.2.2.2 sport = 100 dport = 200 action = permit
sip = 1.1.1.1 dip = 2.2.2.2 sport = 100 dport = 200 attack = 10.10.10.10
sip = 1.1.1.1 dip = 2.2.2.2 attack = 10.10.10.10
문제는 kv 필터가 내부적으로 정규표현식을 사용한다는 것. 성능 저하가 발생할 수 있다는 얘기. 이때 dissect 필터가 대안이 될 수 있다.
input {
file {
path => "D:/test.log"
start_position => "beginning"
sincedb_path => "nul"
}
}
filter {
#kv {}
ruby {
code => "event.set('field_count', event.get('message').split('=').count() - 1)"
}
if [field_count] == 5 {
dissect {
mapping => {
"message" => "%{?1} = %{&1} %{?2} = %{&2} %{?3} = %{&3} %{?4} = %{&4} %{?5} = %{&5}"
}
}
} else {
dissect {
mapping => {
"message" => "%{?1} = %{&1} %{?2} = %{&2} %{?3} = %{&3}"
}
}
}
}
output {
file {
path => "d:/test-dissect.log"
}
}
kv 필터처럼 유연한 처리는 어렵기 때문에 ruby 필터를 이용해서 필드 개수를 파악, 들쭉날쭉 변하는 필드 개수에 대응했다. 참고로 버전 7부터 로그스태시가 드디어 숫자를 인식한다. [field_count] == "5" 구문 안 먹더라(..)
I7(4코어), SSD 환경에서 kv 필터를 사용했을 때 로그 백만 개 연동에 22초 소요. 약 45,000 eps.
dissect 필터는 18초 소요. 약 55,000 eps.
20.11.13
로그스태시는 숫자를 인식하지 못한다. [field_count] == "5" 구문이 안 먹은 이유는 ruby가 계산 결과를 숫자형으로 저장했기 때문(..)
관련 글
관련 글
댓글 없음:
댓글 쓰기