2020년 12월 12일 토요일

Logstash 필터 grok - 3rd

간단한 파이프라인 테스트 결과.

[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"

}

관련 글

댓글 없음:

댓글 쓰기

크리에이티브 커먼즈 라이선스