-
04. logstash 구성BackEnd/logstash 2021. 10. 29. 11:55반응형
Logstash를 구성하려면 사용하려는 플러그인과 각 플러그인의 설정을 지정하는 config 파일(logstash.conf)을 만듭니다. 구성에서 이벤트 필드를 참조하고 조건을 사용하여 특정 기준을 충족할 때 이벤트를 처리할 수 있습니다.
1. 구성 파일의 구조 (Structure of a config file)
각 섹션에는 하나 이상의 플러그인에 대한 구성 옵션이 포함되어 있습니다. 플러그인 구성은 플러그인 이름과 해당 플러그인에 대한 설정 블록으로 구성됩니다. 여러 필터를 지정하면 구성 파일에 나타나는 순서대로 적용됩니다. 아래 예는 두 개의 kafka 입력을 구성합니다.
# This is a comment. You should use comments to describe # parts of your configuration. input { kafka { ... } kafka { ... } } filter { ... } output { ... }
구성할 수 있는 설정은 플러그인 유형에 따라 다릅니다. 각 플러그인에 대한 정보는 각 플러그인에 대한 정보는 입력 플러그인 , 출력 플러그인 , 필터 플러그인 및 코덱 플러그인을 참조하십시오.
2. 값 유형 (Value types)
Array(deprecated)
users => [ {id => 1, name => bob}, {id => 2, name => jane} ]
List
path => [ "/var/log/messages", "/var/log/*.log" ] uris => [ "http://elastic.co", "http://example.net" ]
Boolean
ssl_enable => true # true or false
Bytes
my_bytes => "1113" # 1113 bytes my_bytes => "10MiB" # 10485760 bytes my_bytes => "100kib" # 102400 bytes my_bytes => "180 mb" # 180000000 bytes
Codec
입력 코덱은 데이터가 입력에 들어가기 전에 데이터를 디코딩하는 편리한 방법을 제공합니다. 출력 코덱은 데이터가 출력을 떠나기 전에 데이터를 인코딩하는 편리한 방법을 제공합니다. 입력 또는 출력 코덱을 사용하면 Logstash 파이프라인에 별도의 필터가 필요하지 않습니다. 사용 가능한 코덱 목록은 코덱 플러그인 페이지 에서 찾을 수 있습니다.
codec => "json"
Hash
형식에 지정된 키 값 쌍의 모음입니다. "field1" => "value1". 여러 키 값 항목은 쉼표가 아닌 공백으로 구분됩니다.
match => { "field1" => "value1" "field2" => "value2" }
Number
유효한 숫자 값(부동 소수점 또는 정수)이어야 합니다.
port => 33
Password
기록되거나 인쇄되지 않는 단일 값을 가진 문자열입니다.
my_password => "password"
URI
URI에 http://user:pass@example.net 과 같은 비밀번호가 포함되어 있으면 URI 의 비밀번호 부분이 기록되거나 인쇄되지 않습니다.
my_uri => "http://foo:bar@example.net"
Path
유효한 운영 체제 경로를 나타내는 문자열입니다.
my_path => "/tmp/logstash"
String
문자열은 단일 문자 시퀀스여야 합니다. 문자열 값은 큰따옴표나 작은따옴표로 묶습니다.
Escape sequences
사용하기 위해서는 logstash.yml 파일에 config.support_escapes: true 설정해 주어야 합니다.
Text Result \r carriage return (ASCII 13) \n new line (ASCII 10) \t tab (ASCII 9) \\ backslash (ASCII 92) \" double quote (ASCII 34) \' single quote (ASCII 39) Field reference (필드 참조)
필드 참조는 이벤트에서 필드에 대한 경로를 나타내는 특수 문자열 값입니다. 예를 들어 @timestamp 또는 [@timestamp]는 최상위 필드를 참조하거나 [client][ip]는 중첩 필드에 액세스합니다. Field References Deep Dive는 필드 참조의 구조에 대한 자세한 정보를 제공합니다. 구성 옵션으로 제공되는 경우 필드 참조는 따옴표로 묶고 특수 문자는 문자열과 동일한 규칙에 따라 이스케이프해야 합니다.
Comments
# this is a comment input { # comments can appear at the end of a line, too # ... }
3. 예약 필드 (Reserved fields)
@metadata A key/value map.
Ruby 기반 플러그인 API: org.jruby.RubyHash.
Java 기반 플러그인 API: org.logstash.ConvertedMap.
직렬화된 형식 (예: JSON): key/value map (키는 문자열, 값은 특정 유형으로 제한되지 않습니다.)@timestamp 특정 순간(시간)
Ruby 기반 플러그인 API: value is an org.jruby.RubyTime.
Java 기반 플러그인 API: value is a java.time.Instant.
직렬화된 형식 (예: JSON) 또는 Event#set으로 설정: ISO8601 호환 문자열 값@version 정수 값을 보유하는 문자열 tags 고유한 문자열의 배열 4. 이벤트 데이터와 필드 접근 (Accessing event data and fields)
Logstash Agent는 입력 > 필터 > 출력의 3단계로 구성된 처리 파이프라인입니다. 입력은 이벤트를 생성하고 필터는 이벤트를 수정하고 출력은 이벤트를 다른 곳으로 보냅니다. 모든 이벤트에는 속성이 존재하며 Logstash는 이를 필드라고 합니다. 입력은 이벤트를 생성하기 때문에 필드가 없습니다. 아래 설명된 필드 참조, sprintf 및 조건은 입력 블록에서 작동하지 않습니다.
1) 필드 참조
필드에 접근하는 기본 구문은 [fieldname]입니다. 최상위 필드를 참조하는 경우 []를 생략하고 fieldname으로 사용할 수 있습니다. 중첩 필드를 참조하려면 해당 필드에 대한 전체 경로를 지정합니다 [top-level field][nested field].
{ "agent": "Mozilla/5.0 (compatible; MSIE 9.0)", "ip": "192.168.24.44", "request": "/index.html" "response": { "status": 200, "bytes": 52353 }, "ua": { "os": "Windows 7" } }
os 필드를 참조하려면 [ua][os] 지정합니다. request와 같은 최상위 필드를 참조하려면 단순히 이름만 지정하면 됩니다.
2) sprint format
sprint format을 사용하면 다른 문자열 내에서 필드 값을 참조할 수 있습니다.
# statsd 출력에 상태 코드별 Apache 로그 수를 유지할 수 있는 증분 설정 output { statsd { increment => "apache.%{[response][status]}" } } # 파일 출력에 이벤트의 날짜와 시간 및 유형 필드를 기반으로 로그 적재 output { file { path => "/var/log/%{type}.%{+yyyy.MM.dd.HH}" } }
3) 조건부
특정 조건에서만 이벤트를 필터링하거나 출력하려는 경우 사용합니다.
if EXPRESSION { ... } else if EXPRESSION { ... } else { ... }
비교 연산자
- equality: ==, !=, <, >, <=, >=
- regexp: =~, !~ (checks a pattern on the right against a string value on the left)
- inclusion: in, not in
부울 연산자
- and, or, nand, xor
단항 연산자
- !
in 연산자를 사용하여 필드에 특정 문자열, 키 또는 목록 요소가 포함되어 있는지 테스트할 수 있습니다. in은 대상 유형에 따라 다릅니다. 문자열에 적용될 때는 "~의 부분 문자열"을 의미하고, 컬렉션 유형에 적용될 때는 "컬렉션에 정확한 값이 포함됨"을 의미합니다.
filter { if [foo] in [foobar] { mutate { add_tag => "field in field" } } if [foo] in "foo" { mutate { add_tag => "field in string" } } if "hello" in [greeting] { mutate { add_tag => "string in field" } } if [foo] in ["hello", "world", "foo"] { mutate { add_tag => "field in list" } } if [missing] in [alsomissing] { mutate { add_tag => "shouldnotexist" } } if !("foo" in ["hello", "world"]) { mutate { add_tag => "shouldexist" } } }
조건부의 sprint format은 현재 지원되지 않습니다. @metadata필드를 사용하는 해결 방법을 사용할 수 있습니다.
filter { mutate{ add_field => { "[@metadata][time]" => "%{+HH}:%{+mm}" } } if [@metadata][time] < "16:30" { mutate { add_field => { "string_compare" => "%{+HH}:%{+mm} is before 16:30" } } } }
4) @metadata 필드
조건문에 사용하거나 필드 참조 및 sprint format으로 이벤트 필드를 확장 및 구축하는데 유용합니다. (임시 필드)
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 } } }
# 확인 $ bin/logstash -f ../test.conf Pipeline main started asdf { "@timestamp" => 2016-06-30T02:42:51.496Z, "@version" => "1", "host" => "example.com", "show" => "This data will be in the output", "message" => "asdf" }
출력에는 @metadata 내용이 표시되지 않습니다. rubydebug 코텍만 @metadata 필드의 내용을 표시할 수 있으며 설정 플래그를 추가해야 합니다.
stdout { codec => rubydebug { metadata => true } }
반응형'BackEnd > logstash' 카테고리의 다른 글
03. logstash 설정 (0) 2021.10.28 02. logstash 작동 방식 (0) 2021.10.28 01. logstash (0) 2021.10.27