특정 조건에서만 이벤트를 필터링하거나 출력하려는 ​​경우 조건문을 사용할 수 있다.

 

Logstash의 조건문은 프로그래밍 언어에서와 같은 방식으로 작동한다. 

if EXPRESSION {
  ...
} else if EXPRESSION {
  ...
} else {
  ...
}

//expression(표현식)은 비교테스트, boolean logic등을 의미한다.

 

비교 연산자는 다음과 같다.

  • 동등성(equality): ==, !=, <, >, <=, >=
  • 정규표현식(regexp): =~, !~    ->  ex) a =~ b (왼쪽의 문자열 값 a에 대해 오른쪽 b의 패턴을 확인)
  • 포함(inclusion): in, not in

단항 연산자

  • !

표현식은 길고 복잡해질 수 있다.

표현식은 다른 표현식을 포함할 수 있고, !로 표현식을 부정할 수도 있으며 ()로 표현식을 묶을 수도 있다.

 


조건문을 다양한 곳에 사용할 수 있지만, 특별한 field인 @metadata 필드에 조건문을 적용해보려 한다.

먼저 @metadata 필드에 대해 알아보자.

@metadata의 내용은 @metadata 출력 시 이벤트의 일부가 아니며, 조건문에 사용하거나 필드 참조 및 sprintf서식을 사용하여 이벤트 필드를 확장 및 구축하는 데 유용하다.

 

아래의 conf파일에 대해 알아보자.

먼저 표준입력(stdin)에서 이벤트를 생성하고, 무엇을 입력하든 message이벤트의 필드가 된다. filter block의 mutate이벤트는 몇 개의 필드를 추가하고 일부는 필드에 중첩된다.

 

input {
    stdin { }
}

filter {
    mutate { add_field => { "show" => "This data will be in the output" } }
  mutate { add_field => { "[@metadata][test]" => "Hello" } }
  mutate { add_field => { "[@metadata][no_show]" => "This data will not be in the output" } }
}

output {
    if [@metadata][test] == "Hello" {
        stdout { codec => rubydebug}
    }
}

위의 conf파일을 실행해보자

실행후 "asdf"를 입력하는 경우 아래와 같은 결과가 나온다.

입력한 "asdf"는 message필드 내용이 되었고, 조건문은 test필드 내에 중첩된 @metadata 필드의 내용을 성공적으로 평가했다. 그러나 output에는 @metadata 필드나 @metadata의 내용이 표시되지 않았다.

이때, rubydebug코덱을 사용하여  metadata => true로 해주면 @metadata 필드의 내용을 output에 보여줄 수 있다.

 

수정한 conf파일을

실행시키고 똑같이 "asdf"를 입력하면 아래와 같은 결과가 나옴을 확인할 수 있다.

 

위의 내용을 보면 @metadata 필드와 @metadata필드의 하위 내용들을 볼 수 있음을 확인할 수 있다.

'ElasticSearch' 카테고리의 다른 글

Elastic Stack에서 한국어 NLP사용  (0) 2022.06.02
매일 ES에 있는 data를 CSV파일로 만들기  (0) 2022.04.26
ElasticStack에 대해  (0) 2022.03.15

+ Recent posts