콘텐츠로 이동

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

관련 파일: - 장애 대응과 트러블슈팅 - 성능 최적화 - 모니터링