🐳 들어가기 전
🔗 [Cache] PHP 에서 Memcached(멤캐시) 사용하기
지난주에는 PHP로 구성된 솔루션에서 Memcached를 사용했다
한 서버에만 카나리 배포를 해서 사용량을 모니터링 해봤는데,
캐시 stats 조회 시마다 고객 서버에 접근하여 telnet으로 멤캐시에 접속해 stats를 조회하는게 여간.. 귀찮은 일이 아니었다.
더불어 현재 우리 팀에서는 Secondary DB 쿼리 로그를 분석해,
호출 빈도 수가 높은 쿼리들을 대상으로 Memcached로 빼려고 하는 작업을 진행 중인데
cache hits율이 얼마나 높아졌는지 등의 모니터링도 쉽지 않을 것 같았다.
여러 서버의 Memcached Hits를 한눈에 볼 수 있는 방법을 고민하다가 이것저것 찾아보게 되었다.
팀장님께서 고민해본다고는 하셨는데, 주말에 계속 머릿 속에 아른아른거려서 구글링을 하며 구축을 해보았다 !
🔍 GUI 환경에서의 Memcached 지표 수집
해보고 싶은 것
Memcached Exporter에서 Prometheus로 메트릭을 수집하고,
그 데이터를 Grafana에서 시각화하기 !
관련 링크
🔗 memcached-exporter : https://github.com/prometheus/memcached_exporter
🔗 Grafana: https://grafana.com/grafana/dashboards/37-prometheus-memcached/
초기 세팅
1. 로컬 docker-compose.yml 내 컨테이너 추가
memcached-exporter:
image: quay.io/prometheus/memcached-exporter:latest
command: "--memcached.address=127.0.0.1:11211"
ports:
- 9150:9150
restart: always
network_mode: host
prometheus:
image: prom/prometheus
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- 9090:9090
restart: always
network_mode: host
2. 레포 최상위 경로에 prometheus.yml 추가
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'memcached' static_configs:
- targets: ['memcached-exporter:9150']
3. /etc/hosts alias 추가
127.0.0.1 memcached-exporter
1. Memcached Exporter에서 Prometheus로 메트릭 수집 (로컬 기준)
1. metrics - http://memcached-exporter:9150/metrics
🔗 collectors 종류: https://github.com/prometheus/memcached_exporter?tab=readme-ov-file#collectors
# HELP memcached_commands_total Total number of all requests broken down by command (get, set, etc.) and status.
# TYPE memcached_commands_total counter
memcached_commands_total{command="cas",status="badval"} 0
memcached_commands_total{command="cas",status="hit"} 0
memcached_commands_total{command="cas",status="miss"} 0
memcached_commands_total{command="decr",status="hit"} 0
memcached_commands_total{command="decr",status="miss"} 0
memcached_commands_total{command="delete",status="hit"} 0
memcached_commands_total{command="delete",status="miss"} 0
memcached_commands_total{command="flush",status="hit"} 0
memcached_commands_total{command="get",status="hit"} 3
memcached_commands_total{command="get",status="miss"} 1
memcached_commands_total{command="incr",status="hit"} 0
memcached_commands_total{command="incr",status="miss"} 0
memcached_commands_total{command="set",status="hit"} 4
memcached_commands_total{command="touch",status="hit"} 0
memcached_commands_total{command="touch",status="miss"} 0
등등
2. Graph - http://localhost:9090/graph
이미지에서 볼 수 있듯, collector 명령어로 그래프 조회가 가능하다.
2. 수집한 데이터를 Grafana에서 시각화
grafana:
image: grafana/grafana:latest
ports:
- "3000:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=0000
network_mode: host
depends_on:
- prometheus
- SELECT node
- 모니터링 필요한 서버 IP를 node 에서 선택
- Hit ratio (%)
- 캐시 히트율
- 캐시 요청 중에서 메모리에 있는 캐시 데이터를 성공적으로 찾아 반환한 비율
- Connections
- Get / Set ratio
- get, set 명령이 요청된 비율
- 0%에 가까울 수록 get, set 캐시 작업이 균형적으로 이루어지고 있다는 뜻
- Commands
- 명령어별 누적 사용량
- 사용량을 보고 싶은 명령어를 패널 하단에서 선택하여 확인
- delete - 캐시 삭제
- flush - 캐시 내 모든 데이터 삭제
- get - 캐시 조회
- set - 캐시 저장
- touch - 캐시 데이터 만료시간 재설정
- evicts / reclaims
- evicts - 메모리에서의 캐시 데이터 누적 삭제량
- reclaims - 메모리에서의 캐시 데이터 누적 회수량
- Read / wriiten bytes
- Total memory usage
- Items in cache