Redis 지연 모니터링

Redis 지연 모니터링 (Redis latency monitoring)

Redis 2.8.13에 도입된 지연 모니터링(Latency Monitoring)은 지연에 민감한 코드 경로를 샘플링하는 훅, 이벤트별 지연 스파이크의 시계열 기록, 원시 데이터를 가져오는 보고 엔진, 사람이 읽을 수 있는 분석 리포트를 만드는 분석 엔진으로 구성됩니다. Redis는 메모리 내 시스템이면서 디스크 영속화 등에서 OS와 상호작용하고, 일부 명령은 O(N)이라 지연 스파이크를 유발하며, 단일 스레드로 동작하므로 지연 문제를 미리 관찰·해결하는 데 유용합니다.

출처: 공식문서

이벤트와 시계열

모니터링되는 각 코드 경로는 이름을 가지며 이를 이벤트(event)라 합니다. 지연 스파이크는 설정된 임계값보다 오래 걸린 이벤트이며, 이벤트마다 개별 시계열이 존재합니다.

  • 지연 스파이크가 발생할 때마다 해당 이벤트의 시계열에 기록됩니다.
  • 각 시계열은 160개 요소로 구성됩니다.
  • 각 요소는 지연 스파이크를 측정한 Unix 타임스탬프와 실행에 걸린 밀리초 쌍입니다.
  • 같은 초에 발생한 같은 이벤트의 스파이크는 최대 지연으로 합쳐집니다.
  • 각 요소의 사상 최대 지연(all-time maximum)을 기록합니다.

모니터링 되는 주요 이벤트:

  • command: 일반 명령, fast-command: O(1)/O(log N) 명령
  • fork: fork(2) 시스템 콜
  • rdb-unlink-temp-file: unlink(2)
  • aof-fsync-always: appendfsync always 정책의 fsync(2)
  • aof-write / aof-write-pending-fsync / aof-write-active-child / aof-write-alone: AOF write(2) 관련
  • aof-fstat, aof-rename(BGREWRITEAOF 완료 후), aof-rewrite-diff-write
  • active-defrag-cycle, expire-cycle, eviction-cycle, eviction-del

지연 모니터링 활성화

임계값은 밀리초 단위로 설정하며, 이보다 오래 걸린 이벤트만 스파이크로 기록됩니다. 예를 들어 최대 허용 지연이 100ms라면 임계값을 100으로 설정합니다.

CONFIG SET latency-monitor-threshold 100

기본값은 0(비활성)이며, 모니터링 비용이 거의 0에 가깝더라도 잘 동작하는 인스턴스의 기본 메모리 사용을 올릴 이유가 없으므로 기본은 꺼져 있습니다.

LATENCY 명령

이벤트 보고는 LATENCY 명령의 하위명령으로 이뤄집니다.

  • LATENCY LATEST: 모든 이벤트의 최신 샘플 반환
  • LATENCY HISTORY: 특정 이벤트의 지연 시계열 반환
  • LATENCY RESET: 하나 이상의 이벤트 시계열 초기화
  • LATENCY GRAPH: 이벤트 샘플의 ASCII 아트 그래프 렌더링
  • LATENCY DOCTOR: 사람이 읽기 좋은 지연 분석 리포트 응답

더 알아보기 (Learn more)