[Redis] MONITOR 명령 사용법과 주의사항
1. MONITOR 명령이란?
MONITOR 명령은 Redis 서버로 들어오는 모든 명령을 실시간으로 스트리밍하는 디버깅용 명령입니다.
명령이 실행될 때마다 타임스탬프, 클라이언트 주소, 실제 명령이 그대로 출력됩니다.
1
redis-cli MONITOR
위 한 줄만 실행해도, 현재 Redis로 들어오는 모든 요청을 바로 볼 수 있습니다.
2. 출력 형태
MONITOR 명령은 아래와 같은 형태로 출력됩니다.
1
2
3
4
5
6
$ redis-cli MONITOR
OK
1768915582.881555 [0 127.0.0.1:50958] "SET" "user:1" "Jayden"
1768915582.882308 [0 127.0.0.1:49814] "GET" "user:1"
1768915582.882665 [0 127.0.0.1:41580] "DEL" "user:1"
1768915582.881555: UNIX 타임스탬프 (UTC)[0 127.0.0.1:50958]: DB 번호, 클라이언트 주소, 클라이언트 포트"SET" "user:1" "Jayden": 실제 실행된 명령과 인자
이는 실시간 디버깅에는 충분하지만, 사람이 읽기엔 너무 빠르기 때문에 보통 grep이나 파일로 리다이렉션해서 봅니다.
1
2
3
4
5
# 특정 키 패턴만 필터링
redis-cli MONITOR | grep "user:"
# 파일로 리다이렉션
redis-cli MONITOR > redis_monitor.log
3. 활용 사례
MONITOR는 실시간으로 Redis 명령을 추적할 수 있어서 다양한 상황에서 유용합니다.
특히 개발 환경에서 디버깅하거나, 예상치 못한 동작의 원인을 찾을 때 빠르게 문제를 파악할 수 있습니다.
3-1. 캐시 동작 확인
GET/SET 흐름을 보면서 캐시 히트/미스 패턴을 빠르게 파악할 수 있습니다.
1
redis-cli MONITOR | grep "GET\|SET"
3-2. 특정 키 삭제 원인 추적
삭제 명령이 들어오는 시점과 클라이언트 정보를 확인할 수 있습니다.
1
redis-cli MONITOR | grep "DEL"
3-3. 의심스러운 명령 탐지
FLUSHDB, FLUSHALL 등 위험한 명령을 실시간으로 감시할 수 있습니다.
1
redis-cli MONITOR | grep "FLUSH"
4. 주의사항
MONITOR는 강력하지만 프로덕션 환경에서는 함부로 사용하면 안 되는 명령입니다.
4-1. 성능 영향
MONITOR는 모든 명령을 문자열로 변환해 스트리밍하기 때문에 CPU 사용량과 메모리 부담이 크게 증가할 수 있습니다.
특히 트래픽이 많은 환경에서는 응답 시간이 느려지거나 다른 클라이언트에 영향을 줄 수 있습니다.
4-2. 민감 정보 노출
명령어의 모든 인자가 그대로 출력되기 때문에 토큰, 비밀번호, 개인정보 등의 민감 정보가 그대로 노출될 수 있습니다.
따라서 로그 파일을 저장할 때는 접근 권한을 철저히 제한하고, 필요한 경우 민감한 패턴은 필터링해서 저장해야 합니다.
4-3. 장시간 사용 금지
MONITOR는 문제를 빠르게 파악하고 즉시 종료하는 용도로만 사용해야 합니다.
디버깅이 끝나면 바로 Ctrl+C로 종료해야하며, 절대 백그라운드에서 계속 돌려두어서는 안됩니다.
5. 모니터링 대안
MONITOR는 개발 환경에서 빠르게 문제를 찾는 데는 유용하지만, 위에서 언급한 성능 영향과 보안 이슈 때문에 프로덕션 환경에서는 전용 모니터링 도구를 사용하는 것이 권장됩니다.
대표적인 Redis 모니터링 도구로는 Redis-Stat, Grafana + Prometheus 조합 등이 있습니다.
만약 모니터링 도구를 갖추기 어려운 상황이라면, 성능 영향이 적은 Redis 내장 명령들을 활용하는 방법도 있습니다.
1
2
3
4
5
6
7
8
# 서버의 상태, 통계 및 구성 정보 등을 조회
redis-cli INFO
# 슬로우 쿼리 로그 조회
redis-cli SLOWLOG GET {$count}
# 현재 연결된 클라이언트 목록 조회
redis-cli CLIENT LIST
