본 글은 https://docs.fluentd.org/을 번역/요약/정리/사견 추가한 글입니다.
1. Fluentd란?
Fluentd는 통합된 로깅 레이어를 위한 오픈소스 데이터 수집기입니다. Fluentd는 데이터 수집과 소비를 통합시켜줍니다.특히 125개 이상의 시스템을 지원함으로써 모든 것을 로깅할 수 있게 해줍니다.
Fluentd는 로그를 JSON으로 취급합니다. 그리고 fluent의 확장성도 현업에서 이미 인정되었다고 합니다. Fluentd의 가장 큰 고객은 5만 여개 이상의 서버로부터 로그를 수집하고 있답니다.
2. Use cases (사용 사례)
- 오픈소스(elasticsearch, kibana)만을 이용해 Splunk와 같은 데이터(로그) 검색
- 데이터를 감지해서 경고 메시지 이메일로 보내기
- DB나 검색엔진으로 로그 보내버리기
3. Fluentd는 이벤트를 어떻게 처리할까?
설정 파일은 모든걸 묶는 아주 중요한 곳입니다. 예제에선 in_http, out_stdout을 쓸거랍니다.
in_http를 이용해 HTTP 요청을 받아봅시다.
<source>
@type http
port 8888
bind 0.0.0.0
</source>
이제 표준 출력에 이벤트를 출력할 수 있게 매칭 규칙을 정해봅시다
<match test.cycle>
@type stdout
</match>
이제 /test.cycle로 요청을 보내면 다음과 같은 로그가 출력됩니다.
2019-12-16 18:58:27.888557000 +0900 test.cycle: {"action":"login","user":2}
3.1. 이벤트 구조
Fluentd의 이벤트는 3개의 구성요소를 포함합니다.
- tag : 이벤트가 온 곳(origin)을 나타냅니다. 메시지를 라우팅할 때 사용합니다.
- time: 나노초 단위로 이벤트가 언제 일어났는지 알려줍니다.
- record : 실제 로그를 JSON 형태로 나타냅니다.
input 플러그인은 데이터 소스로부터 fluentd 이벤트를 만들어냅니다. 예를 들어, in_tail은 텍스트로부터 이벤트를 만들어냅니다. e.g.
192.168.0.1 - - [28/Feb/2013:12:00:00 +0900] "GET / HTTP/1.1" 200 777
to
tag: apache.access # set by configuration
time: 1362020400.000000000 # 28/Feb/2013:12:00:00 +0900
record: {"user":"-","method":"GET","code":200,"size":777,"host":"192.168.0.1","path":"/"}
3.2. 이벤트 처리
3.2.1. Filters
필터는 이벤트를 통과시키거나 거부하는 역할을 합니다. 다음과 같은 설정 파일이 있다면,
<source>
@type http
port 8888
bind 0.0.0.0
</source>
<filter test.cycle>
@type grep
<exclude>
key action
pattern ^logout$
</exclude>
</filter>
<match test.cycle>
@type stdout
</match>
다음은 액션 키에서 logout 문자열을 가진 이벤트를 제외시킵니다. 여기서 action은 JSON record의 키 중 하나로 생각할 수 있습니다.
3.2.2. Labels
레이블은 설정 파일의 복잡함을 풀고 새로운 라우팅 섹션을 정의하게 해준다 합니다. 다음과 같은 설정 파일이 있다면
<source>
@type http
bind 0.0.0.0
port 8888
@label @STAGING
</source>
<filter test.cycle>
@type grep
<exclude>
key action
pattern ^login$
</exclude>
</filter>
<label @STAGING>
<filter test.cycle>
@type grep
<exclude>
key action
pattern ^logout$
</exclude>
</filter>
<match test.cycle>
@type stdout
</match>
</label>
아래 그림처럼 레이블이 맞는 필터로만 이벤트를 흘러가게 하고 다른 필터는 흐름에서 제외시킬 수 있습니다. 즉, 설정 파일의 top-to-down 형식으로 내려가는 이벤트의 흐름을 바꿀 수 있게 합니다.
3.2.3. Buffers
예제에선 버퍼없이 stdout으로 바로 출력을 때려버렸지만 실제 환경에선 보통 버퍼를 사용한답니다. buffered mode를 사용하는 output 플러그인은 먼저 이벤트를 버퍼에 저장한 후, 특정 조건을 만족하면 버퍼의 이벤트들을 목적지로 쓴다고 합니다.
'Log > fluentd' 카테고리의 다른 글
06. Fluentd parser plugins (0) | 2022.10.09 |
---|---|
05. Fluentd buffer plugins (0) | 2022.10.08 |
04. Fluentd filter plugins (0) | 2022.10.08 |
03. Fluentd output plugins (0) | 2022.10.08 |
02. Fluentd input plugins (0) | 2022.10.08 |