redis_monitoring
Redis Monitoring(Grafana)
레디스 서버 모니터링에 필요한 정보를 대시보드(dashboard) 형태로 볼 수 있습니다.
실시간으로 동기화 중인 레디스게이트 엔터프라이즈 서버 2대를 한 화면에서 모니터링할 수 있어서
더욱 좋습니다.
크게 여섯 개의 그룹으로 구분했습니다.
- 서버 정보(IP:Port, 리눅스(OS)), 키 개수, 초당 명령 실행 수(commands/sec), CPU, Memory
- 클라이언트 입력(input), 출력(output), 동기화를 위한 다른 레디스 서버와 보내기(send), 받기(recv) 정보
- 디스크 사용량:레디스가 설치된 홈 디렉토리(디스트 파티션), 로그 디렉토리, 데이터 디렉토리의 디스 사용량을 보여줍니다.
- 레디스가 설치된 서버의 시스템 메모리 사용량, 스왑 사용량:
- 자식 프로세스(child process)의 상태, CPU 사용률, 메모리 사용량:
- 로그(log): 레디스 서버의 로그(redis.log)를 볼 수 있습니다.
💻 Grafana를 이용한 모니터링은 redisGate Enterprise Server 7.5.1, 8.0.1 이상에서 사용할 수 있습니다.
모니터링 SW 구성도

Redis Monitoring
1. Keys, Commands, CPU, Memory
📖 개요
- 왼쪽에 Redis 1번 서버, 오른쪽에 Redis 2번 서버를 배치했습니다.
- 레디스 서버 모니터링에 꼭 필요한 서버 정보, 키 개수, 명령 실행 수, CPU 사용률, 메모리 사용량을 한 화면에 표시했습니다.
- 대시보드에 게이지(gauge)와 차트(time chart)를 같이 배치해서 실시간 파악과 시간에 따른 변화를 한번에 파악 할 수 있도록 했습니다.


🖥️ 서버 정보

- Server IP:Port: 레디스 서버의 IP와 Port를 보여줍니다. 예) 192.168.0.100:18504 (Type:Stat)
- 레디스 버전 표시: 레디스 버전을 보여줍니다. 예) redisGate Ent 8.1.0 (Type:Stat)
- OS 정보: OS 정보를 보여줍니다. 예) CentOS Linux 7 (Core) (Type:Stat)
- Uptime: 레디스 인스턴스가 시작한 후 경과한 시간을 보여줍니다. 예) 7.2 mins (Type:Stat)
📝 서버 부팅 시간이 아닙니다. - CPU Spec 정보: CPU Spec 정보를 보여줍니다. 예) Intel(R) Xeon(R) CPU E3-1230 v6 @ 3.50GHz 8 Cores (Type:Stat)
- ℹ️ 이 서버 정보는 ssh 터미널에서 mon.sh를 실행했을 때 타이틀 부분에 나오는 서버 정보와 같습니다.

🔄 레디스 서버(인스턴스) 정보
초(sec)당 명령 실행 수

- Redis Keys: 레디스 서버의 키 개수를 보여줍니다. (Type:Stat) 2대 레디스 서버를 구분하기 위해 Redis1, Redis2로 표시합니다.
- Cmds/sec: 초당 명령 실행 수를 게이지로 보여줍니다. 백분율 기준은 redis-benchmark 초당 입력 수를 기준으로 합니다. benchmark 값을 redis.conf에 등록합니다. 예) benchmark-commands 120000 (Type:Gauge)
- 초당 명령 실행 수: Gauge 아래에 큰 숫자로 표시합니다. (Type:Stae)
- Commands/sec: 초당 명령 실행 수를 시계열 차트로 보여줍니다. 아래에 Min(최소), Mean(평균), Max(최대), Last(마지막) 값을 보여줍니다. (Type:시계열(Time Series)차트)
CPU 사용률(%)

- Redis CPU: 레디스 서버 프로세스가 사용하는 CPU 사용률(%)입니다. 일반적인 상황에서 레디스는 CPU 1코어만 사용합니다. 멀티 코어 환경에서 시스템 CPU 사용률로 파악하면 잘못 파악할 수 있습니다. (Type:Gauge)
- 레디스 프로세스 CPU 사용률(%): CPU 사용률을 시계열 차트로 보여줍니다. 노란색(orange)은 sys mode, 초록색(green)은 user mode입니다. (Type:시계열(Time Series)차트)
- Clients: Type: Stat. 현재 접속해있는 클라이언트 수. 큰 숫자로 표시합니다.
메모리 사용률(%), 사용량(bytes)

- Redis Memory: 레디스 메모리(RSS) 사용률(%). 시스템 총 메모리(RAM)을 기준으로 합니다. 레디스에 maxmemory를 설정한 경우 maxmemory 값을 기준으로 합니다. (Type:Guage)
- 레디스 프로세스 메모리(RSS) 사용량(bytes):바이트(MiB/GiB 등)으로 표시합니다. (Type:시계열(Time Series)차트)
- ℹ️ 이 정보는 ssh 터미널에서 mon.sh를 실행했을 때 나오는 keys, cpu, rss, clients, commands와 같습니다.

2. Client Input/Output, 동기화 Send/Recv
📖 개요
- Client Input/Output: 일반 클라이언트로 부터 들어오는 명령의 량(bytes)와 명령의 결과로 나가는 데이터 량(bytes)을 차트로 보여줍니다.
- 동기화 Send/Recv: 실시간 동기화하는 양 서버간 데이터 통신량도 차트로 보여줍니다. 데이터 량 뿐만아니라 양 서버간 통신이 잘되는지도 쉽게 파악할 수 있습니다.

🖧 클라이언트 입/출력, 데이터 동기화 통신
Client Input/Output

- Client Input(bytes): 클라언트로부터 입력받은(Input) 데이터량(bytes). (Type:시계열(Time Series)차트)
- Client Output(bytes): 클라언트로 보내지는(Output) 데이터량(bytes). (Type:시계열(Time Series)차트)
Sent to, Recv from

- Send to Redis2/Redis1:동기화 서버로 보내는(Send) 데이터량(bytes). 동기화하는 양 서버는 주기적으로 상대 서버 상태 확인을 합니다. (Type:시계열(Time Series)차트)
- Recv from Redis2/Redis1: 동기화 서버로부터 받은(Recv) 데이터량(bytes). (Type:시계열(Time Series)차트)
- 위 이미지는 동기화 대상 서버에 Heartbeat(PING) 데이터를 주고 받은 것입니다.
3. Disk
📖 개요
레디스게이트 엔터프라이즈 서버에서는 레디스가 설치된 홈 디렉토리, 로그 디렉토리, 데이터 디렉토리를 등록해서 각 디스크 파티션의 사용률, 사용량을 표시해서 혹시 디스크 부족으로 인한 문제가 발생하지 않도록 할 수 있습니다. 각 디렉토리(디스크 파티션)은 redis.conf에 등록합니다.

💽 디스크 사용률, 사용량
- Disk Redis home dir: Redis가 설치된 홈 디스크 파이션 사용률(%)을 게이지 형태로 보여줍니다. 예) Dir: '/' (Type:Guage)
- 레디스 홈 디스크 파이션 사용량(bytes): 디스크 사용량(bytes)을 시계열 차트로 보여줍니다. Mount:'/', Patition:'/dev/sda2' (Type:시계열(Time Series)차트)
- Disk Log dir: 레디스 로그 디스크 파이션 사용률(%)을 게이지 형태로 보여줍니다. 예) Dir:'/boot' (Type:Guage)
- 레디스 로그 디스크 파이션 사용량(bytes): 디스크 사용량(bytes)을 시계열 차트로 보여줍니다. (Type:시계열(Time Series)차트)
- Disk Data dir: 레디스 데이터(AOF/RDB) 디스크 파이션 사용률(%)을 게이지 형태로 보여줍니다. 예) Dir:'/data' (Type:Guage)
- 레디스 데이터 디스크 파이션 사용량(bytes): 시계열 차트로 보여줍니다. (Type:시계열(Time Series)차트)
4. System Memory / Swap
📖 개요
위에서 설명한 레디스 프로세스 CPU, 메모리 사용량과 별도로 시스템 CPU, 메모리, SWAP 사용량을 보여줍니다. 레디스 전용 서버가 아닌 경우 유용합니다.


💻 시스템 CPU, 메모리, 스왑 사용률, 사용량
- System CPU: 시스템 CPU 사용률(%)을 보여줍니다.
- System Memory: 시스템 메모리(RAM) 사용률(%), 사용량(bytes). 사용률은 total memory 대비입니다. 게이지 아래에 total memory 량을 보여줍니다. 시계열(Time Series) 차트로 시간에 따른 변화를 파악할 수 있습니다.
- System Swap: 시스템 스왑(swap) 사용률(%), 사용량(bytes).
사용률은 total swap 대비입니다. 게이지 아래에 total swap 량을 보여줍니다.
스왑 영역은 아래의 경우에 사용합니다.
1) 메모리가 부족할 경우 스왑 영역을 사용하며,
2) 메모리가 여유있지만 오랜동안 사용(참조)하지 않은 데이터를 OS가 스왑 영역을 옮겨 메모리를 더 확보합니다.
📌 System Memory를 모두 사용하면 OS(Linux)에서 해당 프로세스(레디스 인스턴스)를 Kill 시키는 경우가 있습니다. 그러므로 스왑 영역을 System Memory와 같은 크기 또는 반(1/2) 정도는 잡는 것을 권장합니다.
5. Child State
📖 개요
레디스 서버가 중요한 작업 시 상태를 보여줍니다.
- LOAD: 레디스 서버가 시작할 때 기존 데이터(AOF/RDB 파일)를 읽어서 메모리에 적재(로드)하는 중이라는 표시(LOAD)와 진행률(%)을 보여줍니다.
- SEND/RECV: 1번 서버에는 2번 서버에 전체 데이터를 보내는 경우, 1번 서버에는 'SEND'와 보내는 데이터 누적량이 표시되고, 2번 서버는 'RECV'와 받는 데이터 누적량이 표시됩니다.
- AOF: AOF rewrite 시 'AOF'와 진행률(%)을 보여줍니다.
- RDB: RDB save 시 'RDB'와 진행률(%)을 보여줍니다.
1) 평상 시(Normal)
Child State에 'N/A'(Not Applicable/해당없음)가 표시되고, Child Write, Memory(RSS), CPU에는 아무것도 표시되지 않습니다. 정확히 표현하면 이 세 항목(시계열 차트)는 child process가 활동중일 때 표시되는데, 평상 시에는 child process가 존재하지 않습니다.

2) 로드(LOAD) 중
- 로드(LOAD)는 레디스 서버 시작 직후 AOF/RDB 데이터를 읽어들일 때 표시됩니다.
로드 작업은 Main process에서 진행합니다. - Child State: LOAD(%) 예) LOAD(58%)

3) SEND / RECV 중
- 전체 데이터 동기화 시 발생합니다. 아래 이미지는 1번 서버의 전체 데이터를 2번 서버로 보내는 과정입니다. 2번 서버를 시작했을 때 발생합니다. 1번 서버는 1.03GB를 보내고 있고, 2번 서버는 733MB를 받고 있습니다.
- 해당 작업 동안 1번 서버의 child process가 약 3GB의 메모리를 사용하고 있고, CPU는 거의 100%를 사용하고 있습니다.

4) AOF 중
- 2번 서버에서 AOF rewrite 작업 중임을 보여줍니다.
- Child State: AOF가 37% 진행중이고, child Write: 초당 약 96MB 정도 디스크에 쓰고 있습니다.
- AOF rewrite 작업 중 child process가 약 3GB의 메모리를 사용하고 있고, CPU는 거의 100% 사용하고 있습니다.

6. Logs
- 레디스 서버의 로그(redis.log)를 조회합니다.

모니터링 SW
모니터링 SW 구성도

모니터링 SW
redisGate_exporter(레디스게이트 익스포터)
- 레디스 서버에 정보를 요청(info 명령 실행)합니다. 받은 정보는 Prometheus가 가져갑니다.
- redisGate Enterprise Server 용으로 만들어졌습니다.
- 기본적으로 9122번 포트를 사용합니다.
Promtail(프롬테일)
- 레디스 서버의 로그(redis.log)를 수집합니다. 수집한 데이터는 Loki가 가져갑니다.
- 기본적으로 9080번 포트를 사용합니다.
Prometheus(프로메테우스)
- 데이터를 수집, 가공, 저장해서 Grafana에 제공합니다.
- redisGate_exporter에서 수집한 원자료를 가공, 저장해서 grafana에게 제공합니다.
- 기본적으로 9090번 포트를 사용합니다.
Loki(로키)
- Promtail로 부터 수집한 로그 데이터를 저장하고, grafana에게 제공합니다.
- 기본적으로 3100번 포트를 사용합니다.
Grafana(그라파나)
- 서버 모니터링 화면을 제공합니다. 🧮게이지(gauge), 📊그래프, 📈차트(chart) 등 다양한 형태의 시각화(visualization) 도구를 제공합니다.
- 기본적으로 3000번 포트를 사용합니다.
SW 설치 위치(서버)
1. 레디스 서버에 모니터링 SW 모두 설치

- 장점: 모두 레디스 서버에 설치합니다. 다른 서버가 필요하지 않습니다.
- 단점: 레디스 1번 서버가 다운되면 모니터링 할 수 없습니다.
2. AP 서버와 레디스 서버에 나누어서 설치(권장)

- 장점: Grafana, Prometheus, Loki를 AP 서버에 설치하므로, 레디스 1번 서버가 다운되어도 모니터링 할 수 있습니다.
- 단점: AP 서버가 필요합니다.