1.Fluent Bit?
Fluentd와 Fluent Bit 이름에서도 알 수 있는것 처럼 유사한 기능을 하고 있다. 둘다 Treasure Data 에서 제작/후원 하고 데이터 수집을 목적으로 개발 되고 있다.
Fluentd가 server 범위에서 사용 된다면 Fluent Bit 는 좀더 경량화 되어 Embedded & IoT devices 같은 범위에서 사용 된다.
Fluentd | Fluent Bit | |
---|---|---|
Scope | Servers | Embedded & IoT devices |
Language | C & Ruby | C |
Memory | ~20MB | ~150KB |
Performance | High Performance | High Performance |
Dependencies | Built as a Ruby Gem, it requires a certain number of gems. | Zero dependencies, unless some special plugin requires them. |
Plugins | More than 300 plugins available | Around 15 plugins available |
License | Apache License v2.0 | Apache License v2.0 |
Ref: https://fluentbit.io/documentation/0.8/about/fluentd_and_fluentbit.html
fluentbit repo 구성
fluentbit 는 fluentd 와 같이td-agent 를 기반으로 동작 하며 td-agent-bit 를 위에서 추가한 repo를 통하여 설치 한다.
td-agent-bit 기본 구성은 CPU사용량 메트릭을 수집하고 표준 출력으로 레코드를 보내는 것이며,/var/log/messages 에서 확인 할 수 있다.
3.Fluent Bit output elasticsearch
기본적으로 Fluentbit의 설정은 [SERVICE] 지시자와 [INPUT],[OUTPUT] 구성되어 있다.
Fluent 와 기본 설정 파일의 컨셉은 비슷하나 약간 차이가 있어 보인다.
[SERVICE] 에서 Flush는 flush 되는 시간을 의미 하며 기본 5초 간격으로 flush 된다.(input이나 filter된 데이터를 output 으로 5초마다 보낸다는 의미가 정확하다.)
Log_Level, Log_File 에서는 Fluentbit 가 작동시 발생 하는 log를 지정 하며 설정 하지 않을 경우 별도의 로그를 남기지 않기때문에 에러를 확인 하기 힘들다.
Parsers_File,Plugins_File 에서는 각각의 설정파일을 지정 한다.(filter plugin 문서 참조)
HTTP_Server On을 할 경우 아래와 같은 agent의 상태 정보를 확인 가능 하다.(정확한 용도는 모르겠지만, 사용 곳이 있어서 만든것 으로 보임... 경량화 했는데도 넣은거라면...)
아래와같이 간단하게 input→output 구조로 cpu 자원을 fluentbit-tag 라는 tag를 추가하여 output으로 es(elasticsearch) plugin으로 보내는 설정이다.
이때, host와 port는 외부에서 es에 접근 가능한 정보를 넣으며 index와type설정을 진행 한다.
Name은 사용 할 plugin의 이름 이며, elasticseach는 es 라는 plugin을 사용 한다.
td-agent-bit 재시작
추가된 인덱스를 확인 한다.
추가된 인덱스에서 지정한 tag와 type으로 store되는지 확인 한다.
4. Fluentbit Grep Filterp
Grep Filter 아래와 같이 Regex, Exclude 두개의 key를 갖는다. grep 을 통하여 포함한 문자열만 output으로 보낼지, 아니면 제외 시킬지를 filter 한다.
Key | Value Format | Description |
---|---|---|
Exclude | FIELD REGEX | Exclude records which field matches the regular expression. (grep -v) |
Regex | FIELD REGEX | Keep records which field matches the regular expression. (grep ) |
아래 와 같은 형태의 로그중 뒷부분에 os 부분을 filter 하려고 한다.(대부분 linux or windows로 랜덤하게 되어 있음)
Exclude Linux 형태의 filter 를 추가 한다.
kibana 에서 linux 로 검색시, 찾을 수 없음을 확인 할 수 있다.
5. Fluentd bit forward Fluentd
Fluentd bit는 경량화 되어 있기때문에 plugin의 제한과 함께 filter를 grok와 같은 추가 적인 작업과 함께 aggregation 과 같은 작업을 하는 것은 좋지 않다.
그렇기 때문에 Fluentd bit 에서output으로 별도의 Fluentd 로 forward하여 aggregation 이나, grok와 같은 filter를 진행 하는 것이 agent node의 부하를 줄일 수 있다.
아래와 같이 Fluentd bit 의 OUTPUT 의 plugin value를 forward 로 진행 하며 Fluentd 의 tcp port 로 전송 하도록 설정 한다.
Fluentd 가 설치된 node 에서 source tcp 24224 port 로 binding 하여 모든 match되는 로그에
stdout 으로 진행 하여 로그가 수집 되는지 확인 한다.
아래 그림 처럼 forground형태로 실행시 fluentd 에서 로그가 화면에 나오는 것을 확인 한다.
이제 데몬형식으로 실행 하여 elasticsearch 로 output 을 진행 하기 위해 td-agnet.conf 을 수정 한다.
logstash_format true 를 해야 timestamp 필드가 추가 되며, logstash_prefix 를 통하여 output 할 index 를 선택한다.
td-agent 데몬을 재시작 한다.
tg-agent-bit가 설치된 node 에서 20000줄의 log를 생성한다.
정상적으로 elasticsearch에 저장 될 경우 index이름이 l
ogstash_prefix 에 설정된 이름에 logstash와 동일하게 날짜별로 저장 된다.
또한 kinana를 통하여 20000 개의 log가hits 된 것을 확인 할 수 있다.
이제 저장되고 있는 로그를 grok 형태로 파싱 하기 위해서 fluent-plugin-grok-parser 을 설치 한다.
아래와 같이 grokdebug를 통하여 해당 로그를 grok형태로 파싱 될 수 있도록 패턴을 생성한다.
filter 에 아래와 같이 parser plugin을 이용 하여 filter 하는데 , 이때 grok 패턴을 filter 할 수 있도록 한 뒤
output 할 수 있도록 한다.
서비스 재시작 후 kibana 에서 logstash 로 파싱한것과 동일 한 결과를 확인 할 수 있다.
'System > Fluentd' 카테고리의 다른 글
Fluentd output for kafka (0) | 2017.09.30 |
---|---|
Fluentd Overview/ Default install (0) | 2017.09.30 |