콘텐츠로 이동

Redis 모니터링 및 알람

Redis 운영에서 수집해야 할 지표와 알람 기준을 정리함.


1. 모니터링 및 알람 기준

Redis 운영에서는 설치 후 수동 점검만으로 충분하지 않음. 메모리 포화, eviction, latency, persistence 실패, replication lag, client 증가를 지속적으로 수집해야 함.

1.1 수집해야 할 핵심 지표

영역 지표
가용성 Redis process 상태, redis_up, PING 성공 여부
메모리 used_memory, used_memory_rss, maxmemory, mem_fragmentation_ratio
eviction evicted_keys, expired_keys, keyspace_hits, keyspace_misses
client connected_clients, blocked_clients, rejected_connections
persistence rdb_last_bgsave_status, aof_last_write_status, aof_last_bgrewrite_status
latency LATENCY DOCTOR, slowlog, command latency
replication master_link_status, master_repl_offset, replica lag
CPU/OS Redis CPU, disk I/O, network, OOM, system load

1.2 redis_exporter 사용 예시

Prometheus 환경에서는 redis_exporter를 사용할 수 있음.

예시 실행:

redis_exporter \
  --redis.addr=redis://127.0.0.1:6379 \
  --web.listen-address=127.0.0.1:9121

인증이 필요한 경우 운영 환경에서는 command line 인수로 비밀번호를 전달하지 않음.

다음 방식은 process list에 비밀번호가 노출될 수 있으므로 운영 서버에서는 사용하지 않음.

redis_exporter \
  --redis.addr=redis://127.0.0.1:6379 \
  --redis.password='CHANGE_ME_TO_LONG_RANDOM_PASSWORD' \
  --web.listen-address=127.0.0.1:9121

운영에서는 REDIS_PASSWORD, REDIS_PASSWORD_FILE, systemd EnvironmentFile, secret manager 방식을 우선함.

systemd EnvironmentFile 예시:

sudo install -o root -g root -m 0600 /dev/null /etc/redis/redis-exporter.env

sudo tee /etc/redis/redis-exporter.env > /dev/null <<'EOF'
REDIS_ADDR=redis://127.0.0.1:6379
REDIS_USER=exporter
REDIS_PASSWORD=CHANGE_ME_TO_LONG_RANDOM_PASSWORD
EOF

sudo chmod 0600 /etc/redis/redis-exporter.env

redis_exporter 실행 예시:

set -a
source /etc/redis/redis-exporter.env
set +a

redis_exporter \
  --web.listen-address=127.0.0.1:9121

password file을 사용하는 경우:

sudo install -o root -g root -m 0600 /dev/null /etc/redis/redis-exporter-password

sudo tee /etc/redis/redis-exporter-password > /dev/null <<'EOF'
CHANGE_ME_TO_LONG_RANDOM_PASSWORD
EOF

sudo chmod 0600 /etc/redis/redis-exporter-password
REDIS_ADDR=redis://127.0.0.1:6379 \
REDIS_USER=exporter \
REDIS_PASSWORD_FILE=/etc/redis/redis-exporter-password \
redis_exporter --web.listen-address=127.0.0.1:9121

주의
exporter용 Redis 사용자는 운영 애플리케이션 사용자와 분리함.
exporter에는 모니터링에 필요한 최소 권한만 부여하고, exporter secret 파일은 root 또는 exporter 전용 계정만 읽을 수 있게 제한함.
--redis.password=...처럼 command line argument로 비밀번호를 넘기면 ps, audit log, process collector에 노출될 수 있음.

1.3 Prometheus scrape 예시

scrape_configs:
  - job_name: redis
    static_configs:
      - targets:
          - 192.168.1.50:9121

1.4 알람 기준 예시

항목 경고 기준 예시
Redis down 1분 이상 scrape 실패 또는 PING 실패
memory high used_memory / maxmemory > 0.8
memory critical used_memory / maxmemory > 0.9
evictions evicted_keys 증가 발생
blocked clients blocked_clients > 0 지속
rejected connections rejected_connections 증가
RDB failure rdb_last_bgsave_status != ok
AOF failure aof_last_write_status != ok
replication down master_link_status != up
latency spike slowlog 급증 또는 latency threshold 초과

운영 알람은 Redis 단독 지표뿐 아니라 애플리케이션 오류율, API latency, queue backlog, DB load와 함께 봐야 함.