Fluentd 버퍼 테스트 하기(3) - Buffer 테스트 진행 및 결과

임태빈·2022년 1월 2일
0

project

목록 보기
3/4

안녕하세요.

갈비만두를 좋아하는 개발자 임태빈입니다.

오늘은 Fluentd 버퍼 테스트 하기 마지막 파트인 Buffer 테스트를 진행해보려고 합니다.

먼저 fluentd서버 두개를 구축해보겠습니다.

두개의 서버 이름을 구분지어서 얘기하는게 이해하시기 좋을거 같아 fluentd1,fluentd2로 설명드리겠습니다.

fluentd1는 웹서버로부터 로그를 받아 버퍼를 활용해 데이터를 모아서 보내주는 중간역하을 해줄 예정입니다.

fluentd2에 경우 fluentd1에서 버퍼에 모아진 데이터를 출력하는 부분입니다.

fluentd2는 버퍼가 잘들어오는지를 테스트 하기 위해 출력만 하는 것을 생각하게 되었습니다.

그러면 fluentd1과 fluentd2의 conf파일들을 작성해보겠습니다.

#vi fluentd1.conf
  <source>
    @type forward
    port 24224
  </source>
  <match *.log>
    @type forward
    send_timeout 60s
    recover_wait 10s
    <buffer>
      @type "file"
      flush_interval 5s
      path "/home/ubuntu/test_buffer"
      retry_wait 5s
      retry_type periodic
    </buffer>
    <server>
      name "ubuntu"
      host "192.168.25.56"
      port 24223
    </server>
  </match>
#vi fluentd2.conf
  <source>
    @type forward
    port 24224
    bind "0.0.0.0"
  </source>
  <match *.log>
    @type stdout
  </match>

이제 이 파일들을 활용해서 테스트를 해보겠습니다.

저는 gin웹 서버는 로컬에서 실행하고, fluentd1,fluentd2는 도커를 활용해 각각의 컨테이너를 만들어서 진행해보겠습니다.

docker run -it --name fluentd1 -p 24224:24224 tae2089/fluentd:1.3
docker run -it --name fluentd2 -p 24223:24224 tae2089/fluentd:1.3

테스트 시작전 저의 경우 데이터를 많이 요청하기 위해서 k6라는 load test tool을 활용해 http 통신을 여러개 쏘아서 진행했습니다:) 페이지 새로고침을 하셔도 좋고 jmeter를 활용해서 진행하셔도 괜찮습니다.

그러면 이제 테스트를 진행해보겠습니다.

첫번째로 해볼 테스트는 fluentd1이 로그를 모아 fluentd2에 데이터를 전송하던 중에 fluentd2가 모종의 이유로 종료되면 fluentd1에 있는 데이터가 어떻게 되는지 입니다.

위 사진을 통해 fluentd1은 서버가 열릴때까지 데이터를 모으는 것으로 보여집니다. 14초에서18초에 관련된 데이터에 경우 전송도중 갑작스런 서버 중단으로 인해 데이터가 손실 된것으로 보입니다.

두번째로 해볼 테스트는 gin을 통해 fluentd1에 데이터가 모여서 fluentd2에 보낼때 fluentd1이 종료가 되었을 경우, 이를 다시 재실행 했을때 데이터를 유지하고 있는지에 대한 것입니다. 먼저 첫번째 사진에 경우 fluentd1이 데이터가 들어오다가 멈추는 모습을 보여주는 사진입니다.

37초에 stop되었기 때문에 데이터가 fluentd2에 전달되지 않습니다. 그러다가 fluentd1을 재실행하니 fluent1에 버퍼에 들어있더 데이터가 fluentd2에 들어가지게 됩니다. 주황색으로 표신한 부분이 관련된 데이터가 들어가는 것을 보여줍니다.

이 두가지 테스트를 통해 flush_interval에 많은 영향을 받는다는 것을 볼 수 있었습니다. 파일 버퍼를 사용해서 그런거일 수도 있지만 다양한 옵션을 가지고 여러 케이스를 좀 더 해보면 좋겠다고 생각이 들었습니다.

이 글을 읽고 잘못된 부분이 있거나 궁금하신 부분이 있다면 댓글 달아주시면 감사드리겠습니다:)

https://github.com/tae2089/go-fluentdgin

profile
golang과 서버 개발을 하고 있는 개발자입니다.

0개의 댓글