Fluentd 는 125 개 이상의 시스템들에서 모든 로그를 수집할 수 있는 오픈 소스 로그 수집기(log collector) 이다.
대부분의 어플리케이션이 자체 로그를 기록하지만, 로그 수집기는 이 다양한 로그들을 원하는 형태로 취합하여 분석/통계가 용이하도록 해준다.
일단 서버에 설치되면 백그라운드에서 다양한 유형의 데이터를 JSON 형태로 수집, 분석, 변환, 저장 등을 한다.
아래 순서대로 설치를 하겠지만, fluentd 가 아닌 td-agent 를 설치할 것이다.
td-agent 란 Ruby 로 작성된 fluentd 를 사용자가 쉽게 사용할 수 있도록 트레저데이터(Treasure Data) 사에서 제공하는 래퍼 프로그램이다.
fluentd 의 기능이나 업데이트를 직접 제어하려는 것이 아니라면, Ruby 를 모르고 싶은 사용자라면 td-agent 를 사용하는 것이 안정성 및 정신건강에 좋다.
1. 설치 전 유의사항
Fluentd 를 설치 전, 언젠가 발생할지 모르는 문제를 예방하기 위해 시스템의 파일 디스크립터(File Descriptors) 설정을 바꿔줘야 한다.
파일 디스크립터란 운영체제의 파일/소켓 등을 지칭하는 숫자이다.
프로세스 자원한도를 늘리기 위해 ulimit -n 명령을 사용하여 현재 파일 디스크립터 최대치를 확인한다.
$ ulimit -n
1024
최대치가 1024 로 보여진다면 fluentd 운영하기에 많이 부족하므로 많이 늘려야 한다.
fluentd 의 플러그인과 설정(in_tail 의 파일수 / in_forward 의 접속수 / buf_file 의 버퍼 정크수 등) 에 따라 다르겠지만 65536 정도가 안전하다.
아래와 같이 수정하고 재부팅하여 적용된 수치를 확인한다.
$ sudo vi /etc/security/limits.conf
...
root soft nofile 65536
root hard nofile 65536
* soft nofile 65536
* hard nofile 65536
또 한가지, 네트워크 커널 파라미터 최적화.
많은 Fluentd 인스턴스로 구성된 고부하 환경의 경우, TCP_WAIT 에 문제가 있다면 아래 매개 변수를 /etc/sysctl.conf 파일에 추가한다.
$ vi /etc/sysctl.conf
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 10240 65535
sysctl -p 를 입력하거나 서버를 재부팅하여 변경 사항을 적용한다.
2. 설치할 플랫폼 선택
설치는 다양한 패키지를 제공하며 원하는 플랫폼의 설치를 진행하면 된다.
Redhat / Ubuntu / Debian / OSX / Ruby / Chef / source
windows 는 v0.14 (td-agent3) 부터 지원한다. 현재 최신 안정화(stable) 버전은 v0.12 (td-agent2).
나 역시 stable 버전을 설치하려고 했지만, 필요한 기능이 td-agent3 에 있어서 v0.14(td-agent3) 를 설치했다.
현재 EC2 AMI 버전은 amzn-ami-hvm-2016.09 를 쓰고 있었는데 td-agent 저장소 페이지가 404 라 설치 실패했다.
http://packages.treasuredata.com/3/redhat/latest/x86_64/repodata/repomd.xml: [Errno 14] HTTP Error 404 - Not Found Trying other mirror.
검색해 보니 RHEL 에 대응이 좀 늦는 듯... 이건 시간이 지나면 업데이트 해주겠지.
일단 Ubuntu-xenial-16.04 로 진행했다.
현재 stable 버전이나 다른 플랫폼 설치는 아래 링크를 참조한다.
http://docs.fluentd.org/v0.12/categories/installation
3. 설치
아래 한줄의 명령으로 apt 저장소(/etc/apt/sources.list.d/treasure-data.list) 를 등록하고, td-agent3 을 설치한다.
$ curl -L https://toolbelt.treasuredata.com/sh/install-ubuntu-xenial-td-agent3.sh | sh
4. 데몬 실행
/etc/init.d/td-agent 는 start | stop | restart | status | reload 명령을 사용할 수 있다.
$ /etc/init.d/td-agent start
Starting td-agent: [ OK ]
$ /etc/init.d/td-agent status
● td-agent.service - LSB: data collector for Treasure Data
Loaded: loaded (/etc/init.d/td-agent; bad; vendor preset: enabled)
Active: active (running) since Thu 2017-04-06 05:58:25 UTC; 58s ago
...
5. 테스트
td-agent 의 설정 파일 /etc/td-agent/td-agent.conf 의 기본 설정은 HTTP 에서 로그를 가져 와서 stdout (/var/log/td-agent/td-agent.log) 로 라우팅하도록 되어 있다.
설정 파일을 보기 전에, curl 명령을 사용하여 샘플 로그를 보내 테스트 해본다.
$ curl -X POST -d 'json={"json":"message"}' http://localhost:8888/debug.test
실시간으로 로그가 라우팅 되는 것을 아래 명령으로 확인할 수 있다.
$ tail -f /var/log/td-agent/td-agent.log
2017-04-05 07:05:41 +0000 debug.test: {"json":"message"}
fluentd 준비 완료!
WRITTEN BY
- 손가락귀신
정신 못차리면, 벌 받는다.