반응형

n개의 클라이언트에서 발생하는 json로그를 서버 한 곳에서 보아야 할 일이 생겼는데,

해당 서버가 fluentd 방식을 지원한다고 하여, json 로그를 특정 폴더에 남겨서, 실시간으로 tailing 하여 fluentd의 forward 프로토콜을 이용하여 전송하는 방식으로 설정을 해보았다.


1. 서버 구성 (docker)

### docker-compose.yml
version: '2'
services:
  fluentd-recv:
    container_name: 'fluentd-recv'
    image: fluent/fluentd
    volumes:
      - ./conf:/fluentd/etc
    ports:
      - 24224:24224
### conf/fluent.conf
# Input 
<source>
  @type forward     # forward 프로토콜을 이용하여 전송받는다. (forward는 전송은 tcp로 하고, health check는 udp로 하는 방식)
  port 24224           # 24224 포트를 이용한한다.
</source>

# Output
<match **>     # 보내는 부분에서 tag를 지정하여, tag별로 설정 가능하다.
  @type file      # 받은 내용을 파일로 저장함
  path /fluentd/recv/*   # 이 경로에 저장함. (파일명을 명시할 수도 있는 것 같다.)
</match>


2. 클라 구성 (docker)

### docker-compose.yml
version: '2'
services:
  fluentd-send:
    container_name: 'fluentd-send'
    image: fluent/fluentd
    volumes:
      - ./conf:/fluentd/etc
### conf/fluent.conf
# Input
<source>
  @type tail     # 지정된 경로의 지정된 패턴에 해당하는 파일의 내용을 감시한다.
  path /fluentd/send/*.json     # 경로 지정 
  pos_file /fluentd/send/test_log.pos    # 파일의 position 관리 (이 설정이 없으면, 네트워크 이슈 발생 시 파일이 중복 전송되거나 잘려서 전송될 수 있으므로, 파일 내용의 정합성이 깨질 수 있다.)
  tag testlog    # 식별자 지정 (match에서 활용됨)
  format json  # 파일포맷 지정
  refresh_interval 5s      # 5초 주기로 감시한다.
</source>

# Output
<match testlog>   # tag가 testlog인 것만 아래 구문을 처리
  @type forward    # 전송 시 forward 프로토콜을 이용한다.
  flush_interval 5s # 5초 주기로 전송한다.
  <server>       # 전송할 서버 정보 입력
    host 192.168.0.10
    port 24224
  </server>
</match>

반응형
,