[Grafana Tempo] 메모리 사용량 최적화

Grafana Tempo는 메모리 사용량을 확실하게 통제할 수 있는 직접적인 옵션을 제공하지는 않는다.
어느 정도 사용량을 추정하고, 그에 맞춰서 메모리를 제공해줄 수 밖에 없다.

그래도 간접적으로 메모리 사용량을 적게 유지하도록 유도할 수는 있다.여기서는 메모리 사용량을 추정하는 방법과, 메모리 사용량을 줄일 수 있는 방법 몇가지를 정리해본다.




지연된 쓰기

Tempo가 메모리를 많이 먹는 가장 큰 이유는, 시계열 DB들처럼 쓰기를 몰아서 처리해두기 때문이다.
데이터가 들어오면 일단 메모리에 들고 있다가 일정 시간이 지나면 몰아서 디스크에 압축해서 write한다.

종종 발생하는 메모리 스파이크는 flush되지 않은 메모리 + flush 도중에 가공해서 올리는 중간데이터 2가지로 인해서 발생할 확률이 높다.




ingester 옵션 조정

ingester 옵션을 조정하면 메모리에서 디스크로 옮기는 주기를 더 빠르게 해서 메모리 사용량을 줄일 수 있다.

max_block_duration을 작은 값으로 조정하면 더 자주 디스크에 flush를 해서 상시 들고있는 메모리를 줄일 수 있다. 기본값은 30분이다.

내 경우에는 5분을 1분으로 줄이는 것만으로도,

1-3기가를 널뛰기하던 것이 1기가 미만으로 안정화가 되었다.

안정될때까지 조금씩 줄여보면 된다.



참조
https://community.grafana.com/t/tempo-ram-usage-for-6k-spans-per-hour/63801
https://grafana.com/docs/tempo/latest/configuration/#ingester