이번 프로젝트에서 프로메테우스와 그라파나를 사용해 모니터링을 하게 되어서 정리용으로 포스팅..
Prometheus
🔥 "프로메테우스"는 그리스 로마 신화에 나오는 그 이름이 맞다. 미래를 예측하고 신들에게서 불을 훔쳐 인간에게 준 인물이기에 로고가 횃불 모양이며 미래에 발생 할 수 있는 문제를 예측하고 미리 알려줌으로써 장애를 방지한다는 모니터링 시스템의 특징과 잘 부합한다.
프로메테우스는 오픈소스 시스템 모니터링 및 경고 도구이다.
Prometheus는 시계열 데이터베이스(TSDB)를 사용하여 메트릭 데이터를 수집하고, 쿼리 및 시각화를 통해 시스템 상태를 모니터링하고 경고를 설정할 수 있다.
※ 매트릭 데이터는 특정 시스템이나 프로세스의 상태를 숫자로 표현한 데이터를 의미한다.
※ 시계열 데이터는 특정 시간 순서에 따라 측정된 데이터의 연속적인 집합을 의미한다. 쉽게 말해, 시간의 흐름에 따라 변화하는 값들을 순서대로 나열한 데이터이다.
Grafana
그라파나는 오픈소스 분석 및 시각화 플랫폼이다.
복잡한 데이터를 이해하기 쉬운 그래프, 차트, 테이블 등으로 표현하여 시스템의 상태를 한 눈에 파악할 수 있도록 도와주는 도구이다.
그라파나는 웹 서버 모니터링, 데이터베이스 모니터링, 네트워크 트래픽 분석, IoT 데이터 시각화 등에 사용된다.
그라파나와 프로메테우스를 함께 사용하는 이유
프로메테우스는 데이터를 수집하고 저장하는 역할을, 그라파나는 수집된 데이터를 시각화하여 이해하기 쉽도록 만들어주는 역할을 하기 때문에 두 도구가 서로 보완하며 강력한 모니터링 시스템을 구축하게 되기 때문.
파일 작성 이전 기초 설정
settings
├── prometheus
│ ├── config
│ │ └── prometheus.yml
│ │
├── grafana
│ ├── provisioning
│ │ ├── alerting
│ │ ├── dashboards
│ │ └── datasources
먼저 프로메테우스와 그라파나의 설정 파일을 루트 디렉토리 위치의 settings에 넣어 관리할 것이고 후에 그라파나와 슬랙을 연동해서 알림을 받아올 때 사용할 슬랩 웹훅 URL은 외부로 노출되면 안되기 때문에 .env 안에 넣어 환경 변수로 전달해줄 것이다.
# .env
SLACK_WEBHOOK_URL=https://hooks.slack.com/services/웹훅 토큰
이 파일은 깃헙에도 올라가면 안되므로 커밋 전에 .gitignore에 추가해 무시해줘야하며 웹훅 URL 및 .env 파일 작성에 대한 것은 문서로 작성해 팀원들과 공유해야한다.
Docker로 프로메테우스와 그라파나 띄우기
docker-compose.yml
services:
prometheus:
image: prom/prometheus
container_name: prometheus
volumes:
- ./settings/prometheus/config:/etc/prometheus
ports:
- 9090:9090
command:
- '--storage.tsdb.path=/prometheus'
- '--config.file=/etc/prometheus/prometheus.yml'
restart: always
networks:
- t4y
grafana:
image: grafana/grafana
container_name: grafana
ports:
- 3000:3000
environment:
- GF_SECURITY_ADMIN_PASSWORD=pickple
- GF_USERS_ALLOW_SIGN_UP=false
- GF_NOTIFIERS_CONTACTPOINT_URL=${SLACK_WEBHOOK_URL}
volumes:
- ./settings/grafana/provisioning/:/etc/grafana/provisioning/
restart: always
depends_on:
- prometheus
networks:
- t4y
networks:
t4y:
driver: bridge
프로메테우스는 prometheus.yml 라는 설정 파일을 만들어줘야하므로 로컬 폴더에서 prometheus.yml을 읽을 위치를 볼륨에 적어준다.
📍 settings/prometheus/config/prometheus.yml
volumes:
- ./settings/prometheus/config:/etc/prometheus
docker-compose.yml이 있는 위치를 기준으로 로컬 환경의 ./settings/prometheus/config 디렉토리와 도커 컨테이너 디렉토리 /etc/prometheus 를 바인드 마운트 해준다.
💡 바인드 마운트 Bind Mount : 컨테이너와 호스트 시스템 간의 파일 및 디렉토리를 공유하는 방식. 바인드 마운트를 사용하면 컨테이너가 호스트 시스템의 특정 디렉토리에 접근하거나 수정할 수 있게 된다.
environment:
- GF_SECURITY_ADMIN_PASSWORD=pickple
- GF_USERS_ALLOW_SIGN_UP=false
- GF_NOTIFIERS_CONTACTPOINT_URL=${SLACK_WEBHOOK_URL}
volumes:
- ./settings/grafana/provisioning/:/etc/grafana/provisioning/
- GF_SECURITY_ADMIN_PASSWORD=pickple : 따로 계정 설정을 해두지 않는다면 그라파나의 기본 아이디/비밀번호는 admin/admin이다. 이 부분은 비밀번호만 설정해둔 것.
- GF_USERS_ALLOW_SIGN_UP=false : admin 계정만 사용하기 위해 회원 가입 기능을 막아둠.
- GF_NOTIFIERS_CONTACTPOINT_URL=${SLACK_WEBHOOK_URL} : .env 파일로 가져온 웹훅 URL을 그라파나 폴더 안으로 또 넘겨줘야 하므로 그라파나의 환경변수로 지정해준다.
그라파나 또한 바인드 마운트를 사용해 디렉토리를 연결시켜준다.
depends_on:
- prometheus
depends_on은 컨테이너 간의 의존성을 정의할 때 사용되며 이는 그라파나 컨테이너가 실행되기 전에 프로메테우스 컨테이너가 먼저 실행되도록 지정한다는 뜻이다.
prometheus.yml
global:
scrape_interval: 10s
scrape_timeout: 10s
evaluation_interval: 2m
scrape_configs:
- job_name: 'eureka-server'
metrics_path: '/actuator/prometheus'
scheme: 'http'
static_configs:
- targets: ['host.docker.internal:19090']
labels:
service: 'server'
# ... 생략 ...
prometheus.yml에는 프로메테우스 서버가 수집할 메트릭 데이터의 대상, 스크래핑 간격, 경고 규칙 등을 정의해준다.
- scrape_interbal: 10s : 프로메테우스가 타겟 시스템에서 메트릭 데이터를 수집하는 간격을 10초로 설정.
- scrape_timeout: 10s : 프로메테우스가 타겟 시스템에서 메트릭 데이터를 수집하는 동안 응답을 기다리는 최대 시간을 10초로 설정. 만약 10초 내에 응답을 받지 못 하면 해당 타겟에 대한 스크래핑은 실패 처리됨.
- evaulation_interval: 2m : 프로메테우스가 설정된 규칙을 평가하는 간격을 2분으로 설정.
- scrape_configs: 프로메테우스의 타겟 targets을 지정하는 부분. 어떤 시스템이나 서비스에서 메트릭 데이터를 수집할 지 지정.
scrape_configs의 생략된 부분들은 적혀 있는 유레카 서버 외에도 프로메테우스가 모니터링을 할 대상들인 게이트 웨이와 그 외 여러 개의 마이크로서비스들에 대한 정보들을 적었다.
docker-compose up -d
이 파일을 로컬 디렉토리의 settings/prometheus/config 안에 넣어두고 docker-compose 파일을 실행시킨다.
컨테이너가 모두 잘 실행됨을 확인 할 수 있다.
localhost:9090 으로 접속하면 프로메테우스 서버 UI를 확인 할 수 있다.
그 중 Targets를 확인해보면 아까 scrape_configs로 지정한 타겟들을 잘 찾고 있음을 확인 할 수 있다.
※ 서버와 같은 경우 실행하지 않으면 unhealthy로 뜨니 꼭 서버와 모든 서비스를 전부 run 한 상황에서 확인.
localhost:3000에 접속하면 그라파나 UI를 확인 할 수 있다.
위 도커 컴포즈 파일에서 작성한대로 admin/pickple로 로그인.
따로 설정하지 않았다면 admin/admin으로 로그인 후 비밀번호 변경(선택)
그라파나 홈페이지가 잘 뜬다.
이제 이 쪽에서 대시보드 및 데이터 소스 등을 설정해주면된다.
'DevOps' 카테고리의 다른 글
도커로 프로메테우스 & 그라파나 띄우기 + 프로비저닝 기능까지 2 (2) | 2024.10.14 |
---|---|
Docker로 Cassandra 띄우기 및 실습하기 (1) | 2024.10.04 |
[✉️ Kafka] Kafka 설치 및 예제로 실습해보기 (2) | 2024.09.27 |
[✉️ Kafka] Kafka 이해하기2 - Zookeper, Broker, Message (2) | 2024.09.27 |
[✉️ Kafka] Kafka 이해하기1 - Producer, Consumer, Topic, Partition (0) | 2024.09.27 |