728x90

 

오늘 강의를 들으면서 모르는 단어의 연속이었지만.. 암 오케..

 

옆에 맛있는 빵을 두고 먹으면서 이겨내 보았습니다.

 

이겨낸 김에 적어보는 Grafana와 Prometheus로 Redis-exporter 모니터링 해보는 방법..

 

 

1. docker 대신 docker-compose 사용 준비

Docker
단일 컨테이너를 관리하는 도구로, 애플리케이션과 그 애플리케이션이 실행되는 데 필요한 모든 것을 컨테이너라는 단위로 패키징하고 실행

 

Docker Compose
여러 컨테이너를 한 번에 관리할 수 있는 도구로, 애플리케이션이 여러 컨테이너로 구성된 경우(예: 웹 서버, 데이터베이스, 캐시), 이를 하나의 설정 파일(docker-compose.yml)로 정의하고 실행

 

Redis, Redis Exporter, Prometheus, Grafana로 구성된 총 4개의 컨테이너를 관리할 예정이므로 Docker Compose를 사용할 예정입니다.

 

Docker Desktop을 설치했을 경우, Docker 및 Docker Compose 모두 설치되므로 따로 설치 작업은 필요 없습니다.

 

 

2. docker-compose 설정 파일 준비

docker-compose.yaml
여러 개의 Docker 컨테이너를 정의하고 관리하기 위해 사용되는 설정 파일

⭐💡학습 목표: Redis 데이터를 기반으로 Prometheus가 모니터링 데이터를 수집하고, Grafana가 이를 시각화 💡⭐

전체 데이터 흐름

  1. Redis
    • 데이터베이스로 동작하며, 현재 상태와 메트릭(예: 메모리 사용량, 키 개수 등)을 제공
  2. Redis Exporter
    • Redis의 상태 정보를 수집하여 Prometheus가 이해할 수 있는 형식으로 변환
    • Redis와 연결(여기선 REDIS_ADDR=redis://redis:6379)하고 메트릭 데이터를 Prometheus로 전달
  3. Prometheus
    • Redis Exporter가 제공한 메트릭 데이터를 주기적으로 수집하고 저장
    • 데이터베이스 역할을 하며, 요청 시 데이터를 반환
  4. Grafana
    • Prometheus에 저장된 데이터를 가져와 사용자 정의 대시보드를 통해 시각화
    • 사용자는 웹 인터페이스로 그래프, 차트 등을 확인할 수 있음
version: '3.8' #Docker Compose 파일 버전
networks: #네트워크 설정으로, 서비스 간 통신을 가능하게 함
  monitor:
    driver: bridge #네트워크 드라이버로 bridge를 사용

services: #services 아래에 실행할 컨테이너를 정의
  redis:
    container_name: redis #container 이름 지정
    image: redis:6.2 #Image 지정
    ports: #port 매핑
      - 6379:6379
    networks:
      - monitor
      #연결할 네트워크
      #Docker 네트워크는 컨테이너 간의 통신을 가능하게 하는 가상의 네트워크
      #docker-compose.yml에서 networks를 정의하고, 각 컨테이너가 이를 사용하도록 설정하면 같은 네트워크를 공유하는 컨테이너끼리 이름(container_name)을 통해 접근할 수 있음
      #예: redis://redis:6379
    restart: #컨테이너 중단 시, 동작 설정
      always

  prometheus: #모니터링 및 경보 시스템
    image: prom/prometheus:latest
    user: root
    volumes: 
    #호스트(내 컴퓨터)와 Docker 컨테이너의 특정 폴더를 연결하는 설정
    #컨테이너 내부에서 생성된 파일이 호스트에 저장되거나, 호스트의 파일이 컨테이너에서 사용될 수 있게 됨
    #데이터를 영구적으로 저장하거나 공유하기 위해 사용
    #volumes를 통해 데이터를 외부(호스트)에 저장하면 컨테이너를 삭제해도 데이터가 보존
      - ./prometheus/config:/etc/prometheus 
      #호스트의 ./prometheus/config에 있는 설정 파일이 컨테이너 내부에서 사용
      #컨테이너 내부에서 설정을 수정하면 그 내용이 호스트의 ./prometheus/config에 그대로 저장
      - ./prometheus/data:/prometheus
      #호스트의 폴더 ./prometheus/data → 컨테이너 내부의 폴더 /prometheus와 연결
      #Prometheus가 수집한 데이터가 컨테이너 내부의 /prometheus에 저장되는데, 이 데이터가 호스트의 ./prometheus/data에 동기화
      #컨테이너를 삭제해도 데이터는 호스트의 ./prometheus/data 폴더에 남아 있음
    #요약: Prometheus의 설정 파일과 데이터를 호스트의 특정 폴더에 저장하고 컨테이너가 이를 읽고 쓰도록 연결하는 작업
    ports:
      - 9090:9090
    networks:
      - monitor
    restart: always


  grafana: #Prometheus의 데이터를 시각화해주는 툴
    container_name: grafana
    image: grafana/grafana:latest
    environment:
      - GF_SECURITY_ADMIN_USER=admin #관리자 ID를 admin으로 설정
      - GF_SECURITY_ADMIN_PASSWORD=password #비밀번호를 password로 지정
      - GF_USERS_ALLOW_SIGN_UP=false #사용자가 직접 가입하지 못하도록 설정
    volumes:
      - ./grafana/data:/var/lib/grafana #Grafana 데이터 저장소
      - ./grafana/provisioning:/etc/grafana/provisioning #Grafana의 초기 설정 파일들이 들어 있는 디렉터리
    ports:
      - 3000:3000
    depends_on: #Prometheus가 먼저 실행되어야 함
      - prometheus
    networks:
      - monitor
    restart: always

  redis-exporter: #Redis 데이터를 Prometheus에 전송해주는 툴
    container_name: redis-exporter
    image: oliver006/redis_exporter:latest
    environment:
      - REDIS_ADDR=redis://redis:6379 #Redis 컨테이너와 연결
      #redis:// Redis 프로토콜(통신 방식)
      #redis Redis 컨테이너의 이름 (DNS처럼 사용)
    ports:
      - 9121:9121
    depends_on:
      - prometheus #Prometheus가 먼저 실행되어야 함
    networks:
      - monitor
    restart: always

 

 

3. 의존성의 기반에 되는 prometheus 설정 파일 만들기

prometheus.yml
Prometheus가 어디에서 데이터를 수집할지(스크래핑) 설정하는 파일
global:
  scrape_interval: 1m 
  #모든 스크래핑 기본 간격 설정
  #기본적으로 1분마다(targets에서 지정한 서버에서) 데이터를 수집

scrape_configs: #스크래핑 대상 정의
  - job_name: 'prometheus'
    scrape_interval: 1m
    # scrape_configs.scrape_interval이 global.scrape_interval보다 우선 적용
    static_configs: #고정된 타겟 리스트
      - targets: ['localhost:9090'] #Prometheus 자체를 스크래핑

  - job_name: 'redis-exporter'
    scrape_interval: 5s
    static_configs:
      - targets: ['redis-exporter:9121'] #Redis Exporter에서 메트릭 수집

 

 

4. 가자, Docker-compose!

docker-compose -f -d docker-compose.yml up
# Docker Compose는 기본적으로 커맨드가 실행하는 디렉토리에 있는 docker-compose.yml 또는 docker-compose.yaml을 설정 파일로 사용
# -f: 다른 이름이나 경로의 파일을 Docker Compose 설정 파일로 사용
#   : 여러 개의 설정 파일 사용
# up: Docker Compose에 정의되어 있는 모든 서비스 컨테이너를 한 번에 생성하고 실행하기 위해서 사용
# -d: 백그라운드에서 컨테이너 실행

docker-compose start redis
# 내려가 있는 있는 특정 서비스 컨테이너를 올리기 위해서 사용
# 서비스에 대한 기존 컨테이너를 시작
# docker-compose.yml 파일에서 서비스 이름을 기준으로 사용

docker-compose ps
# Docker Compose에 정의되어 있는 모든 서비스 컨테이너 목록을 조회할 때 사용

 

 

5. 실행 화면

Redis-exporter(127.0.0.1:9121)

 

Prometheus(127.0.0.1:9090)

 

Grafana(127.0.0.1:3000)
(3000 포트... 이제 React만의 것이 아닙니다..🍂)

+ Grafana에 Prometheus 연결

⚙️설정 → Data Sources  → Add new data source: Prometheus 선택

  🚨url 입력 시, localhost가 아닌 localhost가 아니라 서비스 이름(prometheus)을 사용해야함

      * Prometheus 컨테이너는 기본적으로 localhost:9090에서 동작하지만, 이는 Prometheus 컨테이너 내부에서만 접근 가능한 주소

      * Grafana 컨테이너는 네트워크 상에서 Prometheus 컨테이너에 접근해야 하며, 이 경우 localhost가 아니라 서비스 이름(prometheus)을 사용해야 함(Docker Compose는 서비스 이름을 DNS 이름으로 자동 해석)

 

+ Grafana Redis Dashboard 설정

  * 해당 Dashboard Template의 Copy ID to clipboard 또는 Download JSON 클릭

  * Dashboards → Import → Import via grafana.com 또는 Upload dashboard JSON file → Import 클릭

 

  • Grafana Dashboard Template

https://grafana.com/grafana/dashboards/

 

Grafana dashboards | Grafana Labs

No results found. Please clear one or more filters.

grafana.com

  • Redis Exporter Dashboard Template

https://grafana.com/oss/prometheus/exporters/redis-exporter/?tab=dashboards

 

Prometheus OSS | Redis exporter

Overview Installation Recording rules Dashboards Alerting rules Grafana Cloud Integration

grafana.com

 

 

6. 안녕, Dokcer-Compose!

docker-compose down
# Docker Compose에 정의되어 있는 모든 서비스 컨테이너를 한 번에 정지시키고 삭제

docker-compose stop redis
# 돌아기고 있는 특정 서비스 컨테이너를 정지시키기 위해서 사용
# 컨테이너를 제거하지 않고 실행중인 컨테이너를 중지
# docker-compose.yaml 파일에서 서비스 이름을 기준으로 사용

 

 


📑

참고 자료

Chat GPT

https://solo5star.tistory.com/19

 

grafana와 prometheus로 모니터링 시스템 구축하기

리뉴얼 된 블로그로 보기: https://solo5star.dev/posts/19/ 작업관리자는 윈도우 PC를 사용하는 사람들에겐 너무나도 친숙한 프로그램입니다. 렉이 걸린다면 CPU를 너무 많이 잡아먹고 있는건지, 메모리

solo5star.tistory.com

https://www.daleseo.com/docker-compose/

 

Docker Compose 커맨드 사용법

Engineering Blog by Dale Seo

www.daleseo.com

https://velog.io/@coastby/Grafana-%EC%84%A4%EC%B9%98-prometheus%EC%99%80-%EC%97%B0%EB%8F%99%ED%95%98%EA%B8%B0

 

[Grafana] 설치, prometheus와 연동하기

Grfana는 Grafana Labs가 개발한 오픈소스 데이터 시각화 플랫폼이다. 차트와 그래프로 대시보드를 구성하여 간편하게 데이터를 확인할 수 있다. 또한 기존의 서버 환경, 쿠버네티스 클러스터 또는

velog.io

 

728x90