특정 조건에서만 이벤트를 필터링하거나 출력하려는 경우 조건문을 사용할 수 있다.
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 |