본문 바로가기

리눅스

Fluentd를 사용하여 데이터를 집계하고 Elasticsearch와 AWS S3로 전달하는 방법(Aggregation and Forwarding with Fluentd)

반응형

Fluentd를 사용하여 데이터를 집계하고 Elasticsearch와 AWS S3로 전달하는 방법(Aggregation and Forwarding with Fluentd)

출처-https://www.fluentd.org/images/recipes/elasticsearch-s3-fluentd.png
출처-https://1670780810-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LR7OsqPORtP86IQxs6E%2F-LR7PDOnAgulIFNQiUNJ%2F-LR7PRYlS49XoqJurybc%2Ffluentd_ha.png?generation=1542034419307684&alt=media

서버 구성

노드(forwarder) 서버(aggregator) 서버(destination) 서버(visualization) 비고
fluentd fluentd elasticsearch kibana  
fluentbit   aws s3    
td-agent        
td-agent-bit        
  • Log forwarders(로그 전달자)는 일반적으로 로컬 이벤트를 수신하기 위해 모든 노드에 설치됩니다. 이벤트가 수신되면 네트워크를 통해 'Log aggregators'로 전달합니다. 로그 전달자의 경우 fluent-bit도 경량 처리에 적합합니다.
  • Log aggregators(로그 집계자)는 로그 전달자로부터 지속적으로 이벤트를 수신하는 데몬입니다. 이벤트를 버퍼링하고 주기적으로 데이터를 클라우드에 업로드합니다.

1. Fluentd 설치

Fluentd를 설치합니다.

# 예를 들어, Ubuntu에서 설치하는 경우
curl -L https://toolbelt.treasuredata.com/sh/install-ubuntu-focal-td-agent4.sh | sh
728x90

2. Fluentd 설정 파일 만들기

Fluentd는 설정 파일을 사용하여 동작하며 주로 td-agent.conf 또는 fluent.conf와 같은 파일에 설정이 기록됩니다.

  • 서버 에이전트(Fluentd or td-agent) 구성
    • 서버에서 로그 데이터를 수집하는 데 사용할 Fluentd 또는 td-agent를 설치합니다. 서버 에이전트는 데이터를 수집하고 전송할 역할을 합니다.
# TCP input
<source>
  @type forward
  port 24224
</source>

# HTTP input
<source>
  @type http
  port 8888
</source>

# Syslog input
<source>
  @type syslog
  port 24514
  bind 0.0.0.0
  tag syslog
</source>

# Log Forwarding
<match mytag.**>
  @type forward

  # primary host
  <server>
    host 192.168.0.1
    port 24224
  </server>
  # use secondary host
  <server>
    host 192.168.0.2
    port 24224
    standby
  </server>

  # use longer flush_interval to reduce CPU usage.
  # note that this is a trade-off against latency.
  <buffer>
    flush_interval 60s
  </buffer>
</match>
  • 서버 집계(Fluentd Aggregation) 구성
    • 서버 에이전트의 구성 파일에 데이터를 집계하는 설정을 추가합니다. 이 설정은 로그 데이터를 수집하고 필요한 형식으로 가공하는 역할을 합니다.
# Input(Nodes)
<source>
  @type forward
  port 24224
  bind 0.0.0.0
</source>

# Syslog
<source>
  @type syslog
  port 24514
  bind 0.0.0.0
  tag syslog
</source>

<match mytag.**>
<store>
  @type file
  path /tmp/fluentd/local
  compress gzip
  <buffer>
    timekey 1d
    timekey_use_utc true
    timekey_wait 10m
  </buffer>
</store>
  
<store>
  @type elasticsearch
  host localhost
  port 9200
  logstash_format true
</store>

<store>
  @type s3
  aws_key_id YOUR_AWS_KEY_ID
  aws_sec_key YOUR_AWS_SECRET_KEY
  s3_bucket YOUR_S3_BUCKET_NAME
  s3_region ap-northeast-1
  path vpc-5726398/logs
  <buffer tag,time>
    @type file
    path /tmp/fluentd/s3
    timekey 3600 # 1 hour partition
    timekey_wait 10m
    timekey_use_utc true # use utc
    chunk_limit_size 256m
  </buffer>
</store>
</match>

3. Elasticsearch 설정

Elasticsearch 서버에 로그 데이터를 전송하기 위한 Elasticsearch 구성을 추가합니다. Elasticsearch 호스트와 포트 등을 필요에 따라 수정합니다.

4. AWS S3 설정

AWS S3로 로그 데이터를 전송하기 위한 AWS S3 구성을 추가합니다. AWS 액세스 키, 시크릿 키, S3 버킷 이름 등을 필요에 따라 수정합니다.

 

참고URL

- high-availability : https://docs.fluentd.org/deployment/high-availability

- output-file : https://docs.fluentd.org/output/file

- output-elasticsearch : https://docs.fluentd.org/output/elasticsearch

- output-s3 : https://docs.fluentd.org/output/s3

- Fluentd vs. Fluent Bit(Side by Side Comparison) : https://logz.io/blog/fluentd-vs-fluent-bit/

 

728x90
반응형