fluentd
#infra
로그 수집기 (collector)
데이터 유실을 막기 위해 메모리, 파일 기반의 Buffer 시스템을 가지고 있음.
Failover을 위한 HA(high availability) 구성도 가능.
HA? 클러스터링, 이중화등의 방식. 즉 하나의
fluentd
시스템이 원치 않은 이유로 종료되었을 경우, 다른fluentd
시스템이 있어서 로그 데이터의 유실을 막아주는 것.
Inputs or listeners Fluentd will have and set up common matching rules to route the Event data to a specific Output.
input data는 특정한 룰에 매칭되어서 output으로 전환된다.
전체적인 동작은 input -> (Filter) -> Buffer -> Output
예를 들면
HTTP Request
는 아래와 같은 데이터로 전환.
특정한 룰 (Matching rule)
The Match sets a rule where each Incoming event that arrives with a Tag equals to test.cycle, will match and use the Output plugin type called stdout
test.cycyle
이라는 Tag와 함께 들어오는 이벤트는stdout
이라고 불리는 output plugin type을 사용할 것이라는 룰임.tag, event란?
Event Srtucture
3개의 요소로 구성됨.
tag : 메세지 라우팅에 사용되며, 이벤트가 어디에서 들어오는 지 확인하는 용도.
time : 이벤트가 발생한 시간 (nanosecond)
record : JSON Obect 형식의 실제 로그 (전송해야할)
Processing Events
input data따라, 각각 다른 이미 정의된 룰을 적용 시킬 수 있음.
즉 내부적으로 이벤트가 전송되기 전에, 어떤 체인으로 연결된 룰을 적용시킨다고 보면 될듯.
Filter
A Filter behaves like a rule to pass or reject an event
통과시키거나, 거부하는 룰인듯.
match 전에 정의되었음
grep잡아서, key 가 action인 데이터의 값이
logout
패턴이라면, 이 이벤트는 거부됨.즉
첫번째 이벤트는 filter를 통과하고, 두번째 이벤트는 필터를 통과하지 못함.
Label
aims to solve the configuration file complexity and allows to define new Routing sections that do not follow the top-to-bottom order, instead they act like linked references
configuratoin 파일의 복잡성을 해결하기 위해 나왔음.
새로운 Routing section을 허용해주는 것.
해당 label을 정의하면, filter 보다 먼저 찾아가게 되는듯.(이전 필터는 유지하고, 새로운 필터를 적용하고 싶을 때 사용되는 듯 버져닝 느낌)
Buffers
In this example, we use stdout, the non-buffered output you use outputs in buffered mode e.g. forward, mongodb, s3 and etc.
위에서 사용된 예시는 non-bufftered output인 stdout.
그렇지만 forward, mongodb, s3와 같은 값을
@type
과 사용하면, buffered mode를 사용할 수 있음.
first stores the received events into buffers and then writes out buffers to a destination after meeting flush conditions
첫번째 store는 이벤트를 받고, 그리고 flush 조건에 만족하면, 목적지 버퍼에 쓸 수 있는 듯. (첫번째 이벤트 스토어 버퍼에 저장된 정보를 보낸다는 의미인듯)
Input plugins
tail
로그 파일을
tail
명령어를 통해서 읽어오는 것을 말함.로그 파일이 변경되면 (rotated), 새로운 파일을 읽기 시작함.
pos_file
을 사용할 경우, fluentd가 재 실행되었을 때, 읽은 파일의 마지막 위치 부터 다시 시작하게 도와줌.position file
forward
보통 다른 fluentd 노드로 부터 데이터를 전달받기 위해 사용함.
전달받는 데이터는 JSON 이나 Messagepack 형식으로 구성되어있음.
Output plugins
forward
The out_forward Buffered Output plugin forwards events to other fluentd nodes. For replication, please use out_copy plugin.
이벤트가 다른 fluentd node로 forward 되는 것을 의미
복제 방식은
out_copy
플러그인을 사용해라standby
optiondefault : false
해당 노드는 standby 타입이라 명시해줌.
만약에 active node가 멈추면, standby node가 해당 역할을 대신함.
즉 기본적으로
forward
방식에서 standby node로 설정된 노드는 이용되지 않음.
s3
real world use case
실제 production 환경에 적용하려 할 때, 참고해보면 좋을듯.
참고
https://jonnung.dev/system/2018/04/06/fluentd-log-collector-part1/
https://docs.fluentd.org/
Last updated