선행 작업으로 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를 실행 시의 단계별 진행사항은 아래와 같습니다.
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 접속합니다.
아래에 있는 Targets 정보와 같이 exporter Status 정보가 UP으로 나오면 // mongodb-exporter 지못미 Grafana에서 지표를 확인할 수 있습니다.