선행 작업으로 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']
Docker
복사
**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
JavaScript
복사
참고
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 접속합니다.
아래에 있는 Targets 정보와 같이 exporter Status 정보가 UP으로 나오면 // mongodb-exporter 지못미
Grafana에서 지표를 확인할 수 있습니다.
이제 Grafana Web 환경에 접속해보겠습니다.
Chrome 브라우저를 통해서 http://localhost:3000 접속합니다.
Default ID / PW 는 admin 입니다.
모니터링을 위해서는 모니터링 대상의 정보를 어디서 가져올 것인지 설정을 해야 하는데 Data sources에서
설정할 수 있습니다.
아마도 Local에서 Docker 환경을 사용하시는 분이 가장 혼란을 겪는 부분일 것 같은데 여러 가지 exporter
는 도커 환경을 권장하지 않는데 이는 Docker Network 환경까지 고려해야 해서 권장하지 않는 것 같습니다.
지금 환경에서는 Mac Docker 환경이므로 http://host.docker.internal:9090 으로 설정합니다.
페이지 하단에 더 많은 설정들이 있지만 기본 값으로 두고 Save & test 버튼을 눌러서 마무리합니다.
prometheus data sources가 정상적으로 추가되었습니다.
이제 redis exporter 보여주는 dashboard를 확인해보겠습니다.
직접 Dashboard를 만들 수 있지만 이미 많은 사람들이 각 Resource를 분석하여 만든 Dashboard들이 있습니다.
아래 주소에 접속해서 모니터링 대상을 검색해서 맞는 것을 사용할 수 있습니다.
https://grafana.com/grafana/dashboards/
Name 항목은 변경 가능하고 prom 항목은 Promethus 선택 후 Import 선택하면 완료됩니다.
완성된 Redis 모니터링 화면입니다.