Common filter plugins
출처: 문서
본문
일반적인 필터 플러그인
이 페이지에서는 일반적인 필터 플러그인 목록을 제공해요.
mutate
mutate 필터를 사용하여 필드의 데이터 타입을 변경할 수 있어요. 예를 들어, OpenSearch로 이벤트를 보낼 때 기존 매핑과 일치하도록 필드의 데이터 타입을 변경해야 한다면 mutate 필터를 사용할 수 있어요.
quantity 필드를 string 타입에서 integer 타입으로 변환하려면:
input {
http {
host => "127.0.0.1"
port => 8080
}
}
filter {
mutate {
convert => {"quantity" => "integer"}
}
}
output {
file {
path => "output.txt"
}
}
샘플 출력
quantity 필드의 타입이 string에서 integer로 변경된 것을 볼 수 있어요.
{
"quantity" => 3,
"host" => "127.0.0.1",
"@timestamp" => 2021-05-23T19:02:08.026Z,
"amount" => 10,
"@version" => "1",
"headers" => {
"request_path" => "/",
"connection" => "keep-alive",
"content_length" => "41",
"http_user_agent" => "PostmanRuntime/7.26.8",
"request_method" => "PUT",
"cache_control" => "no-cache",
"http_accept" => "*/*",
"content_type" => "application/json",
"http_version" => "HTTP/1.1",
"http_host" => "127.0.0.1:8080",
"accept_encoding" => "gzip, deflate, br",
"postman_token" => "ffd1cdcb-7a1d-4d63-90f8-0f2773069205"
}
}
변환할 수 있는 다른 데이터 타입으로는 float, string, boolean 값이 있어요. 배열을 전달하면 mutate 필터가 배열의 모든 요소를 변환해요. "world"와 같은 string을 integer 타입으로 캐스팅하면 결과는 0이 되고 Logstash는 이벤트 처리를 계속해요.
Logstash는 모든 필터 플러그인에 대해 몇 가지 공통 옵션을 지원해요.
| 옵션 | 설명 |
|---|---|
add_field |
이벤트에 하나 이상의 필드를 추가해요. |
remove_field |
이벤트에서 하나 이상의 필드를 제거해요. |
add_tag |
이벤트에 하나 이상의 태그를 추가해요. 태그를 사용하여 이벤트에 포함된 태그에 따라 조건부 처리를 수행할 수 있어요. |
remove_tag |
이벤트에서 하나 이상의 태그를 제거해요. |
예를 들어, 이벤트에서 host 필드를 제거할 수 있어요:
input {
http {
host => "127.0.0.1"
port => 8080
}
}
filter {
mutate {
remove_field => {"host"}
}
}
output {
file {
path => "output.txt"
}
}
grok
grok 필터를 사용하면 비정형 데이터를 파싱하여 필드로 구조화할 수 있어요. grok 필터는 텍스트 패턴을 사용하여 로그의 텍스트와 일치시켜요. 텍스트 패턴은 정규 표현식을 포함하는 변수라고 생각할 수 있어요.
텍스트 패턴의 형식은 다음과 같아요:
%{SYNTAX:SEMANTIC}
SYNTAX는 패턴이 일치하기 위해 텍스트 조각이 가져야 하는 형식이에요. grok의 미리 정의된 패턴 중 하나를 입력할 수 있어요. 예를 들어, 이메일 식별자를 사용하여 주어진 텍스트에서 이메일 주소를 일치시킬 수 있어요.
SEMANTIC은 일치된 텍스트에 대한 임의의 이름이에요. 예를 들어, 이메일 식별자 구문을 사용하는 경우 "email"이라고 이름을 지정할 수 있어요.
다음 요청은 방문자의 IP 주소, 방문자 이름, 요청 타임스탬프, HTTP 동사와 URL, HTTP 상태 코드, 바이트 수로 구성되어 있어요:
184.252.108.229 - joe [20/Sep/2017:13:22:22 +0200] GET /products/view/123 200 12798
이 요청을 여러 필드로 분할하려면:
filter {
grok {
match => { "message" => " %{IP: ip_address} %{USER:identity}
%{USER:auth} \[%{HTTPDATE:reg_ts}\]
\"%{WORD:http_verb}
%{URIPATHPARAM: req_path}
\" %{INT:http_status:int}
%{INT:num_bytes:int}"}
}
}
여기서:
IP: IP 주소 필드와 일치해요.USER: 사용자 이름과 일치해요.WORD: HTTP 동사와 일치해요.URIPATHPARAM: URI 경로와 일치해요.INT: HTTP 상태 필드와 일치해요.INT: 바이트 수와 일치해요.
grok 필터가 이벤트를 개별 필드로 분해한 후의 모습은 다음과 같아요:
ip_address: 184.252.108.229
identity: joe
reg_ts: 20/Sep/2017:13:22:22 +0200
http_verb:GET
req_path: /products/view/123
http_status: 200
num_bytes: 12798
일반적인 로그 형식의 경우, 여기에 정의된 미리 정의된 패턴을 사용해요---Logstash patterns. mutate 필터를 사용하여 결과를 조정할 수 있어요.