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
- td-agent 설정 파일 수정
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)으로 내보냄, 주로 디버깅용으로 사용한다.
- 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 재시작