Introducing BigData Log Aggregator, Fluentd
- Log Aggregator 비교: Log Aggregator 비교 – Scribe, Flume, Fluentd, logstash
1. Fluentd 소개
다음 그림은 다양한 형태의 입력을 받을 수 있고, 출력을 형식화 할 수 있는 fluentd의 구조를 보여준다.
Input 단계는 로그를 수집하는 모듈로 사용자화 할 수 있는 플러그인 형태이다. 따라서 다양한 로그 소스를 지원할 수 있다. File, HTTP, TCP 등 기본 플러그인을 비롯하여 확장 플러그인들을 다운로드 받거나 직접 설치할 수 있다.
Buffer는 시스템 또는 네트워크 이상 또는 부하에 따른 재처리를 위해 파일 또는 메모리를 사용하여 데이터를 유지할 수 있고, Output 역시 Input 과 동일하게 사용자화할 수 있는 플러그인 형태로 다양한 포맷으로 데이터를 변경할 수 있다.
Input 단계에서 획득한 모든 정보들이 Output 단계로 보내지는 것은 아니며, Engine에서 필터링하여 항목을 삭제하거나 추가할 수 있다. 그리고 Input 단계 또는 Output 단계는 또 다른 fluentd와 연결이 가능 가능한다.
다음 그림은 문자열 형태의 웹서버 로그들을 Json 형태로 변환하여 저장하는 그림을 보여준다.
다음은 Forward 되는 fluentd 구성을 보여준다. 이 처럼 fluented는 Input과 Output 단계에서 각각 또 다른 fluentd을 둘 수 있다.
자세한 설명은 다음 슬라이드를 참고한다.
2. Fluentd 설치
설치는 다양한 방법으로 할 수 있는데, linux에서 curl을 통해 td-agent을 쉽게 설치하는 방법을 소개한다. td-agent는 fluentd 사용을 편리하게 만든 래퍼 프로그램이다.
2.1 Linux에 설치
다음은 Debian Jessie 에서 설치하는 명령이고, 다른 OS들에서 설치 명령들은 다음 주소를 참고한다. http://docs.fluentd.org/articles/install-by-deb
curl -L https://toolbelt.treasuredata.com/sh/install-debian-jessie-td-agent2.sh | sh
$ sudo /etc/init.d/td-agent restart [ ok ] Restarting td-agent (via systemctl): td-agent.service. $ sudo /etc/init.d/td-agent status ● td-agent.service - LSB: data collector for Treasure Data Loaded: loaded (/etc/init.d/td-agent; generated; vendor preset: enabled) Active: active (running) since Fri 2016-10-21 08:42:49 UTC; 10s ago Docs: man:systemd-sysv-generator(8) Process: 4780 ExecStop=/etc/init.d/td-agent stop (code=exited, status=0/SUCCESS) Process: 4846 ExecStart=/etc/init.d/td-agent start (code=exited, status=0/SUCCESS) Tasks: 9 (limit: 4915) Memory: 63.4M CPU: 447ms CGroup: /system.slice/td-agent.service ├─4879 /opt/td-agent/embedded/bin/ruby /usr/sbin/td-agent --log /var/log/td-agent/td-agent.log --daemon /var/run/td-agent/td-agent.pid └─4882 /opt/td-agent/embedded/bin/ruby /usr/sbin/td-agent --log /var/log/td-agent/td-agent.log --daemon /var/run/td-agent/td-agent.pid Oct 21 08:42:49 gather-twitter-data systemd[1]: Starting LSB: data collector for Treasure Data... Oct 21 08:42:49 gather-twitter-data td-agent[4846]: Starting td-agent: * td-agent Oct 21 08:42:49 gather-twitter-data systemd[1]: Started LSB: data collector for Treasure Data.
$ sudo /etc/init.d/td-agent stop
/etc/td-agent/td-agent.conf
3. HTTP로 샘플 로그들 수집
예제로 json 데이터를 HTTP로 보내보자
$ sudo /etc/init.d/td-agent restart $ curl -X POST -d 'json={"json":"message"}' http://localhost:8888/debug.test
이 데이터는 기본 설정에 의해 /var/log/td-agent/td-agent.log 에 저장이 된다. 다음과 같이 데이터를 확인해 보면 샘플 로그가 HTTP을 통해 파일에 저장된 것을 확인할 수 있다.
$ cat /var/log/td-agent/td-agent.log 2016-10-21 08:36:12 +0000 [info]: reading config file path=”/etc/td-agent/td-agent.conf”2016-10-21 08:36:12 +0000 [info]: starting fluentd-0.12.26 ….
2016-10-21 08:51:17 +0000 debug.test: {“json”:”message”}
4. Google Cloud Platform(GCP)과 연동을 위한 plugin 설치
$ sudo td-agent-gem install fluent-plugin-gcloud-pubsub