Fluentd Use Case
rsyslog 플러그인 활용하기
fluentd 는 기본적으로 rsyslog 를 수신하고 파싱할 수 있는 플러그인이 설치된다.
rsyslogd 자체적으로 로그를 모을수 있는 기능이 있으므로 aggregator 서버를 통해 rsyslog 를 1차적으로 모은 다음, 몇 대의 aggregator 서버에서 fluentd 에게 로그를 전달해줄 수 있도록 한다.
rsyslog data 흐름은 다음과 같다.
여러 대의 syslog 발생 서버 -> 몇 대의 중개 서버 -> fluentd -> elasticsearch
rsyslog config
remote rsyslog server
rsyslog 서비스를 이용한 로그가 발생하는 서버에 다음과 같이 설정한다.
vi /etc/rsyslog.conf
*.* @@192.168.179.141:10514
$ActionExecOnlyWhenPreviousIsSuspended on
& @@192.168.179.142:10514
& /var/log/localbuffer
$ActionExecOnlyWhenPreviousIsSuspended off
변경사항 적용을 위해 rsyslog 서비스를 재실행 한다.
systemctl restart rsyslogd
aggregator rsyslog server
remote 서버에서 전송하는 rsyslog를 수신해줄 중개 서버에 다음과 같이 설정한다.
vi /etc/rsyslog.conf
$ModLoad imtcp
$InputTCPServerRun 10514
*.* @@0.0.0.0:42185
변경사항 적용을 위해 rsyslog 서비스를 재실행 한다.
systemctl restart rsyslogd
fluentd config
rsyslog 중개 서버로부터 발생하는 로그를 수집하여 elasticsearch 로 저장하는 fluentd 설정이다.
# rsyslog
## Input
<source>
@type syslog
port 42185
protocol_type tcp
tag rsyslog
</source>
## Filter
<filter rsyslog.**>
@type record_transformer
<record>
hostname "#{Socket.gethostname}"
tag ${tag}
timestamp ${time}
</record>
</filter>
## Output
<match rsyslog.**>
@type copy
<store>
@type elasticsearch
hosts 192.168.179.81:9200,192.168.179.82:9200,
logstash_format true
logstash_prefix rsyslog
logstash_dateformat %Y%m
include_tag_key true
tag_key @log_name
flush_interval 10s
</store>
</match>