선행 작업으로 docker, docker-compose 설치가 필요하지만 이 문서에서는 없습니다. 그리고 이 문서는 MacOS, Linux 계열에서 작성되었습니다.

prometheus container를 기동할 때 prometheus.yml 파일이 필요한데 내용은 아래와 같이 작성합니다.

global:                        // 전역설정
  scrape_interval:     15s     // 15초마다 매트릭을 수집. 기본은 1분.
  evaluation_interval: 15s     // 15초마다 규칙을 평가. 기본은 1분.

scrape_configs:                // 매트릭을 수집할 엔드포인트로 여기선 prometheus 서버 자신을 가리킨다.
  - job_name: prometheus
    static_configs:
      - targets: ['prometheus:9090']  // prometheus 서버 자신을 가리킨다.

  - job_name: redis-exporter
    static_configs:
      - targets: ['redis-exporter:9121']
**prometheus, redis, redis-exporter container를 기동하기 위한 docker-compose.yml 내용은 아래와 같이 작성합니다.**

version: '3.9'      // version 3은 도커 스웜과 같이 사용되도록 디자인됨
services:
  grafana:
    image: grafana/grafana
    ports:
      - 3000:3000

  prometheus:
    image: prom/prometheus
    container_name: prometheus
    ports:
      - 9090:9090
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro

  redis:
    image: "bitnami/redis:latest"
    ports:
      - 6379:6379
    environment:
      - REDIS_REPLICATION_MODE=master
      - REDIS_PASSWORD=my_master_password

  redis-exporter:
    image: "oliver006/redis_exporter"
    ports:
      - 9121:9121
    restart: unless-stopped
    environment:
      REDIS_ADDR: "redis:6379"
      REDIS_USER: null
      REDIS_PASSWORD: my_master_password
    links:         // 다른 서비스의 컨테이너와 연결시켜주는 역활을 하고 있다. 이름만 지정하거나 {name}:{alias} 형식으로 지정
      - redis
      - prometheus

참고 docker-compose.yml 파일에 정의하는 versioning은 버전별로 다음과 같은 특징이 있습니다.

version 1 에서는 버저닝을 생략 version 2 부터 마이너 버전(2.x)까지 설정해야 함(생략 시 2.0으로 적용된다.) version 3 은 도커 스웜과 같이 사용되도록 디자인됨

참고 이쯤되면 yml 파일은 다 작성되었고 docker up, down, stop 등 여러가지 명령어 등이 필요해 보입니다.

UP $ docker-compose -u -d // -u UP, -d 서비스 백그라운드로 실행

up 명령어로 compose를 실행 시의 단계별 진행사항은 아래와 같습니다.

  1. 서비스를 띄울 네트워크 설정
  2. 필요한 볼륨 생성 (혹은 이미 존재하는 볼륨과 연결)
  3. 필요한 이미지 풀(Pull)
  4. 필요한 이미지 빌드(Build)
  5. 서비스 의존성에 따라 서비스 실행

DOWN $ docker-compose -v down / -v 볼륨까지 같이 삭제

실행 중인 서비스를 삭제합니다. 컨테이너와 네트워크를 삭제하며, 옵션에 따라서 볼륨도 같이 삭제할 수 있습니다. -v 옵션을 사용하면 DB 데이터 초기화하는데 용이하고 모든 설정을 초기화하고 새로운 마음으로 시작하는데 도움을 줄 수 있습니다.

STOP, START $ docker-compose stop [start]

서비스를 멈추거나, 멈춰 있는 서비스를 시작합니다.

PS $ docker-compose ps

현재 환경에서 실행 중인 각 서비스(container)의 상태를 표시합니다.

EXEC $ docker-compose exec mysql mysql -uroot -psecret oracle [서비스 이름][실행될 명령어] 실행 중인 컨테이너에서 명령어를 실행 할 수 있습니다.

RUN $ docker run

특정 명령어를 일회성으로 실행합니다. exec와 비슷한 역활을 실행하지만 run은 실행 시 새로운 컨테이너를 띄우는 반면 exec는 실행되어있는 컨테이너에 접속합니다. 그래서 exec는 프로세스를 실행시켜 놓을 때 사용되고 run은 batch성 작업에 특화되어 있습니다.

LOGS $ docker-compose logs -f // -f 실시간 로그 출력

output으로 나온 log들을 확인할 때 사용합니다.

CONFIG $ docker-compose config

docker-compose에 최종적으로 적용된 설정을 볼 수 있습니다.

이제 prometheus Web 환경에 접속해보겠습니다. Chrome 브라우저를 통해서 http://localhost:9090 접속합니다.

스크린샷 2022-04-06 오전 10.33.18.png

스크린샷 2022-04-06 오전 10.53.08.png

아래에 있는 Targets 정보와 같이 exporter Status 정보가 UP으로 나오면 // mongodb-exporter 지못미 Grafana에서 지표를 확인할 수 있습니다.

스크린샷 2022-04-06 오전 10.54.16.png