Tech 기록지/Elastic Stack
[ElasticStack-19] Logstash multiline indexing
Lio Grande
2020. 6. 19. 11:39
웹크롤링등을 하여 다음과 같은 패턴의 텍스트 파일이 있다고 하자.
<HTML>
<HEAD> 텍스트 막 써대 </HEAD>
<BODY> 이렇게 막 써대 </BODY>
...
...
</HTML>
이때, HTML TAG를 제외한 내용을 엘라스틱서치에 인덱싱하고 싶다면 다음과 같이 .conf 파일을 작성해보자
### It is operated on ELK 7.7.1
input{
file{
path => "WANTED_FILE_PATH" ## you should write your own file or dir path
start_position => "beginning"
sincedb_path => "/dev/null"
## above two lines, based on linux OS
codec => multiline {
pattern => "^\\n"
negate => true
what => "previous"
auto_flush_interval => 1
}
}
}
filter{
grok{
match => { "path" => "%{GREEDYDATA}/%{GREEDYDATA:file_name}\.txt" }
}
mutate{
gsub => [ "message", "<.*?>", "" ]
remove_field => ["path","host","@version","@timestamp","tags"]
}
if [message] == "" {
drop { }
}
}
output{
elasticsearch{
hosts => "localhost:9200"
index => "multiline_txt_idx"
}
stdout{
codec => rubydebug
}
}
확인한 바로 multiline codec의 특이사항은 다음의 항목들인것 같다.
1. 줄바꿈을 없애고 싶을 때 패턴 등록 줄바꿈은 "^\\n"으로 설정
2. auto_flush_interval 옵션을 적용해주지 않으면 업로드가 되지 않고 flush가 loop상태에 빠진다 (Debug 모드 확인시)
filter 항목에서는 gsub를 활용하여 <HTML> 형태의 태그를 없앨 수 있다. 이렇게 태그를 없애면 특정 필드(예: "message")에서 값이 "" 들어가 있는 녀석들이 발생하는데, if-drop 옵션을 사용해 없애버릴수 있다.