ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • fluentd를 이용하여 S3로 로그전송시 불필요한 Get Request를 없애는 방법
    fluentd 2020. 7. 23. 17:27

    Fluentd를 이용하여 S3로 로그를 전송할 때에 다음과 같은 설정을 사용하면 불필요한 Get Request가 발생하게 됩니다.

    check_object true (default true)
    s3_object_key_format 에서 %{index}를 사용

     

    상기 설정으로 S3에 저장되는 로그파일은 로그파일명_0.txt, 로그파일명_1.txt 형식으로 번호가 자동적으로 부여되면서 저장되게 됩니다.

    제 경우에는 60초마다 로그를 전송하는데 1시간에 60개의 로그파일이 저장되고 24시간이면 1440개의 로그파일이 저장됩니다. 마찬가지로 로그파일명_0.txt 부터 로그파일명_1439.txt 까지 생기게 되죠.

     

    잠시 fluentd가 로그파일을 중복되지 않고 전송하는 흐름을 살펴보면

    S3에 로그파일명_0.txt 이 있다고 가정하에 

    1. 서버상에서 로그파일명.log 를 S3로 Put
    2. 그파일명_0.txt 로 Get Request 전송
    3. 에러가 발생하지 않으므로 S3에 존재한다고 판단하여 그파일명_1.txt로 Get Request 전송
    4. 에러 ( "errorCode": "NoSuchKey"가 발생하므로 S3에 없다고 판단하여 그파일명_1.txt로 Put Request

    입니다.

     

    그러므로 제 경우에는 로그파일 하나당 24시간동안 보내는 Get Request가 1+2+3+~~~+1439 = 1,036,080 가 됩니다.

    이걸 비용으로 계산하면 

    0.00035 USD ( 1000 Request당 ) X 1,091.08 (1,036,080을1000로 나눈값 ) = 0.381878 USD 

    로그파일 1개당 1일 0.381878 USD 

    월로 따지면 11.45634 USD ( 30일 기준 )

    전송해야 하는 로그파일이 10개만 되어도 115 USD

    S3 Get Request비용(서울리전)

    저는 날짜별로 폴더를 나누어서 저장했어도 월 500 USD 정도 Get Request비용을 지불했습니다.

     

    S3에 저장되는 로그파일을 index번호로 하지 않고 타임스탬프로 하면 중복될 이유가 없으므로 다음과 같이 변경했습니다.

    check_object false
    s3_object_key_format 에서 %{hms_slice}를 사용

     

    여기서 %{hms_slice}를 사용하면 오후 2시10분46초인 경우에 031046으로 생성되게 됩니다. 

    time_slice_format은 utc를 true로 지정하지 않는 이상 Local timezone을 사용하게끔 되어 있습니다만,

    %{hms_slice}는 03:10:46T09:00형식으로 됩니다.

    그래서 저장된 시간과 파일명이 다르므로 약간 보기 어려워서 다음과 같이 설정하면 Local timezone형식으로 파일명에 사용할 수 있습니다.

    s3_object_key_format 에서 %H%M%S 를 사용

     

    이거 찾느라고 엄청 구글링해보았는데 아무도 사용하지 않아서 try & run 했습니다.

    반응형

    댓글

Designed by Tistory.