반응형
반응형

사내에서 플랫폼 로그 발송 시 nxlog를 사용하게 되었는데, 매번 클릭질로 설치하기가 귀찮아서, Batch Script + Powershell을 이용하여 자동화해보았다.


nxlog 자체적으로 /quite, /passive 등의 옵션을 제공하고 있어서, 사용자가 다음버튼을 연타하지 않아도 default설정으로 잘 설치가 된다.


자동으로 설치가 된다고해도 nxlog 설정 파일에 파싱할 로그 경로정도는 수정을 해줘야하지만, 사실 서버 여러대에 설치가 되는 경우  같은 설정을 사용하기 때문에, 설정 파일 하나만 가져다가, default nxlog 설정 파일을 덮어버리는 식으로 구현하였다.

@ECHO off

powershell.exe -Command "msiexec /i nxlog-ce-x.x.xxxx.msi /passive"
powershell.exe -Command "Copy-Item -Force nxlog_test.conf -Destination 'C:\Program Files (x86)\nxlog\conf\nxlog.conf'"

sc start nxlog


반응형
,
반응형

Linux 환경의 경우, fluentd native나 td-agent 모두 stable 버전으로 제공되는데,

Windows 환경의 경우는 공식홈에서 밀고 있는 td-agent 조차 베타버전으로 제공이 되고 있는 상황이고,

Document를 샅샅히 뒤져보다보면, nxlog 라는 놈을 하나 소개해준다. (http://docs.fluentd.org/v0.12/articles/windows)


실제로 테스트를 해봐도 tg-agent랑 nxlog 둘다 써봤지만, 제대로되는 게 nxlog 뿐인것 같다.

하지만, nxlog에서는 fluentd의 forward protocol을 지원하지 않아, tcp를 이용해서 전송을 해야 했다.


1. 서버 설치 (docker)

### docker-compose.yml
version: '2'
services:
  fluentd-recv:
    container_name: 'fluentd-recv'
    image: fluent/fluentd
    volumes:
      - ./conf:/fluentd/etc
    ports:
      - 5170:5170
### conf/fluent.conf
# Input
<source>
  @type tcp     # tcp 프로토콜로 데이터를 받는다.
  port 5170      
  tag testlog    # testlog라는 식별자를 추가한다.
  format json   # json 포맷만 받음.
</source>

# Output
<match testlog> # testlog tag를 가진 데이터만 처리함
  @type file    # 파일로 저장
  path /fluentd/recv/* 
</match>


2. nxlog (Client) 설치

link : http://nxlog.co/products/nxlog-community-edition/download

위 링크에서 다운받아서, 설치하고 나면 C:\Program Files(x86)\nxlog 경로에 있는 nxlog.conf를 아래와 같이 수정한다.

### nxlog.conf
define ROOT C:\Program Files (x86)\nxlog

Moduledir %ROOT%\modules
CacheDir %ROOT%\data
Pidfile %ROOT%\data\nxlog.pid
SpoolDir %ROOT%\data
LogFile %ROOT%\data\nxlog.log

<Input in>
    Module      im_file      # fluentd의 input tail plugin의 역할을 함
	File		'D:\fluentd_test\send\\*.json'     # 해당 경로에 있는 파일들을 감시한다. (와일드카드를 사용하려면 \를 하나 더 붙여줘야 된다.)
	SavePos 	TRUE    # 파일의 position 관리 enable / disable
	InputType	LineBased	 # 파일 내용의 라인 단위로 파싱한다.
</Input>

<Output out>
    Module      om_tcp     # in으로 들어온 파일을 tcp형태로 전송한다.
    Host        192.168.0.10 # 전송할 서버 정보 입력
    Port        5170
</Output>

<route 1> # 위에 설정한 내용들을 어떻게 동작시킬지 지정한다.
    Path        in => out      # in으로 받아서 out으로 보낸다.
</route>

### 전송이 됬는지 안됬는지 판단이 어려우므로 테스트 시 추가한 설정 (선택사항) ###
# 파일을 tcp로 보내고 난 뒤, 내용을 지정한 경로에 파일로 저장한다. 
<Output outfile>
  Module om_file
  File   'D:\fluentd_test\send\backup.log'
</Output>

<route 2> # Route 1과 마찬가지로 동작방식 지정
    Path        in => outfile
</route>
반응형
,
반응형

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>

반응형
,
반응형