개요
자주 사용하는 redis-cli를 미리 정리해두고, 장애 대응이나 모니터링 상황 시에 활용하자.
1. ElastiCache Endpoints
1.1 Connection Endpoints
각 엔드포인트의 역할을 잘 이해하고, 특히 클러스터 모드일 때의 접근 방법을 기억하자.

필자의 상황은 클러스터 모드를 활성화하고 샤드 2, 노드 2 구성을 가진 ElastiCache Engine을 하나 준비해두었다. 이와 같이 클러스터 모드가 활성화된 엔진이라면, 위 이미지처럼 Configuration Endpoint를 주로 활용한다. 참고로, 클러스터 모드를 비활성화한 경우는 Primary Endpoint가 생성되고, 해당 엔드포인트를 활용한다.

이와 같이 Shards and nodes 섹션에서 각 노드들의 Endpoint 또한 확인할 수 있다. 보통은 첫 번째 이미지의 Configuration Endpoints를 활용하고, 특정 샤드/노드에 대한 특수한 확인이 필요할 때만 이 개별 Endpoint를 사용한다.
# Endpoints 정리!
- Configuration Endpoints: 클러스터 모드일 때 일반적으로 커넥션을 맺는 주소
- Primary Endpoints: 클러스터 모드가 아닐 때 일반적으로 커넥션을 맺는 주소
- Shards and nodes 섹션의 개별 Node에 대한 Endpoints: 특정 샤드/노드에 대한 커넥션을 맺는 주소
1.2 redis-cli를 통해 엔드포인트에 연결
redis-cli -h ${cluster-endpoint} -p 6379 -c
- -c: 여러 노드가 생성된 클러스터 모드 엔진의 경우, key가 여러 샤드/노드에 분산되어있다. 이 옵션을 통해 redis-cli가 자동으로 해당 키가 있는 노드에 접근할 수 있도록 리다이렉트를 해주기에, 클러스터 모드일 경우 이 옵션이 필요하다.

# tls로 접속하기
redis-cli --tls -h <host> -p <port>
2. Redis 리소스 상태 확인
# 전체 정보
info all
# 섹션 별 조회
info memory
info stats
info commandstats
info clients
info replication
info keyspace
info server
info persistence
2.1 INFO memory
| 지표 | 의미 | 메모 |
| used_memory_human | 실제 사용 메모리 | dataset(실제 key&value) + overhead(내부 사용 메모리) |
| used_memory_rss_human | OS가 Redis 프로세스에 할당한 메모리 (Resident Set Size) |
|
| mem_fragmentation_ratio | RSS/ used_memory → 메모리 단편화 비율! |
- 1.0~1.2 수준이면 정상이고, 1.5가 넘어가면 위험할 수 있다. 1.0보다 낮으면 스왑 발생 → config set activedefrag yes/ failover/캐시 사용 패턴 개선 |
| used_memory_peak_human | 지금까지 사용한 최대 메모리 |
- 피크를 기준으로 메모리 용량 산정해야한다. - slowlog get 10 - info commandstats |
| used_memory_peak_perc | 현재 사용량이 피크 대비 몇 %인가 | |
| max_memory_policy | 사용 가능한 최대 메모리 한도 → 이 값을 초과하면 Policy 동작 |
- config set maxmemory 12gb - 시스템 메모리의 60~75% 수준으로 설정 권장 → 나머지는 os, 버퍼 등에 사용 |
| mem_allocator | 현재 사용 중인 메모리 할당자 정보 - 대부분 jemalloc-5.x.x이고, - 간혹 lib, tcmalloc |
jemalloc: 기본이자 권장 할당자. 단편화 관리가 우수하고, activedefrag 기능이 jemalloc에서만 동작한다. |
2.2 INFO clients
| 지표 | 메모리 | 메모 |
| connected_clients | 현재 연결된 클라이언트 수 | maxclients와 비교한다. max에 도달하면 전부 연결이 거부된다. |
| blocked_clients | 블로킹 명령(blpop, brpop, xread block)으로대기 중인 클라이언트 수 |
# 자세한 클라이언트 정보 → client list
redis-cli CLIENT LIST
id=123 addr=10.0.0.5:54321 fd=8 name=order-service age=3600 idle=10
flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 obl=0 oll=0 omem=0 cmd=get
- idle: 마지막 명령어 이후 지난 시간 → 좀비 커넥션 확인(보통은 주기적인 헬스체크를 통해 수백초까지 가지 않음)
- Redis 3.2부터는 TCP keepalive가 활성화되어 약 300초로 설정되어 있다. (문서)
- ElastiCache의 경우 Parameter Group에서 관리한다.
- omem: 해당 클라이언트의 출력 버퍼에 쌓인 메모리. 이 값이 크면 큰 응답을 받고 있거나 느리게 응답을 소비 중..
- cmd: 마지막으로 사용한 명령어
3. 성능/트래픽
3.1 INFO stats (성능 관련 지표)
INFO stats의 필드는 두 종류가 섞여 있다.
# 순간값(instantaneous_xxx)
- instantaneous_ops_per_sec: 현재 초당 처리 명령 수
- instantaneous_input_kbps: 현재 클 → 서 Network Bytes
- instantaneous_output_kbps: 현재 서 → 클 Network Bytes
# 누적값(서버 기동 이후 계속 쌓임)
이 값들은 Redis를 재시작하거나 config resetstat을 하지 않는 한 계속 올라가기만 한다. 그래서 요것만 보면 이게 지금 문제인지, 6개월에 한 번 있었던 건지 알기 어렵다.
- total_commands_processed
- keyspace_hits / keyspace_misses
- evicted_keys / expired_keys
- rejected_connections
- sync_full / sync_partial_err
- 그 외 대부분
그래서 info stats은 사실상 exporter, grafana에서 사용하기 유용한 값들이다.
3.2 INFO commandstats
만약 그라파나 상에서 latency나 ops/s가 치솟는 걸 확인했다면, 어떤 명령어가 영향을 주었는지 commandstats를 통해 확인할 수 있다.
redis-cli INFO commandstats
```
```
# 출력 예시
cmdstat_get:calls=5823120,usec=2914560,usec_per_call=0.50,rejected_calls=0
cmdstat_set:calls=1203400,usec=721800,usec_per_call=0.60,rejected_calls=0
cmdstat_hgetall:calls=45200,usec=1582000,usec_per_call=35.00,rejected_calls=0
cmdstat_keys:calls=12,usec=8520000,usec_per_call=710000.00,rejected_calls=0
여기서 봐야할 건 usec_per_call인데, 위 예시에서 keys가 호출당 710ms를 발생한 걸 알 수 있다.
# usec_per_call 기준으로 정렬해서 느린 명령 찾기
redis-cli INFO commandstats | sort -t, -k3 -rn | head -10
3.3 slowlog
Redis는 특정치를 넘어선 명령어를 큐에 저장해서 slowlog get으로 보여준다. Redis 구조인 단일 스레드 특성 상, 한 명령어가 오랫동안 리소스를 독점하면 전체 성능에 영향이 있으므로, 이를 확인하고 개선하는 것이 중요하다.
- 이때 측정 시간은 Network I/O, 응답 전송 시간을 제외한 순수 명령어 실행 시간이다.
# 주요 지표 의미
- slowlog-log-slower-than (임계값, 마이크로초 μs) : parameter group에서 확인할 수 있다.

- slowlog-max-len: 최대 보관 개수
4. 고가용성
4.1 INFO replication
현재 노드에 대한 replication 정보를 알 수 있다.

- master_host: 동기화 대상인 마스터의 주소
- master_link_status: `up`이면 정상 연결, `down`이면 끊긴 상태
- master_last_io_seconds_ago: master와 마지막으로 통신(I/O)한 지 몇 초가 지났는지 → 보통 값이 작을 수록 정상이다. (0~수 초)
- master_sync_in_progress: master가 replica에 대해 sync를 수행 중인지 나타냄. 1이면 동기화, 0이면 아님
- slave_read_only: replica가 읽기 전용인지 나타낸다. 1이면 read-only
- master_failover_state: 현재 진행 중인 failover가 있/없는지
'DB > In-Memory DB' 카테고리의 다른 글
| [Redis] 메모리 지표 Raboja & Redis 메모리 정책 (1) | 2026.01.11 |
|---|---|
| [Redis] Redis 7.x → Valkey 8.x 마이그레이션 PoC (1) | 2025.08.25 |
| [Redis] 캐시와 Redis, ElastiCache (3) | 2025.08.16 |