새소식

Welcome to the tech blog of Junior Backend Developer Myoungji Kim!

Development/Cache

[Cache] GUI 환경에서의 Memcached 지표 수집 (Prometheus, Grafana)

  • -

🐳 들어가기 전

🔗 [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에서 시각화

  • docker-compose.yml
grafana:
  image: grafana/grafana:latest
  ports:
    - "3000:3000"
  environment:
    - GF_SECURITY_ADMIN_PASSWORD=0000
  network_mode: host
  depends_on:
    - prometheus

실제 실무에서 확인하고 있는 그라파나 Dashboard

  1. SELECT node
    • 모니터링 필요한 서버 IP를 node 에서 선택
  2. Hit ratio (%)
    • 캐시 히트율
    • 캐시 요청 중에서 메모리에 있는 캐시 데이터를 성공적으로 찾아 반환한 비율
  3. Connections
    • 멤캐시 서버에 연결된 클라이언트 및 세션 수
  4. Get / Set ratio
    • get, set 명령이 요청된 비율
    • 0%에 가까울 수록 get, set 캐시 작업이 균형적으로 이루어지고 있다는 뜻
  5. Commands
    • 명령어별 누적 사용량
    • 사용량을 보고 싶은 명령어를 패널 하단에서 선택하여 확인
      • delete - 캐시 삭제
      • flush - 캐시 내 모든 데이터 삭제
      • get - 캐시 조회
      • set - 캐시 저장
      • touch - 캐시 데이터 만료시간 재설정
  6. evicts / reclaims
    • evicts - 메모리에서의 캐시 데이터 누적 삭제량
    • reclaims - 메모리에서의 캐시 데이터 누적 회수량
  7. Read / wriiten bytes
    • 네트워크를 통한 읽기/쓰기 데이터 양
  8. Total memory usage
    • 시스템 전체의 메모리 사용량
  9. Items in cache
    • 현재 캐시에 저장된 데이터 항목의 수

'Development > Cache' 카테고리의 다른 글

[Cache] PHP 에서 Memcached(멤캐시) 사용하기  (0) 2024.01.14
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.