Redis 모니터링과 보안
Redis 운영은 메모리, 지연, hit ratio, 연결, 복제 상태를 지속적으로 보고, 외부 노출과 위험 명령을 막는 것이 핵심입니다.
용어
| 용어 |
의미 |
| Hit Ratio |
전체 캐시 조회 중 Redis에서 바로 응답한 비율 |
| Ops/sec |
초당 처리 명령 수 |
| Connected Clients |
연결된 client 수 |
| Blocked Clients |
blocking 명령 등으로 대기 중인 client 수 |
| Evicted Keys |
메모리 부족으로 제거된 key 수 |
| Expired Keys |
TTL 만료로 제거된 key 수 |
| ACL |
사용자·명령·key 접근 제어 |
| AUTH |
Redis 인증 |
| Protected Mode |
외부 접근을 제한하는 보호 모드 |
질문
Hit Ratio는 어느 정도가 좋아야 하나?
정답은 서비스마다 다르지만, 조회 캐시라면 보통 주요 API 기준 80~90% 이상을 목표로 잡습니다. 다만 전체 평균만 보면 착시가 생깁니다. API, 도메인, key prefix 단위로 나누어 봐야 합니다.
Hit Ratio = keyspace_hits / (keyspace_hits + keyspace_misses)
모니터링 핵심 지표
redis-cli INFO memory
redis-cli INFO stats
redis-cli INFO clients
redis-cli INFO replication
redis-cli SLOWLOG GET 20
redis-cli LATENCY DOCTOR
| 지표 |
위험 신호 |
used_memory / maxmemory |
80~90% 이상 지속 |
mem_fragmentation_ratio |
과도하게 높음 |
| Hit Ratio |
주요 캐시에서 목표치 아래로 하락 |
instantaneous_ops_per_sec |
평소 대비 급증/급감 |
connected_clients |
평소 대비 급증 |
blocked_clients |
0보다 큼 |
evicted_keys |
예상하지 않은 증가 |
expired_keys |
특정 시점 급증 |
| replication lag |
기준 초과 |
| slow queries |
특정 시간 내 급증 |
Used Memory와 Fragmentation
| 지표 |
의미 |
used_memory |
Redis가 실제 데이터와 구조에 사용 중인 메모리 |
used_memory_rss |
OS가 Redis 프로세스에 할당한 메모리 |
mem_fragmentation_ratio |
RSS / used memory 비율 |
fragmentation이 높으면 실제 데이터보다 RSS가 커져 메모리 압박이 생길 수 있습니다.
Hit Ratio
| 상황 |
해석 |
| Hit Ratio 낮음 |
TTL이 너무 짧거나 캐시 대상이 부적절 |
| Miss 급증 |
배포, 캐시 초기화, 인기 key 만료 가능 |
| Hit 높지만 DB 부하 높음 |
중요한 API가 캐시되지 않을 수 있음 |
Ops/sec, Clients, Blocked Clients
| 지표 |
볼 것 |
| Ops/sec |
트래픽 변화와 Redis 처리량 |
| Connected Clients |
connection leak, pool 과다 |
| Blocked Clients |
blocking pop, slow command 영향 |
| Rejected Connections |
maxclients 도달 |
Slow Queries
redis-cli SLOWLOG GET 20
redis-cli CONFIG GET slowlog-log-slower-than
slowlog는 어떤 명령이 느렸는지 보여줍니다. KEYS, 큰 HGETALL, 큰 SMEMBERS, 긴 Lua가 보이면 우선 제거 대상입니다.
Redis ACL과 AUTH
ACL SETUSER app-user on >strong-password ~app:* +get +set +del
AUTH app-user strong-password
| 기능 |
설명 |
| AUTH |
Redis 접속 인증 |
| ACL user |
사용자별 권한 분리 |
| key pattern |
접근 가능한 key 범위 제한 |
| command category |
실행 가능한 명령 제한 |
TLS와 Network 보안
| 항목 |
기준 |
| TLS |
네트워크 구간 암호화가 필요한 환경에서 사용 |
| Security Group / Firewall |
애플리케이션 서버에서만 접근 허용 |
| Private Network |
public internet 노출 금지 |
| Protected Mode |
외부 노출 실수 방지 |
Command Rename / Disable
운영에서 위험한 명령은 제한을 검토합니다.
| 명령 |
위험 |
FLUSHALL |
전체 데이터 삭제 |
FLUSHDB |
DB 데이터 삭제 |
KEYS |
전체 scan으로 blocking 가능 |
CONFIG |
운영 설정 변경 |
MONITOR |
큰 부하 유발 가능 |
명령 disable은 운영 편의성과 장애 대응 명령 사용 가능성을 함께 고려합니다.
보안 설정 체크리스트
| 체크 |
질문 |
| 접근 |
Redis가 외부에 직접 노출되지 않는가 |
| 인증 |
AUTH 또는 ACL이 적용됐는가 |
| 권한 |
애플리케이션별 최소 명령만 허용하는가 |
| 암호화 |
필요한 환경에서 TLS를 쓰는가 |
| 위험 명령 |
삭제·설정 명령을 제한했는가 |
| 로그 |
접속 실패와 위험 명령 사용을 추적하는가 |
| 백업 |
백업 파일 접근 권한을 제한했는가 |
베스트 프랙티스
| 권장 방식 |
이유 |
| 지표를 prefix/API 단위로 나누어 봄 |
평균 착시 방지 |
| memory·latency·eviction 알림 설정 |
장애 전조 감지 |
| Redis는 private network에 배치 |
외부 공격면 축소 |
| ACL로 최소 권한 부여 |
실수와 침해 영향 축소 |
| 위험 명령 제한 |
운영 사고 예방 |
실무에서는?
| 상황 |
지표 |
| 캐시 효과 확인 |
Hit Ratio, DB QPS |
| 장애 전조 확인 |
latency, slowlog, evicted_keys |
| 용량 산정 |
used_memory, key count, value size |
| 연결 문제 |
connected_clients, rejected_connections |
| 복제 문제 |
master_link_status, replication lag |
관련 파일:
- 장애 대응과 트러블슈팅
- 성능 최적화
- 모니터링