2020년 7월 1일 수요일

Logstash 필터 grok - 2nd

이런 저런 데이터 작업을 하다 보면 신규 필드 만들면서 원본 필드를 overwrite 하고 싶을 때가 있다. 다음은 테스트 설정.
input {
 file {
  path => "d:/test.log"
  start_position => "beginning"
  sincedb_path => "nul"
 }
}

output {
 stdout {}
}

결과는 다음과 같다. message 필드에 담긴 원본 데이터는 'aaa bbb'.
{
          "path" => "d:/test.log",
       "message" => "aaa bbb\r",
      "@version" => "1",
          "host" => "MHKANG",
    "@timestamp" => 2020-07-01T06:18:26.485Z
}

dissect 플러그인을 이용해서 'aaa'만을 추출 후, message 필드에 저장해보자.
input {
 file {
  path => "d:/test.log"
  start_position => "beginning"
  sincedb_path => "nul"
 }
}

filter {
 dissect { mapping => { "message" => "%{message} %{}" } }
}

output {
 stdout {}
}

추출 데이터가 message 필드 overwrite.
{
          "path" => "d:/test.log",
       "message" => "aaa",
      "@version" => "1",
          "host" => "MHKANG",
    "@timestamp" => 2020-07-01T06:19:27.793Z
}

다음은 ruby 플러그인을 이용한 테스트.
input {
 file {
  path => "d:/test.log"
  start_position => "beginning"
  sincedb_path => "nul"
 }
}

filter {
 ruby { code => "event.set('message', event.get('message')[0..2])" }
}

output {
 stdout {}
}

dissect 플러그인과 마찬가지로 message 필드 overwrite.
{
          "path" => "d:/test.log",
       "message" => "aaa",
      "@version" => "1",
          "host" => "MHKANG",
    "@timestamp" => 2020-07-01T06:20:23.703Z
}

grok 플러그인은 어떨까?
input {
 file {
  path => "d:/test.log"
  start_position => "beginning"
  sincedb_path => "nul"
 }
}

filter {
 grok { match => { "message" => "(?\S+)" } }
}

output {
 stdout {}
}

원본은 사라지지 않고, 추출 데이터가 배열 형태로 추가된다.
{
          "path" => "d:/test.log",
       "message" => [
        [0] "aaa bbb\r",
        [1] "aaa"
    ],
      "@version" => "1",
          "host" => "MHKANG",
    "@timestamp" => 2020-07-01T06:21:27.973Z
}

원본을 overwrite 하려면 overwrite 옵션을 사용해야 함.
input {
 file {
  path => "d:/test.log"
  start_position => "beginning"
  sincedb_path => "nul"
 }
}

filter {
 grok { match => { "message" => "(?<message>\S+)" } overwrite => "message" }
}

output {
 stdout {}
}
{
          "path" => "d:/test.log",
       "message" => "aaa",
      "@version" => "1",
          "host" => "MHKANG",
    "@timestamp" => 2020-07-01T06:22:15.483Z
}

관련 글

댓글 없음:

댓글 쓰기

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