Fluentd는 오픈소스 기반의 Data collector이자 aggregator 입니다.
Fluentd를 설치하는 방법은 td-agent 패키지를 이용해서 설치하는 방법과 소스를 직접 빌드하여 설치하는 방법이 있습니다.
본 글에서는 소스를 직접 빌드하여 Fluentd를 설치했던 과정을 다룹니다. 직접 설치했던 경험을 기반으로 작성되었습니다. 이 글이 Fluentd를 standalone으로 설치하시려는 분들에게 도움이 되셨으면 합니다. 설치 환경은 Ubuntu 20.04.5 LTS 입니다.
루비는 Fluentd 소스를 빌드하기 위해 필요하기 때문에 먼저 루비를 장비에 설치해야 합니다. 루비 설치 전 패키지 최신 목록을 업데이트한 후 다음의 패키지들이 설치되었는지 확인합니다.
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install gcc, make, autoconf, bison, gperf, build-essential, libssl-dev, libreadline-dev, libffi-dev, zlib1g, zlib1g-dev
아래 명령으로 루비 소스코드 아카이브를 내려받은 후에 압축을 해제합니다.
$ wget https://cache.ruby-lang.org/pub/ruby/3.2/ruby-3.2.0.tar.gz
$ tar xvzf ruby-3.2.0.tar.gz
압축이 해제된 루비 디렉토리로 이동하여 configure 스크립트를 실행합니다.
$ ./configure --prefix=/usr/local --disable-install-doc
configure 스크립트 실행이 끝나면 make 명령으로 루비 소스를 빌드합니다.
$ make
빌드 과정에서 오류가 발생하면 ruby 디렉토리를 삭제한 후 다시 세팅해서 configure 절차부터 재시도 하는 것을 권장합니다.
make 빌드가 오류없이 완료되면 아래 명령으로 빌드한 루비를 설치합니다.
$ sudo make install
설치가 오류없이 완료되면 최종적으로 루비 명령을 실행하여 정상 동작 여부를 확인합니다.
$ ruby --version
Fluentd 소스코드를 github에서 clone 받습니다.
$ git clone -b v1.15.3 https://github.com/fluent/fluentd.git
클론 받은 소스코드 디렉토리로 이동한 후 bundle install 명령으로 Fluentd 소스에 필요한 RubyGem들을 세팅합니다.
$ cd fleuntd
$ bundle install
의존성 세팅이 완료되면 아래의 명령으로 소스를 빌드합니다.
$ bundle exec rake build
빌드가 성공하면 pkg 디렉토리에 gem 파일이 생성됩니다. 이 gem을 아래 명령으로 설치합니다.
$ sudo gem install pkg/fluentd-v1.15.3.gem
gem 설치가 끝나면 Fluentd 설치는 마무리 됩니다. 아래의 명령으로 Fluentd 설정 파일을 생성해줍니다.
$ fluentd --setup /etc/fluent
마지막으로 아래 명령으로 Fluentd를 실행하여 정상 동작하는지 확인합니다.
$ fluentd -c /etc/fluent/fluentd.conf -vv &
Fluentd를 종료하려면 pkill 명령으로 종료시킬 수 있습니다.
$ sudo pkill -f fluentd
Fluentd를 systemd 데몬으로 관리되는 서비스로 추가하기 위한 작업입니다. 필수 절차는 아니며 선택사항 입니다.
fluentd 유저를 생성해서 시스템 유저로 등록합니다.
$ sudo adduser --system --shell /bin/bash --no-create-home fluentd
fluentd 그룹을 생성합니다.
$ sudo addgroup --group fluentd
fleuntd 유저를 fluentd 그룹에 추가합니다.
$ sudo usermod -aG fluentd fluentd
Fluentd 워킹디렉토리의 소유를 fleuntd 유저와 그룹으로 변경합니다.
$ sudo chown -R fluentd:fluentd /etc/fluentd
Fluentd 로깅디렉토리를 만들고 소유를 fluentd 유저와 그룹으로 변경합니다.
$ sudo mkdir /var/log/fluentd
$ sudo chown -R fluentd:fluentd /var/log/fluentd
Fluentd 서비스 등록을 위해 systemd 스크립트를 작성합니다.
$ sudo vi /etc/systemd/system/fluentd.service
[Unit]
Description=Fluentd
Documentation=http://www.fluentd.org/
Wants=network-online-target
After=network-online-target
[Service]
Type=forking
RuntimeDirectory=data
WorkingDirectory=/etc/fleuntd
ExecStart=/usr/local/bin/fluentd -c /etc/fluentd/fluent.conf -o /var/log/fluentd/fluent.log -d /etc/fluentd/fluent.pid
User=fluentd
Group=fluentd
StandardOutput=journal
StandardError=inherit
TimeoutStartSec=75
TimeoutStopSec=0
KillSignal=SIGTERM
KillMode=process
SendSIGKILL=no
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
새로 작성한 Fluentd 서비스 스크립트를 systemd 데몬에 반영합니다.
$ sudo systemctl daemon-reload
Fluentd 서비스를 활성화 합니다.
$ sudo systemctl enable fluentd.service
이제 Fluentd 서비스를 systemctl로 시작할 수 있습니다.
$ sudo systemctl start fluentd
마지막으로 서비스 시작 후 상태를 조회해보고 정상 동작 여부를 확인합니다.
$ sudo systemctl status fluentd