사내 프로젝트로 Fluent-Bit을 K8S환경 내 Side-car방식으로 Elasticsearch에 로그 적재를 할 때, 발생했던 문제에 관하여 다루는 자료이다.
개요 :
프로젝트 내 Microservice의 개수만큼 Deployment를 생성했었는데, 해당 Deployment에는 하나의 애플리케이션 서버 컨테이너와, 해당 애플리케이션 로그를 수집하는 Fluent-Bit 컨테이너(총 2개의 컨테이너)가 하나의 파드 안에 배포되는 형식으로 생성하였다.
Fluent-Bit : https://docs.fluentbit.io/manual/about/what-is-fluent-bit
초반에는 특이 사항이 없었으나 Deployment를 일정 개수 이상 생성하니, 이후 생성되는 파드 내에서 Fluent-Bit 컨테이너만 죽는 현상이 발생하였다.
그리하여 Fluent-Bit 내부의 로그를 확인하니 아래와 같은 데이터를 볼 수 있었다.
제목에서 볼 수 있는 것처럼, "Too many open files"라는 에러로 컨테이너가 죽는 것이었다.
이는 로그를 수집하기 위해 생성된 특정 인스턴스가 너무 많다는 것이었고, 그 제한으로 인하여 컨테이너 생성에 실패하게 된 것이다.
아래는 위 에러와 관련된 깃허브 주소이다.
https://github.com/fluent/fluent-bit/issues/1777
해결 방법 :
방법은 생각보다 간단했다.
아래 두 개의 파일을 확인하고 부족한 제한사항을 늘려주는 것이었다.
# max_user_watches 확인
cat /proc/sys/fs/inotify/max_user_watches
# max_user_instances 확인
cat /proc/sys/fs/inotify/max_user_instances
글쓴이는, 위 두 가지 파일에서 max_user_instances가 128로 제한되어 있었고, 이를 늘려주면서 문제는 해결됐다.
# 제한 instance 수 상향
sudo sysctl fs.inotify.max_user_instances=1024
sudo sysctl -p
# 영구 적용 시
# /etc/sysctl.conf에서 fs.inotify.max_user_instances을 수정
+ 해당 에러는 위 설정을 통한 트러블 슈팅의 자료가 많이 나왔으나, sysctl 영역을 수정하며 생기는 사이드 이펙트가 확인되지 않았기에, 관련 자료를 좀 더 찾아봐야 할 것 같다.
'Observability > Fluent-Bit' 카테고리의 다른 글
[EFK] 쿠버네티스 환경 내 Fluent-Bit 사이드카로 엘라스틱 서치 로깅 (3) | 2024.09.13 |
---|---|
[Fluent-Bit] Parser Timezone 적용 (0) | 2024.09.11 |