로그온 타입 유형이 숫자로 기록되기 때문에 실제 로그를 보면 무슨 유형인지 한눈에 파악하기 어려운데, 이때 로그스태시의 다양한 필터 기능을 이용하면 가독성을 높일 수 있다.
filter {
if [event_data][LogonType] == "0" {
mutate { replace => { "[event_data][LogonType]" => "system_start" } }
}
if [event_data][LogonType] == "2" {
mutate { replace => { "[event_data][LogonType]" => "interactive" } }
}
if [event_data][LogonType] == "3" {
mutate { replace => { "[event_data][LogonType]" => "network" } }
}
if [event_data][LogonType] == "4" {
mutate { replace => { "[event_data][LogonType]" => "batch" } }
}
if [event_data][LogonType] == "5" {
mutate { replace => { "[event_data][LogonType]" => "service" } }
}
if [event_data][LogonType] == "7" {
mutate { replace => { "[event_data][LogonType]" => "unlock" } }
}
if [event_data][LogonType] == "8" {
mutate { replace => { "[event_data][LogonType]" => "network_cleartext" } }
}
if [event_data][LogonType] == "9" {
mutate { replace => { "[event_data][LogonType]" => "new_credentials" } }
}
if [event_data][LogonType] == "10" {
mutate { replace => { "[event_data][LogonType]" => "rdp" } }
}
if [event_data][LogonType] == "11" {
mutate { replace => { "[event_data][LogonType]" => "cache_interactive" } }
}
}
문제는 로그스태시가 if 제어문만을 지원한다는 것. 조건에 따라 다양한 설정 변경이 필요할 때 부득이하게 설정이 길어질 수 있다는 얘기. 이때 ruby 필터를 이용하면 좀 더 우아한(?) 설정이 가능하다.
filter {
ruby {
code => '
num = 0
for i in ["system_start","unknown","interactive","network","batch","service","unknown","unlock","network_cleartext","new_credentials","rdp","cache_interactive"]
if event.get("[event_data][LogonType]").match("#{num}")
event.set("logon_type","#{i}")
end
num += 1
end
'
}
}
num 변수가 0에서 시작, 1씩 증가할 때마다 해당 순서에 맞는 문자열을 for문 리스트에서 하나씩 가져와 새로 만든 logon_type 필드에 추가하는 방식. ruby 스크립트를 잘 몰라서 헤맸는데 일단 다음 구문은 동작하지 않는다.
if event.get("[event_data][LogonType]") == num
로그스태시가 변수 'num'의 숫자값을 문자로 인식하기 때문(..) 결국 'match' 메서드로 해결.
관련 글
댓글 없음:
댓글 쓰기