Redis 성능 모니터링

RedisBeginner
지금 연습하기

소개

이 랩에서는 Redis 성능 문제를 모니터링하고 해결하는 방법을 배웁니다. 이 랩은 지연 시간 문제 식별 및 해결, 메모리 사용량 분석, 쿼리 성능 최적화에 중점을 둡니다.

LATENCY DOCTOR 명령을 사용하여 지연 시간을 진단하고, MEMORY STATS를 사용하여 메모리 사용량을 확인하고, SLOWLOG GET을 사용하여 느린 쿼리를 분석하고, MEMORY PURGE를 사용하여 메모리를 최적화합니다. 단계별 가이드를 따르면 응답성이 뛰어나고 효율적인 Redis 배포를 유지하는 실질적인 경험을 쌓을 수 있습니다.

사전 구성된 환경

안정적인 시연을 보장하기 위해 이 랩 환경은 다음과 같이 사전 구성되었습니다.

  • 사용자 데이터를 포함하는 1000 개의 문자열 키 (user:1 ~ user:1000)
  • 사용자 프로필 정보가 포함된 50 개의 해시 객체 (profile:1 ~ profile:50)
  • 로그 항목이 포함된 20 개의 리스트 객체 (logs:app1 ~ logs:app20)
  • 태그 데이터가 포함된 10 개의 세트 객체 (tags:1 ~ tags:10)
  • 성능 모니터링을 위한 최적화된 Redis 구성
  • 즉각적인 분석을 위한 사전 생성된 지연 시간 및 slowlog 데이터
이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 89%입니다.학습자들로부터 94%의 긍정적인 리뷰율을 받았습니다.

LATENCY DOCTOR 로 지연 시간 모니터링

이 단계에서는 Redis 의 LATENCY DOCTOR 명령을 사용하여 지연 시간 문제를 진단하고 해결하는 방법을 살펴봅니다. 지연 시간을 이해하고 해결하는 것은 응답성이 뛰어나고 효율적인 Redis 배포를 유지하는 데 매우 중요합니다.

지연 시간이란 무엇인가요?

지연 시간은 Redis 서버에 요청을 보내고 응답을 받는 사이의 지연을 의미합니다. 높은 지연 시간은 애플리케이션 성능에 부정적인 영향을 미쳐 응답 시간이 느려지고 사용자 경험이 저하될 수 있습니다.

LATENCY DOCTOR 소개

LATENCY DOCTOR 명령은 Redis 에 내장된 강력한 도구로, 지연 시간의 잠재적 원인을 식별하는 데 도움이 됩니다. Redis 작업의 다양한 측면을 분석하고 지연을 유발할 수 있는 요인에 대한 통찰력을 제공합니다.

단계별 가이드

  1. Redis 에 연결:

    먼저 redis-cli 명령을 사용하여 Redis 서버에 연결합니다. LabEx VM 에서 터미널을 열고 다음을 실행합니다.

    redis-cli

    그러면 Redis 명령줄 인터페이스가 열립니다.

  2. 현재 구성 확인:

    이 환경은 지연 시간 모니터링이 활성화된 상태로 사전 구성되었습니다. 현재 설정을 확인할 수 있습니다.

    CONFIG GET latency-monitor-threshold

    임계값이 10 밀리초로 설정되어 있음을 보여야 합니다.

  3. LATENCY DOCTOR 실행:

    이제 LATENCY DOCTOR 명령을 실행하여 시스템을 분석합니다.

    LATENCY DOCTOR

    이것은 상당한 지연 시간 문제가 없는 정상적인 Redis 인스턴스이므로 다음과 유사한 출력을 볼 수 있습니다.

    Dave, no latency spike was observed during the lifetime of this Redis instance, not in the slightest bit. I honestly think you ought to sit down calmly, take a stress pill, and think things over.

    이 유머러스한 메시지 ("2001: 스페이스 오디세이"의 HAL 9000 참조) 는 Redis 가 구성된 임계값 이상의 지연 시간 급증 없이 잘 작동하고 있음을 나타냅니다.

  4. LATENCY DOCTOR 응답 이해:

    LATENCY DOCTOR가 "Dave" 메시지를 표시할 때 이는 다음을 의미합니다.

    • 어떤 명령도 지연 시간 모니터링 임계값 (이 경우 10ms) 을 초과하지 않았습니다.
    • Redis 는 성능 병목 현상 없이 효율적으로 작동하고 있습니다.
    • 시스템은 지연 시간 관점에서 건강합니다.

    실제 지연 시간 문제가 있는 프로덕션 환경에서는 다음과 같은 자세한 분석을 볼 수 있습니다.

    • 특정 지연 시간 급증 및 그 원인
    • 최적화를 위한 권장 사항
    • 느린 작업에 대한 자세한 분석
  5. Slowlog 검사 (대체 분석):

    LATENCY DOCTOR가 문제가 없다고 표시하더라도 slowlog 를 검사하여 다른 작업에 비해 가장 많은 시간을 소요하는 작업을 확인할 수 있습니다.

    SLOWLOG GET 10

    실행 시간과 함께 최근 명령을 보여주는 출력을 볼 수 있습니다. 항목은 다음을 표시합니다.

    • 고유 ID: 각 항목에 대한 순차적 식별자
    • 타임스탬프: 명령이 실행된 Unix 타임스탬프
    • 실행 시간: 마이크로초 단위의 시간 (예: 1954 마이크로초 = 1.954 밀리초)
    • 명령: 실행된 명령 (Redis 내부 작업의 경우 종종 "COMMAND"로 표시됨)
    • 클라이언트 정보: 클라이언트의 IP 주소 및 포트

    예시:

    1) 1) (integer) 10
       2) (integer) 1753255495
       3) (integer) 1954
       4) 1) "COMMAND"
       5) "127.0.0.1:42212"
       6) ""

    이는 1,954 마이크로초 (약 2 밀리초) 가 소요된 명령을 보여줍니다.

  6. redis-cli 종료:

    명령이 기록되도록 하려면 다음을 입력하여 redis-cli를 종료합니다.

    exit

중요성 이해

LATENCY DOCTOR를 사용하고 slowlog 를 분석함으로써 Redis 배포 성능에 대한 귀중한 통찰력을 얻을 수 있습니다. 모든 것이 정상적으로 보이는 경우에도 ("Dave" 메시지로 표시됨), 정기적인 모니터링은 지속적인 우수한 성능을 보장하고 발생하는 문제를 조기에 감지하는 데 도움이 됩니다.

MEMORY STATS 로 메모리 확인

이 단계에서는 Redis 의 MEMORY STATS 명령을 사용하여 메모리 사용량을 모니터링하고 이해하는 방법을 배웁니다. 효율적인 메모리 관리는 Redis 서버의 안정성과 성능에 매우 중요합니다.

메모리 모니터링이 중요한 이유

Redis 는 인메모리 데이터 저장소이므로 모든 데이터를 RAM 에 저장합니다. Redis 의 메모리가 부족하면 성능 저하, 데이터 손실 또는 충돌이 발생할 수 있습니다. 메모리 사용량을 모니터링하면 잠재적인 메모리 관련 문제를 사전에 식별하고 해결할 수 있습니다.

MEMORY STATS 소개

MEMORY STATS 명령은 Redis 의 메모리 소비에 대한 자세한 개요를 제공합니다. 메모리 사용량을 다양한 범주로 분류하여 메모리가 어디에 사용되고 있는지에 대한 통찰력을 제공합니다.

단계별 가이드

  1. Redis 에 연결:

    redis-cli 명령을 사용하여 Redis 서버에 연결합니다. LabEx VM 에서 터미널을 열고 다음을 실행합니다.

    redis-cli

    그러면 Redis 명령줄 인터페이스가 열립니다.

  2. MEMORY STATS 실행:

    연결되면 MEMORY STATS 명령을 실행합니다.

    MEMORY STATS

    그러면 Redis 가 메모리 통계를 수집하고 결과를 표시합니다.

  3. 출력 해석:

    MEMORY STATS의 출력은 키 - 값 쌍의 사전으로, 각 키는 메모리 통계를 나타내고 값은 해당 값을 나타냅니다. 샘플 출력을 살펴보고 몇 가지 주요 메트릭을 설명해 보겠습니다.

    127.0.0.1:6379> MEMORY STATS
     1) "peak.allocated"
     2) (integer) 1114480
     3) "total.allocated"
     4) (integer) 1114480
     5) "startup.allocated"
     6) (integer) 948480
     7) "replication.buffer"
     8) (integer) 0
     9) "clients.slaves"
    10) (integer) 0
    11) "clients.normal"
    12) (integer) 6456
    13) "aof.buffer"
    14) (integer) 0
    15) "lua.vm"
    16) (integer) 0
    17) "overhead.total"
    18) (integer) 165992
    19) "keys.count"
    20) (integer) 0
    21) "keys.bytes-per-key"
    22) (integer) 0
    23) "dataset.bytes"
    24) (integer) 948488
    25) "dataset.percentage"
    26) "0.00%"
    27) "bytes-per-replica.avg"
    28) (integer) 0
    29) "bytes-per-replica.min"
    30) (integer) 0
    31) "bytes-per-replica.max"
    32) (integer) 0
    33) "allocator.fragratio"
    34) "1.00"
    35) "allocator.fragbytes"
    36) (integer) 0
    37) "allocator.rss"
    38) (integer) 835584
    39) "allocator.peak"
    40) (integer) 1114112
    41) "total.system"
    42) (integer) 4194304
    43) "allocator.resident"
    44) (integer) 835584

    주요 메트릭에 대한 설명은 다음과 같습니다.

    • peak.allocated: Redis 가 시작된 이후 할당한 최대 메모리 양입니다.
    • total.allocated: 현재 Redis 에서 할당한 총 메모리 양입니다.
    • dataset.bytes: Redis 에 저장된 데이터의 총 크기 (오버헤드 제외) 입니다.
    • overhead.total: Redis 오버헤드 (예: 데이터 구조, 메타데이터) 에 사용된 총 메모리 양입니다.
    • keys.count: 현재 Redis 에 저장된 키의 수입니다.
    • allocator.fragratio: 메모리 할당자의 조각화 비율입니다. 값이 높을수록 조각화가 더 많음을 나타냅니다.
    • allocator.rss: 운영 체제에서 보고한 Redis 가 사용하는 메모리 양 (Resident Set Size) 입니다.
    • total.system: 시스템에서 사용 가능한 총 메모리 양입니다.
  4. redis-cli 종료:

    명령이 기록되도록 하려면 다음을 입력하여 redis-cli를 종료합니다.

    exit

정보 활용

MEMORY STATS에서 제공하는 정보는 다음을 위해 사용할 수 있습니다.

  • 메모리 누수 식별
  • 메모리 사용량을 줄이기 위한 데이터 구조 최적화
  • 메모리 효율성을 개선하기 위해 Redis 구성 매개변수 조정
  • Redis 서버에 사용할 수 있는 RAM 양을 늘려야 하는지 여부 결정

SLOWLOG GET 으로 느린 쿼리 분석

이 단계에서는 Redis 의 SLOWLOG GET 명령을 사용하여 느린 쿼리를 분석하는 방법을 자세히 알아봅니다. 느린 쿼리를 식별하고 최적화하는 것은 응답성이 뛰어나고 효율적인 Redis 배포를 유지하는 데 필수적입니다. 첫 번째 단계의 LATENCY DOCTOR에서 제안한 것처럼 slowlog 분석은 지연 시간 문제를 디버깅하는 중요한 단계입니다.

Slowlog 란 무엇인가요?

slowlog 는 지정된 실행 시간을 초과하는 쿼리를 기록하는 Redis 의 시스템입니다. 이를 통해 예상보다 오래 걸리거나 성능에 영향을 미칠 수 있는 쿼리를 식별할 수 있습니다.

단계별 가이드

  1. Redis 에 연결:

    redis-cli 명령을 사용하여 Redis 서버에 연결합니다. LabEx VM 에서 터미널을 열고 다음을 실행합니다.

    redis-cli

    그러면 Redis 명령줄 인터페이스가 열립니다.

  2. Slowlog 구성 확인:

    이 환경은 적절한 slowlog 설정으로 사전 구성되었습니다. 현재 구성을 확인할 수 있습니다.

    CONFIG GET slowlog-log-slower-than
    CONFIG GET slowlog-max-len

    이 명령은 1000 마이크로초 (1 밀리초) 보다 오래 걸리는 명령을 기록하고 최대 128 개의 slowlog 항목을 저장하도록 Redis 가 구성되었음을 보여야 합니다.

  3. Slowlog 항목 검색:

    SLOWLOG GET 명령을 사용하여 slowlog 항목을 검색합니다. 가장 최근의 10 개 slowlog 항목을 검색하려면 다음 명령을 사용합니다.

    SLOWLOG GET 10

    다음과 유사한 출력을 볼 수 있습니다 (최근 Redis 내부 작업 표시).

     1) 1) (integer) 10
        2) (integer) 1753255495
        3) (integer) 1954
        4) 1) "COMMAND"
        5) "127.0.0.1:42212"
        6) ""
     2) 1) (integer) 9
        2) (integer) 1753255494
        3) (integer) 4795
        4) 1) "COMMAND"
        5) "127.0.0.1:41444"
        6) ""
     3) 1) (integer) 8
        2) (integer) 1753255494
        3) (integer) 1599
        4) 1) "COMMAND"
        5) "127.0.0.1:41004"
        6) ""
  4. 출력 해석:

    SLOWLOG GET의 출력은 slowlog 항목의 배열입니다. 각 항목에는 여섯 가지 정보가 포함됩니다.

    1. 고유 ID: slowlog 항목의 순차적 식별자 (예: 10, 9, 8...)
    2. 타임스탬프: 쿼리가 실행된 Unix 타임스탬프
    3. 실행 시간: 마이크로초 단위의 실행 시간 (예: 1954 = 1.954 밀리초)
    4. 명령 배열: 실행된 명령 (내부 Redis 작업의 경우 종종 "COMMAND"로 표시됨)
    5. 클라이언트 IP 및 포트: 클라이언트의 IP 주소 및 포트 (예: "127.0.0.1:42212")
    6. 클라이언트 이름: 클라이언트의 이름 (일반적으로 비어 있으며 ""로 표시됨)

    시간 이해:

    • 1954 마이크로초 = 1.954 밀리초
    • 4795 마이크로초 = 4.795 밀리초
    • 1599 마이크로초 = 1.599 밀리초
  5. 일반적인 패턴 분석:

    이 환경에서는 일반적으로 다음을 볼 수 있습니다.

    • "COMMAND" 항목: 명령 구문 분석 및 처리와 같은 Redis 내부 작업을 나타냅니다.
    • 마이크로초 단위 타이밍: 대부분의 작업은 매우 빠릅니다 (1-5 밀리초).
    • 로컬 연결: 127.0.0.1(localhost) 에서 모든 연결이 이루어집니다.
  6. 더 자세한 느린 쿼리 생성:

    기존 데이터를 사용하여 더 구체적인 느린 쿼리를 보려면 데이터 세트를 스캔하는 작업을 실행해 보겠습니다.

    KEYS user:*

    이 명령은 모든 사용자 키 (1000 개 키) 를 스캔하며, 이는 slowlog 에 나타나야 합니다.

    이제 업데이트된 slowlog 를 확인합니다.

    SLOWLOG GET 3

    이제 다음과 같은 형식으로 slowlog 에서 KEYS user:* 명령을 볼 수 있습니다.

    1) 1) (integer) 11
       2) (integer) [timestamp]
       3) (integer) [execution_time]
       4) 1) "KEYS"
          2) "user:*"
       5) "127.0.0.1:[port]"
       6) ""
  7. MEMORY PURGE 를 사용한 메모리 최적화:

    메모리 최적화도 시연해 보겠습니다. 먼저 현재 메모리 사용량을 확인합니다.

    MEMORY STATS

    출력에서 total.allocated 값을 찾습니다. 이제 사용되지 않는 메모리를 정리하여 메모리를 확보해 보겠습니다.

    MEMORY PURGE

    메모리 사용량을 다시 확인합니다.

    MEMORY STATS

    total.allocated 값을 비교하여 메모리가 해제되었는지 확인합니다. MEMORY PURGE 명령은 Redis 에서 활발하게 사용되지 않는 메모리를 해제하려고 시도합니다.

  8. redis-cli 종료:

    명령이 기록되도록 하려면 다음을 입력하여 redis-cli를 종료합니다.

    exit

정보 활용

slowlog 를 분석하여 느린 쿼리를 식별하고 최적화 단계를 수행할 수 있습니다. 주요 통찰력은 다음과 같습니다.

  • 명령 빈도: 느린 명령이 얼마나 자주 나타나는지
  • 실행 패턴: 특정 작업이 지속적으로 slowlog 에 나타나는지 여부
  • 성능 추세: 시간에 따른 실행 시간 변화
  • 리소스 사용량: 과도한 CPU 또는 메모리를 소비할 수 있는 명령

이 정보는 다음을 수행하는 데 도움이 됩니다.

  • 애플리케이션 쿼리 최적화
  • 문제 패턴 식별
  • 확장 및 용량 계획
  • 프로덕션 환경의 성능 문제 디버깅

요약

이 실습에서는 실제 Redis 성능 모니터링 도구를 시연하는 사전 구성된 환경을 사용하여 Redis 성능 모니터링 기법을 살펴보았습니다.

먼저 LATENCY DOCTOR 명령을 사용하여 Redis 가 지연 시간 문제를 진단하는 방법을 이해했습니다. 정상적인 환경에서는 지연 시간 급증이 감지되지 않았음을 나타내는 특징적인 "Dave" 메시지를 보았으며, 시스템이 잘 작동할 때 Redis 의 지연 시간 모니터링 피드백을 해석하는 방법을 배웠습니다.

다음으로 MEMORY STATS 명령을 검토하여 Redis 메모리 사용 패턴을 분석했습니다. 1000 개의 문자열 키, 50 개의 해시 객체, 20 개의 리스트 및 10 개의 세트로 구성된 사전 구성된 데이터 세트를 사용하여 실제 메모리 할당을 관찰하고 total.allocated, dataset.bytes, overhead.total과 같은 주요 메모리 메트릭을 식별하는 방법을 배웠습니다.

그런 다음 SLOWLOG GET 명령을 탐색하여 쿼리 성능을 분석했습니다. 6 개 요소로 구성된 slowlog 항목을 해석하고 마이크로초 단위의 실행 시간을 이해했으며, Redis 내부 "COMMAND" 작업이 slowlog 에 어떻게 나타나는지 관찰했습니다. 또한 KEYS user:*와 같은 패턴 매칭 명령을 사용하여 사용자 지정 느린 쿼리를 생성하는 방법을 시연했습니다.

마지막으로 MEMORY PURGE 명령을 사용하여 메모리 최적화를 시연하고, 퍼지 전후의 메모리 사용량을 비교하여 Redis 가 메모리를 효율적으로 관리하는 방법을 이해했습니다.

실습 전반에 걸쳐 다음을 수행하는 방법을 배웠습니다.

  1. "정상 시스템" 메시지를 포함한 LATENCY DOCTOR 출력 해석
  2. 실제 데이터 세트 메트릭을 사용하여 MEMORY STATS로 메모리 사용 패턴 분석
  3. 6 개 요소 구조를 가진 slowlog 항목 읽기 및 이해
  4. 패턴 매칭 작업을 사용하여 느린 쿼리 생성 및 분석
  5. MEMORY PURGE로 메모리 사용량 최적화
  6. 성능 모니터링에서 Redis 내부 작업과 사용자 명령 구분

Redis 의 내장 성능 모니터링 도구를 사용한 이러한 실습 경험은 프로덕션 환경에서 응답성이 뛰어나고 효율적인 Redis 배포를 유지하는 기초를 제공합니다.