[Fluent-bit] cannot increase buffer 에러 해결

2025. 2. 11. 21:27·Logging & Monitoring/fluent bit 운영 특이사항

들어가기 앞서

이전에 포스팅한 "Failed to flush chunk" 에러를 해결한 뒤 이번엔 새로운 경고 메세지가 발견되었다. DMZ 망의 EKS 클러스터에 DeamonSet 으로 배포된 Fluent-Bit 의 컨테이너가 반복적으로 재시작되면서 아래와 같은 경고 메세지를 출력하였다.

[warn] [http_client] cannot increase buffer: current=512000 requested=544768 max=512000

 

이 경고 메시지는 HTTP 클라이언트가 데이터를 수신하는 동안 버퍼 크기를 늘리려 했지만, 설정된 최대값(512000 바이트)에 도달하여 실패했음을 의미한다. 해결 방버을 Github 의 Bug Report 와 StackOverflow 에서 열심히 서칭한 결과.. 다음과 같은 결론을 내었다.

 

Buffer_Size

앞서 포스팅한 Fluent-Bit 의 Configuration 에서 각 Section 의 Buffer_Size 파라미터를 수정하여 위의 문제를 해결한 사례가 있다. Fluent-Bit 공식문서에서 설명하는 Buffer_Size 는 다음과 같다. 우선, Kubernetes FILTER 섹션의 Buffer_Size 설명이다.

Set the buffer size for HTTP client when reading responses from Kubernetes API server. The value must be according to the Unit Size specification. A value of 0 results in no limit, and the buffer will expand as-needed. Note that if pod specifications exceed the buffer limit, the API response will be discarded when retrieving metadata, and some kubernetes metadata will fail to be injected to the logs. (default = 32KB)

(번역) Kubernetes API 서버에서 응답을 읽을 때 사용할 HTTP 클라이언트의 버퍼 크기를 설정합니다. 값은 Unit Size 규격을 따라야 합니다. 값이 0 이면 제한이 없으며, 필요에 따라 버퍼가 확장됩니다. 단, Pod 사양이 버퍼 한도를 초과하면 메타데이터를 검색하는 동안 API 응답이 삭제되며, 일부 Kubernetes 메타데이터가 로그에 삽입되지 않을 수 있습니다. (기본값 = 32KB)

 

아래는 ElasticSearch OUTPUT 섹션의 Buffer_Size 설명이다.

Specify the buffer size used to read the response from the Elasticsearch HTTP service. Use for debugging purposes where required to read full responses. Response size grows depending of the number of records inserted. To use an unlimited amount of memory, set this value to False. Otherwise set the value according to the Unit Size. (default = 512KB)

(번역) Elasticsearch HTTP 서비스의 응답을 읽는 데 사용할 버퍼 크기를 지정합니다. 전체 응답을 읽어야 하는 디버깅 용도로 사용됩니다. 응답 크기는 삽입된 레코드 수에 따라 증가합니다. 메모리 사용을 제한 없이 설정하려면 이 값을 False로 지정하십시오. 그렇지 않으면 Unit Size에 맞게 값을 설정해야 합니다. (기본값 = 512KB)

 

여러 커뮤니티의 사례를 확인하면 해결 방법이나 과정이 모두 다르며, 정확한 원인을 특정하기 어려웠다. 사례들을 읽어보고 종합한 결과 아래와 같은 해결 방안을 찾았다. 

  • [FILTER] 섹션의 Buffer_Size 변경
  • [OUTPUT] 섹션의 Buffer_Size 변경
  • Buffer_Size : 2MB 를 2000000B 로 변경 ( 이건 왜..? 공식문서 Unit_Size 에는 문제 없는데.. )

 

도대체 어디서 경고 메세지가 왔을까?

Fluent-Bit 의 Github 소스코드(fluent-bit/src/flb_http_client.c) 를 열어보면 출력된 경고 메세지를 호출하는 함수를 찾을 수 있다. 

 

flb_http_client 는 여러 Fluent-Bit 구성 요소에서 사용된다. (예를 들어, Stackdriver, Splunk, New Relic 으로 로그를 전송하거나 Kubernetes API 와 통신할 때) 참고로 flb_warn 함수는 "flb_http_do" 함수의 하위에서 호출되며 buffer_size 기본값은 4KB 이다.

 

flb_http_client 의 구성 요소 중 하나가 filter_kubernetes 모듈이다. plugins/filter_kubernetes/kube_meta.c 경로로 가서 코드를 열어보면 아래의 코드를 확인할 수 있다. 

 

이곳에서 함수를 오버라이딩하고 있으며 Buffer_Size 를 재정의할 수 있다. (기본값 = 32KB) filter_kubernetes 뿐만 아니라 plugins/out_es/es.c 경로로 들어가 소스코드를 확인하면 아래와 같이 동일한 코드를 확인할 수 있다. (기본값 = 512KB) 

 

 

즉, Kubernetes FILTER 와 ElasticSearch OUTPUT 에서 둘 다 경고 메세지를 출력시킬 수 있다. 

 

어디를 수정해야 할까?

우리의 경고메세지를 확인하면 "current=512000" 를 확인할 수 있는데 Kubernetes FILTER 의 Buffer_Size 의 default 값은 32KB 이고 ElasticSearch OUTPUT 의 Buffer_Size 의 default 값이 512KB 인 것을 고려했을 때 ElasticSearch OUTPUT 의 버퍼가 부족하여 발생한 현상으로 보이므로 해당 부분의 Buffer_Size 를 1MB 로 변경하였다. 

'Logging & Monitoring > fluent bit 운영 특이사항' 카테고리의 다른 글

[Fluent-bit] Exclude_Path 설정  (0) 2025.10.25
[Fluent-bit] OpenSearch 월별 인덱스 설정  (0) 2025.04.15
[Fluent-bit] Multi-line Parsing (멀티 라인 파싱)  (0) 2025.04.14
[Fluent-bit] Failed to flush chunk 에러 해결  (1) 2025.02.02
'Logging & Monitoring/fluent bit 운영 특이사항' 카테고리의 다른 글
  • [Fluent-bit] Exclude_Path 설정
  • [Fluent-bit] OpenSearch 월별 인덱스 설정
  • [Fluent-bit] Multi-line Parsing (멀티 라인 파싱)
  • [Fluent-bit] Failed to flush chunk 에러 해결
Hyukops
Hyukops
안녕하세요
  • Hyukops
    Hyukops 님의 Tech Blog
    Hyukops
    • 분류 전체보기 (141)
      • Introduction (1)
      • Kubernetes & EKS (43)
        • k8s in action (9)
        • k8s 공부 기록 (17)
        • k8s 운영 가이드 (10)
        • k8s 운영 특이사항 (7)
      • Service Mesh (29)
        • Istio 공부 기록 (20)
        • Istio 운영 특이사항 (9)
      • CICD (10)
        • argoCD 공부 기록 (6)
        • argoCD 운영 특이사항 (4)
      • Logging & Monitoring (5)
        • Prometheus 운영 특이사항 (0)
        • fluent bit 운영 특이사항 (5)
      • Infrastructure as Code (8)
        • terraform 공부 기록 (3)
        • terraform 운영 특이사항 (5)
      • AWS (40)
        • aws 공부 기록 (29)
        • 솔루션 사례 & 문제 해결 (11)
      • Database (5)
        • postgreSQL (5)
  • 태그

    kubernetes
    canary
    Logging
    AWS
    prometheus
    aws saa
    eks
    PostgreSQL
    fluent bit
    fluentbit
    Terraform
    Istio
    MSK
    argocd
    k8s in action
    Database
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Hyukops
[Fluent-bit] cannot increase buffer 에러 해결
상단으로

티스토리툴바