증상: loki-write 컴포넌트의 메모리가 지속적으로 증가함
로그:
err="rpc error: code = Code(429) desc = entry with timestamp 2023-11-14 06:37:29.320051283 +0000 UTC ignored, reason: 'Per stream rate limit exceeded (limit: 3MB/sec) while attempting to ingest for stream
예상 원인:
- 높은 로그 볼륨: 소스에서 생성되는 로그의 양이 매우 많을 때 이 오류가 발생할 수 있습니다. 이는 특히 많은 양의 로그 데이터를 짧은 시간 내에 Loki로 전송할 때 발생합니다.
그리고 Loki는 속도 제한에 도달했을 때 로그를 버퍼링하고 나중에 재시도할 수 있습니다. 이 과정에서 지속적으로 로그가 생성되면 버퍼링되는 데이터의 양이 증가하여 메모리 사용량이 지속적으로 증가할 수 있습니다.
- 스트림당 속도 제한 설정: Loki는 스트림당 속도 제한을 두어 시스템이 과부하되는 것을 방지합니다. 기본 설정은 초당 3MB로, 이 설정을 초과하면 위와 같은 오류가 발생합니다.
해결: limits_config 변경
- per_stream_rate_limit
- per_stream_rate_limit_burst
# Maximum byte rate per second per stream, also expressible in human readable
# forms (1MB, 256KB, etc).
# CLI flag: -ingester.per-stream-rate-limit
per_stream_rate_limit: 10MB # default = 3MB
# Maximum burst bytes per stream, also expressible in human readable forms (1MB,
# 256KB, etc). This is how far above the rate limit a stream can 'burst' before
# the stream is limited.
# CLI flag: -ingester.per-stream-rate-limit-burst
per_stream_rate_limit_burst: 50MB # default = 15MB