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와 함께 봐야 함.