DevOps

도커로 프로메테우스 & 그라파나 띄우기 + 프로비저닝 기능까지 1

waVwe 2024. 10. 13. 01:36
728x90
반응형

 

 

이번 프로젝트에서 프로메테우스와 그라파나를 사용해 모니터링을 하게 되어서 정리용으로 포스팅..

 


 

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으로 로그인 후 비밀번호 변경(선택)

 

 

 

 

그라파나 홈페이지가 잘 뜬다.

이제 이 쪽에서 대시보드 및 데이터 소스 등을 설정해주면된다.

 

 

728x90
반응형