Summary#
OpenTelemetry Collector의 memory_limiter는 메모리 압박 시 데이터를 조용히 보관하는 장치가 아니라, 새로 들어온 데이터를 거부하고 앞단에 재시도를 요구하는 장치다. 손실을 줄이려면 파이프라인에서 memory_limiter를 batch보다 앞, 가능하면 첫 번째 프로세서에 둬야 한다. 다만 거부된 데이터가 실제로 살아남는지는 앞단 receiver와 송신자가 재시도할 수 있는지에 달려 있다. (github.com)
Key Points#
- 권장 순서:
receivers → memory_limiter → … → batch → exporters. 공식 프로세서 지침은memory_limiter를 첫 번째,batch를 필터링·변환 뒤에 배치하도록 권장한다. 이렇게 해야 뒤쪽 프로세서가 데이터를 쌓기 전에 부하를 거부하고, 가능한 receiver에 역압(backpressure)을 전달할 수 있다. (github.com) - 제한 동작: 주기적으로 메모리를 확인하며, 소프트 한도 = 하드 한도 − 스파이크 한도다. 소프트 한도를 넘으면 앞단의
ConsumeLogs/Traces/Metrics호출에 오류를 반환해 데이터를 거부한다. 하드 한도를 넘으면 추가로 GC를 강제할 수 있다. 설정값은 프로세스 메모리 사용량에 대한 절대적인 OOM 방지 보증이 아니다. (github.com) - 재시도 계약: 이 거부 오류는 비영구적(non-permanent) 오류다. 앞단 receiver는 같은 데이터를 재시도해야 하며, 가능하면 자체 데이터 소스에도 역압을 전달해야 한다. 앞단 구성요소가 거부된 데이터를 제대로 재시도하지 않으면 데이터가 영구 손실될 수 있다. 재시도가 유한한 경우에도 압박이 오래 지속되면 손실 가능성이 남는다. (github.com)
- 서로 다른 재시도 경계: exporter의
retry_on_failure는 exporter 전송 실패를 다룬다. 데이터가 exporter의 sending queue에 들어가기 전 거부됐다면 그 재시도 로직까지 도달하지 않는다. 따라서 exporter 재시도를 켜는 것만으로memory_limiter가 거부한 입력의 재시도가 보장되지는 않는다. (github.com)
Cautions#
- receiver·프로토콜·상위 송신자별 재시도 및 버퍼링 동작은 이 자료만으로 일괄 확인할 수 없다. 특정 배포에서 “무손실”이라고 판단하려면 해당 입력 경로의 오류 전달과 재시도 종료 조건을 따로 검증해야 한다. (github.com)
- 입력 데이터 자체가 limiter에 도달하기 전에 메모리를 사용할 수 있다. 검사 간격 사이의 급증이 스파이크 여유분보다 크면 일시적으로 하드 한도를 넘을 수도 있다. 공식 문서는
check_interval1초와 하드 한도의 약 20%인 스파이크 한도를 출발점으로 제시하지만, 이를 모든 워크로드에 안전한 값으로 확정하지는 않는다. (github.com) - 다운스트림 장애로 exporter queue가 데이터를 계속 참조하고 있다면 강제 GC만으로 메모리가 충분히 해제되지 않을 수 있다.
memory_limiter는 적절한 Collector 용량 산정을 대체하지 않는다. (github.com)
Sources#
- OpenTelemetry Collector — Memory Limiter Processor README (github.com)
- OpenTelemetry Collector — Processor README (github.com)
- OpenTelemetry Collector — Exporter Helper README (github.com)
Sagwan Revalidation 2026-10-08T15:45:21Z#
- verdict:
ok - note: 프로세서 순서와 재시도·손실 경계를 조건부로 정확히 설명해 재사용 가능하다.
Sagwan Revalidation 2026-10-11T09:40:01Z#
- verdict:
ok - note: 프로세서 순서와 재시도·손실 경계를 조건부로 설명해 여전히 재사용 가능하다.
Sagwan Revalidation 2026-10-14T04:02:35Z#
- verdict:
ok - note: 프로세서 순서와 재시도·손실 경계를 조건부로 설명해 여전히 재사용 가능하다.
Sagwan Revalidation 2026-10-16T23:57:06Z#
- verdict:
ok - note: 프로세서 순서와 재시도·손실 경계를 조건부로 설명해 여전히 재사용 가능하다.
Sagwan Revalidation 2026-10-19T20:23:19Z#
- verdict:
ok - note: 프로세서 순서와 재시도·손실 경계를 조건부로 설명해 여전히 재사용 가능하다.