높은 처리량을 위한 Amazon ECS 로그 구성하기
높은 처리량을 위한 Amazon ECS 로그 구성하기
높은 로그 처리량 시나리오에서 FireLens와 Fluent Bit를 사용해 로그를 구성하고 최적화하는 방법을 알아봐요. 메모리 버퍼링과 파일시스템 버퍼링, chunk 개념을 다뤄요.
출처: 문서
본문
높은 로그 처리량 시나리오에서는 FireLens와 함께 awsfirelens 로그 드라이버와 Fluent Bit를 사용할 것을 권장해요. Fluent Bit는 리소스 효율성이 높고 수백만 개의 로그 레코드를 처리할 수 있는 경량 로그 프로세서예요. 그러나 규모가 커질 때 최적의 성능을 달성하려면 구성을 튜닝해야 해요.
이 섹션은 시스템 안정성을 유지하고 데이터 손실이 없도록 하면서 높은 로그 처리량을 처리하기 위한 고급 Fluent Bit 최적화 기법을 다뤄요. FireLens와 사용자 지정 구성 파일을 사용하는 방법은 Use a custom configuration file 참고. 추가 예시는 GitHub의 Amazon ECS FireLens examples 참고.
참고 — 이 섹션의 일부 구성 옵션(예:
workers,threaded)은 AWS for Fluent Bit 버전 3 이상이 필요해요. 사용 가능한 버전에 대한 내용은 AWS for Fluent Bit releases 참고.
chunk 이해하기 (Understanding chunks)
Fluent Bit는 chunk라는 단위로 데이터를 처리해요. INPUT 플러그인이 데이터를 받으면 엔진이 chunk를 만들어 OUTPUT 대상에 보내기 전에 메모리나 파일시스템에 저장해요.
버퍼링 동작은 INPUT 섹션의 storage.type 설정에 따라 달라져요. 기본적으로 Fluent Bit는 메모리 버퍼링을 사용해요. 높은 처리량 또는 프로덕션 시나리오에서는 파일시스템 버퍼링이 더 나은 복원력을 제공해요.
자세한 내용은 Fluent Bit 문서의 Chunks와 AWS for Fluent Bit 예시 저장소의 What is a Chunk? 참고.
메모리 버퍼링 (기본값)
기본적으로 Fluent Bit는 메모리 버퍼링(storage.type memory)을 사용해요. Mem_Buf_Limit 파라미터를 사용해 INPUT 플러그인당 메모리 사용을 제한할 수 있어요.
메모리 버퍼링 입력 구성 예시:
[INPUT]
Name tcp
Tag ApplicationLogs
Port 5170
storage.type memory
Mem_Buf_Limit 5MB
중요 — 플러그인에 대해
Mem_Buf_Limit을 초과하면 Fluent Bit가 입력을 일시 중지하고 새 레코드가 유실돼요. 이로 인해 역압(backpressure)이 발생하고 애플리케이션이 느려질 수 있어요. Fluent Bit 로그에 다음 경고가 표시돼요:[input] tcp.1 paused (mem buf overlimit)
메모리 버퍼링은 로그 처리량이 낮거나 중간 정도인 단순한 사용 사례에 적합해요. 데이터 손실이 우려되는 높은 처리량 또는 프로덕션 시나리오에서는 대신 파일시스템 버퍼링을 사용하세요.
자세한 내용은 Fluent Bit 문서의 Buffering and Memory와 AWS for Fluent Bit 예시 저장소의 Memory Buffering Only 참고.
파일시스템 버퍼링 (Filesystem buffering)
높은 처리량 시나리오에서는 파일시스템 버퍼링을 사용할 것을 권장해요.