본 글은 https://docs.fluentd.org/을 번역/요약/정리/사견 추가한 글입니다.
1. 도입
Fluentd는 9가지 종류의 플러그인이 있습니다. 그 중 filter 플러그인에 대해 살펴보겠습니다. Filter plugin은 이벤트 스트림을 바꿀 수 있게 해줍니다. 예를 들어,
- 하나 이상의 필드를 이용해 이벤트를 필터링하기
- 새로운 필드를 이벤트에 더해주기
- 개인 정보 보호와 규정을 위해 특정 필드를 지우거나 마스킹하기
등을 할 수 있습니다.
2. filter_record_transformer
filter_record_transformer는 이벤트 스트림을 변경시킬 수 있게 합니다. 만약 이벤트를 추가/삭제/수정하고 싶으면 이 필터를 먼저 써보세요.
<filter foo.bar>
@type record_transformer
<record>
hostname "#{Socket.gethostname}"
tag ${tag}
</record>
</filter>
위와 같은 코드는 이벤트에 새로운 필드인 hostname, tag를 추가합니다.
3. filter_grep
filter_grep은 특정 값을 가지는 이벤트를 가져옵니다. 가져오지 못한 이벤트들은 filtered out 됩니다.
<filter foo.bar>
@type grep
<regexp>
key message
pattern /cool/
</regexp>
<regexp>
key hostname
pattern /^web\d+\.example\.com$/
</regexp>
<exclude>
key message
pattern /uncool/
</exclude>
</filter>
<regexp>, <exclude> 등의 조건들은 기본적으로 AND 연산으로 계산됩니다. <or>로 OR 연산도 가능합니다.
4. filter_parser
filter_parser는 이벤트 record의 문자열 필드를 파싱하고 변환합니다.
<filter foo.bar>
@type parser
key_name log
<parse>
@type regexp
expression /^(?<host>[^ ]*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^ ]*) +\S*)?" (?<code>[^ ]*) (?<size>[^ ]*)$/
time_format %d/%b/%Y:%H:%M:%S %z
</parse>
</filter>
예를 들어, 아래와 같은 요청이 오면
time: injected time (depends on your input)
record: {"log":"192.168.0.1 - - [05/Feb/2018:12:00:00 +0900] \"GET / HTTP/1.1\" 200 777"}
아래와 같이 변환됩니다.
time 05/Feb/2018:12:00:00 +0900
record: {"host":"192.168.0.1","user":"-","method":"GET","path":"/","code":"200","size":"777"}
5. filter_geoip
filter_geoip는 Maxmind GeoIP DB를 이용해 지리 정보를 추가시켜줍니다.
<filter access.apache>
@type geoip
# Specify one or more geoip lookup field which has ip address (default: host)
geoip_lookup_keys host
# Specify optional geoip database (using bundled GeoLiteCity databse by default)
# geoip_database "/path/to/your/GeoIPCity.dat"
# Specify optional geoip2 database (using bundled GeoLite2 database by default)
# geoip2_database "/path/to/your/GeoLite2-City.mmdb"
# Specify backend library (geoip2_c, geoip, geoip2_compat)
backend_library geoip2_c
# Set adding field with placeholder (more than one settings are required.)
<record>
city ${city.names.en["host"]}
latitude ${location.latitude["host"]}
longitude ${location.longitude["host"]}
country ${country.iso_code["host"]}
country_name ${country.names.en["host"]}
postal_code ${postal.code["host"]}
region_code ${subdivisions.0.iso_code["host"]}
region_name ${subdivisions.0.names.en["host"]}
</record>
# To avoid get stacktrace error with `[null, null]` array for elasticsearch.
skip_adding_null_record true
</filter>
6. filter_stdout
filter_stdout은 이벤트를 stdoutput으로 출력합니다. 디버깅 목적으로 적절합니다.
<filter pattern>
@type stdout
</filter>
'Log > fluentd' 카테고리의 다른 글
06. Fluentd parser plugins (0) | 2022.10.09 |
---|---|
05. Fluentd buffer plugins (0) | 2022.10.08 |
03. Fluentd output plugins (0) | 2022.10.08 |
02. Fluentd input plugins (0) | 2022.10.08 |
01. Fluentd란? (1) | 2022.10.08 |