본문 바로가기

리눅스

우분투에 fluentd를 설치하는 방법

728x90

우분투에 fluentd를 설치하는 방법

로그 수집기 서버(Fluentd Aggregator)를 설치한 후 로그 전송 서버(Fluentd Agent)를 설치합니다.

운영체제 정보

root@node3:~$ lsb_release -d
Description:	Ubuntu 22.04.2 LTS

시스템 구성 현황

Hostname IP Address Fluentd 구분 비고
node2 192.168.10.72 Fluentd Collector  
node3 192.168.10.73 Fluentd Aggregator  

Fluentd 설치

Fluentd를 설치합니다.

curl -fsSL https://toolbelt.treasuredata.com/sh/install-ubuntu-jammy-fluent-package5-lts.sh | sh

kernel1

$ uname -a
Linux node2 5.15.0-94-generic #104-Ubuntu SMP Tue Jan 9 15:25:40 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
reboot
$ uname -a
Linux node2 5.15.0-97-generic #107-Ubuntu SMP Wed Feb 7 13:26:48 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
$ curl -fsSL https://toolbelt.treasuredata.com/sh/install-ubuntu-jammy-fluent-package5-lts.sh | sh
...
Installation completed. Happy Logging!
  • fluentd 버전 정보 확인
fluentd --version
$ fluentd --version
fluent-package 5.0.2 fluentd 1.16.3 (d3cf2e0f95a0ad88b9897197db6c5152310f114f)
  • fluentd 설정 파일
sudo vim /etc/fluent/fluentd.conf
더보기

---

####
## Output descriptions:
##


# Treasure Data (http://www.treasure-data.com/) provides cloud based data
# analytics platform, which easily stores and processes data from td-agent.
# FREE plan is also provided.
# @see http://docs.fluentd.org/articles/http-to-td
#
# This section matches events whose tag is td.DATABASE.TABLE
<match td.*.*>
  @type tdlog
  @id output_td
  apikey YOUR_API_KEY

  auto_create_table
  <buffer>
    @type file
    path /var/log/fluent/buffer/td
  </buffer>

  <secondary>
    @type secondary_file
    directory /var/log/fluent/failed_records
  </secondary>
</match>

## match tag=debug.** and dump to console
<match debug.**>
  @type stdout
  @id output_stdout
</match>

####
## Source descriptions:
##

## built-in TCP input
## @see http://docs.fluentd.org/articles/in_forward
<source>
  @type forward
  @id input_forward
</source>

## built-in UNIX socket input
#<source>
#  type unix
#</source>

# HTTP input
# POST http://localhost:8888/<tag>?json=<json>
# POST http://localhost:8888/td.myapp.login?json={"user"%3A"me"}
# @see http://docs.fluentd.org/articles/in_http
<source>
  @type http
  @id input_http
  port 8888
</source>

## live debugging agent
<source>
  @type debug_agent
  @id input_debug_agent
  bind 127.0.0.1
  port 24230
</source>

####
## Examples:
##

## File input
## read apache logs continuously and tags td.apache.access
#<source>
#  @type tail
#  @id input_tail
#  <parse>
#    @type apache2
#  </parse>
#  path /var/log/httpd-access.log
#  tag td.apache.access
#</source>

## File output
## match tag=local.** and write to file
#<match local.**>
#  @type file
#  @id output_file
#  path /var/log/fluent/access
#</match>

## Forwarding
## match tag=system.** and forward to another fluentd server
#<match system.**>
#  @type forward
#  @id output_system_forward
#
#  <server>
#    host 192.168.0.11
#  </server>
#  # secondary host is optional
#  <secondary>
#    <server>
#      host 192.168.0.12
#    </server>
#  </secondary>
#</match>

## Multiple output
## match tag=td.*.* and output to Treasure Data AND file
#<match td.*.*>
#  @type copy
#  @id output_copy
#  <store>
#    @type tdlog
#    apikey API_KEY
#    auto_create_table
#    <buffer>
#      @type file
#      path /var/log/fluent/buffer/td
#    </buffer>
#  </store>
#  <store>
#    @type file
#    path /var/log/fluent/td-%Y-%m-%d/%H.log
#  </store>
#</match>

---

  • fluentd 구성 파일 검사
/usr/sbin/fluentd --dry-run -c /etc/fluent/fluentd.conf
더보기

---

$ /usr/sbin/fluentd --dry-run -c /etc/fluent/fluentd.conf
2024-03-01 19:35:41 +0900 [info]: init supervisor logger path=nil rotate_age=nil rotate_size=nil
2024-03-01 19:35:41 +0900 [info]: parsing config file is succeeded path="/etc/fluent/fluentd.conf"
2024-03-01 19:35:41 +0900 [info]: gem 'fluentd' version '1.16.3'
2024-03-01 19:35:41 +0900 [info]: gem 'fluent-plugin-calyptia-monitoring' version '0.1.3'
2024-03-01 19:35:41 +0900 [info]: gem 'fluent-plugin-elasticsearch' version '5.4.0'
2024-03-01 19:35:41 +0900 [info]: gem 'fluent-plugin-flowcounter-simple' version '0.1.0'
2024-03-01 19:35:41 +0900 [info]: gem 'fluent-plugin-kafka' version '0.19.2'
2024-03-01 19:35:41 +0900 [info]: gem 'fluent-plugin-metrics-cmetrics' version '0.1.2'
2024-03-01 19:35:41 +0900 [info]: gem 'fluent-plugin-opensearch' version '1.1.4'
2024-03-01 19:35:41 +0900 [info]: gem 'fluent-plugin-prometheus' version '2.1.0'
2024-03-01 19:35:41 +0900 [info]: gem 'fluent-plugin-prometheus_pushgateway' version '0.1.1'
2024-03-01 19:35:41 +0900 [info]: gem 'fluent-plugin-record-modifier' version '2.1.1'
2024-03-01 19:35:41 +0900 [info]: gem 'fluent-plugin-rewrite-tag-filter' version '2.4.0'
2024-03-01 19:35:41 +0900 [info]: gem 'fluent-plugin-s3' version '1.7.2'
2024-03-01 19:35:41 +0900 [info]: gem 'fluent-plugin-sd-dns' version '0.1.0'
2024-03-01 19:35:41 +0900 [info]: gem 'fluent-plugin-systemd' version '1.0.5'
2024-03-01 19:35:41 +0900 [info]: gem 'fluent-plugin-td' version '1.2.0'
2024-03-01 19:35:41 +0900 [info]: gem 'fluent-plugin-utmpx' version '0.5.0'
2024-03-01 19:35:41 +0900 [info]: gem 'fluent-plugin-webhdfs' version '1.5.0'
2024-03-01 19:35:41 +0900 [info]: starting fluentd-1.16.3 as dry run mode ruby="3.2.2"
2024-03-01 19:35:41 +0900 [info]: using configuration file: <ROOT>
  <match td.*.*>
    @type tdlog
    @id output_td
    apikey xxxxxx
    auto_create_table
    <buffer>
      @type "file"
      path "/var/log/fluent/buffer/td"
    </buffer>
    <secondary>
      @type "secondary_file"
      directory "/var/log/fluent/failed_records"
    </secondary>
  </match>
  <match debug.**>
    @type stdout
    @id output_stdout
  </match>
  <source>
    @type forward
    @id input_forward
  </source>
  <source>
    @type http
    @id input_http
    port 8888
  </source>
  <source>
    @type debug_agent
    @id input_debug_agent
    bind "127.0.0.1"
    port 24230
  </source>
</ROOT>
2024-03-01 19:35:41 +0900 [info]: finished dry run mode

---

  • fluentd 서비스 실행
sudo systemctl start fluentd.service
  • fluentd 서비스 상태 확인
sudo systemctl status fluentd.service
  • HTTP를 통해 샘플 로그 게시
curl -X POST -d 'json={"json":"message"}' http://localhost:8888/debug.test
  • fluentd 로그 확인
tail -n 1 /var/log/fluent/fluentd.log
$ tail -n 1 /var/log/fluent/fluentd.log
2024-03-01 17:00:50.415554123 +0900 debug.test: {"json":"message"}

2. 로그 수집기 서버(Fluentd Aggregator) 설치

Fluentd 구성

  • Fluentd 구성 파일을 편집하여 로그를 수집할 방법을 지정합니다. 기본적으로 구성 파일은 /etc/td-agent/td-agent.conf에 있습니다.
sudo vim /etc/td-agent/td-agent.conf

예를 들어, 로그를 수집하여 Elasticsearch로 전송하는 구성은 다음과 같을 수 있습니다.

<source>
  @type tail
  path /var/log/nginx/access.log
  pos_file /var/log/td-agent/nginx-access.log.pos
  tag nginx.access
  format none
</source>

<match nginx.access>
  @type elasticsearch
  host localhost
  port 9200
  logstash_format true
</match>

Fluentd 구성 파일 검사

/usr/sbin/fluentd --dry-run -c /etc/fluent/fluentd.conf

Fluentd 재시작

  • 구성 파일을 저장하고 Fluentd를 재시작하여 변경 사항을 적용합니다.
sudo systemctl restart td-agent

3. 로그 전송 서버(Fluentd Agent) 설치

Fluentd 구성

  • 로그를 전송할 대상 및 포맷을 지정하기 위해 로그 전송 서버(Fluentd Agent)의 구성 파일을 편집합니다.
sudo vim /etc/td-agent/td-agent.conf

예를 들어, 로그를 수집기 서버(Fluentd Aggregator)로 전송하는 구성은 다음과 같을 수 있습니다.

<source>
  @type syslog
  port 5140
  bind 0.0.0.0
</source>

<match **>
  @type forward
  <server>
    host 192.168.1.100
    port 24224
  </server>
</match>

Fluentd 구성 파일 검사

/usr/sbin/fluentd --dry-run -c /etc/fluent/fluentd.conf

Fluentd 재시작

  • 구성 파일을 저장하고 Fluentd를 재시작하여 변경 사항을 적용합니다.
sudo systemctl restart td-agent

 

이제 로그 수집기 서버(Fluentd Aggregator)와 로그 전송 서버(Fluentd Agent)가 모두 설정되었습니다. 로그를 수집하고 전송하여 원하는 대상에 저장할 수 있습니다.

 

728x90