-
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 이 있다고 가정하에
- 서버상에서 로그파일명.log 를 S3로 Put
- 로그파일명_0.txt 로 Get Request 전송
- 에러가 발생하지 않으므로 S3에 존재한다고 판단하여 로그파일명_1.txt로 Get Request 전송
- 에러 ( "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 했습니다.
반응형'fluentd' 카테고리의 다른 글
fluentd을 이용하여 s3로 로그전송시 전송지연 발생 (0) 2020.05.14 aws spot instance 서버로그 관리(feat. fluentd) (0) 2020.04.27