[2020-12-10T20:28:16,956][INFO ][logstash.agent ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}{
"message" => "a|b\r"
}
{
"message" => "|c\r"
}
'|' 기준 왼쪽 데이터만을 별도 필드로 추출해보자. 정규표현식 테스트 결과는 다음과 같으며, 검사할 값이 없는 두 번째 데이터의 field는 당연하게도 빈 값이다.
다음은 테스트에 사용한 정규표현식을 반영한 grok 필터.
filter {
mutate { remove_field => [ "@timestamp", "@version", "host", "path" ] }
grok {
match => { "message" => "(?<field>[^|]*)" }
}
}
실행 결과는 다음과 같으며, grok 필터는 빈 값이 저장된 필드를 만들지 않는다.
[2020-12-10T20:31:34,950][INFO ][logstash.agent ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
{
"message" => "|c\r"
}
{
"field" => "a",
"message" => "a|b\r"
}
빈 값이 저장된 필드를 만들고 싶다면 keep_empty_captures 옵션을 사용하면 됨.
filter {
mutate { remove_field => [ "@timestamp", "@version", "host", "path" ] }
grok {
match => { "message" => "(?<message>[^|]*)" }
keep_empty_captures => true
}
}
실행 결과는 다음과 같다.
[2020-12-10T20:32:25,927][INFO ][logstash.agent ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
{
"field" => "",
"message" => "|c\r"
}
{
"field" => "a",
"message" => "a|b\r"
}
관련 글
댓글 없음:
댓글 쓰기