콘텐츠로 이동

Fluentd 사용하기

fluentd 를 사용하여 HIVE 애널리틱스 v2에서 사용하는 사용자 정의 로그를 전송하는 방법입니다.

Fluentd 설치

Note

td-agent  v1.x  버전 설치를 권장 합니다.

각 언어 별 td-agent 라이브러리가 제공됩니다.  (https://docs.fluentd.org/language-bindings)

td-agent 설치

  • http://docs.fluentd.org/articles/install-by-rpm
$ curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent2.sh | sh
  • td-agent 설정 파일 수정
$ vim /etc/td-agent/td-agent.conf

Fluentd 기본 설정 설명

  • 로그파일 : 로그파일의 기본경로는 /var/log/td-agent 이며 하위에 td-agent.log 파일이 존재 합니다.
  • 이벤트 : Fluentd 에서 이벤트는 record , log 의 의미를 가집니다.
  • <source> : 다양한  input을 받기 위해 사용하며, @type을 이용하여 다양한 플러그인을 사용 할 수 있습니다.
  • <match> :  source 를 통해 전달된 input 이벤트를 처리 합니다.

Fluentd  Plugin

  • 플러그인 확인 및 설치 : 플러그인 리스트를 확인 후 필요한 플러그인은 설치 후 사용 해야합니다.
  • (tail , forward , stdout 등 기본 플러그인은 제공 되며, forest 플러그인 등 다른 플러그인은 설치 후 사용해야 합니다.)
#플러그인 리스트 확인
$ td-agent-gem list   # td-agent-gem install [원하는 플러그인] 형식으로 플러그인 설치가 가능합니다.

# fluent-plugin-forest 플러그인 설치.
$ td-agent-gem install fluent-plugin-forest
  • tag (태크) : 태그는 이벤트를 구성하는 구분값이며, <match>섹션은 태그값과 일치하는 값을 가져와 처리합니다.
# tag 사용 예시
<source>
  @type tail
  tag ha2union.game.com2us # in_tail 플러그인으로 전달된 이벤트에는 다음 태그가 붙음
  path /var/log/sample.log
</source>

# source를 통해 전송된 input 이벤트는 이벤트의 태그와 매핑되는 match 태그로 전송됩니다.
<match ha2union.game.com2us>
  @type stdout
<match>

[Input 플러그인]

  • in_tail : 대표적인 in_tail 플러그인은 파일을 tail 해서 데이터를 읽는데 사용한다 .
<source>
  @type tail
  path /var/log/com2us.log                           # 파일등을 읽을 경로
  pos_file /var/log/fluent/com2us_posfile.log.pos    # 마지막으로 읽은 위치를 기록함
  tag ha2union.game.com2us                           # 이벤트의 태그, 전달될 이벤트에 태그가 붙음
    </source>

    # pos_file : fluentd가  실행 되었을  파일의 마지막에 읽은 부분부터 다시 처리함.
  • in_forward : 보통 다른 Fluentd 노드로부터 데이터를 전달 받기 위해 사용한다.
<source>
  @type forward
  port 24224        # 수신할 포트 ( 기본  : 24224 )
  bind 0.0.0.0      # 수신할 바인드 주소 ( 기본  : 0.0.0.0(모든 주소))
</source>

[Output 플러그인]

Note

Output 플러그인은 < match > 섹션에 정의하며, Buffering과 Flushing에 대한 설정을 < match > 섹션안에 < buffer > 서브 섹션으로 정의한다.

  • output_stdout : 이벤트를 표준출력(stdout)으로 내보냄, 주로 디버깅용으로 사용한다.
<match **>
  @type stdout
</match>
  • output_forward : 다른 Fluentd 노드로 이벤트를 전달할때 사용한다.
<match **>
  @type forward

  <server>
    name com2us.fluentd1
    host [전송받을 서버1  IP or 도메인]
    port 24224
    weight 50                    # <server> 섹션에서 로드 밸런싱 가중치 설정
  </server>
  <server>
    name com2us.fluentd2
    host [전송받을 서버2  IP or 도메인]
    port 24224
    weight 50                   # <server> 섹션에서 로드 밸런싱 가중치 설정
  </server>
</match>
  • fluent-plugin-forest : tag 명을 사용하여 로그파일을 저장 할 수 있는 기능을 제공 합니다.
  • (다음과 같이 로컬에 로그를 저장할 수 있도록 설정 할 수 있습니다.)
<store>
  @type forest
  subtype file
  <template>
    time_slice_format %Y%m%d%H
    time_slice_wait 10s
    path /com2us/log/td-agent/data/${tag}/${tag}.*.log
    compress gz
    format json
  </template>
</store>

Fluentd 사용 예시

Fluentd 를 사용하여 아래와 같은 방식으로 로그전송이 가능합니다. 아래 링크를 클릭하여 자세한 내용을 확인하세요.

설정 수정 적용

  • td-agent.conf 문법확인하기
$ td-agent -c /etc/td-agent/td-agent.conf
  • td-agent 재시작
$ service td-agent restart