Devops

도커로 grafana, prometheus 서버 띄우기

maxwithjude 2025. 2. 24. 13:24

이렇게 멋진 대시보드 한 번 가져보자!

docker-compose.monitoring.yml 파일 작성

services:
  prometheus:
    image: prom/prometheus
    container_name: prometheus
    ports:
      - "9090:9090"
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--web.external-url=/prometheus'
    volumes:
      - ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml
    networks:
      - frontend-network
    depends_on:
      - cadvisor

  grafana:
    image: grafana/grafana-oss
    container_name: grafana
    expose:
      - "3002"
    ports:
      - "3002:3002"
    environment:
      - GF_SERVER_ROOT_URL=http://localhost:3002/grafana
      - GF_SERVER_SERVE_FROM_SUB_PATH=true
    volumes:
      - grafana:/var/lib/grafana
    networks:
      - frontend-network
    depends_on:
      - loki

  cadvisor:
    image: gcr.io/cadvisor/cadvisor:v0.47.0
    container_name: cadvisor
    ports:
      - "8082:8082"
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:rw
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro
    networks:
      - frontend-network
      - backend-network
    depends_on:
      - backend
      - frontend
      - adminer
      - mysql

  loki:
    image: grafana/loki:latest
    container_name: loki
    ports:
      - 3100:3100
    networks:
      - frontend-network
    volumes:
      - ./monitoring/loki-config.yml:/etc/loki/loki-config.yaml

  promtail:
    image: grafana/promtail:latest
    container_name: promtail
    networks:
      - frontend-network
      - backend-network
    volumes:
      - ./monitoring/promtail-config.yml:/etc/promtail/promtail-config.yaml
    depends_on:
      - loki

volumes:
  grafana:

기존 docker-compose.prod.yml에 include추가하기

 

docker compose -f docker-compose.prod.yml up

 

으로 명시적으로 docker-compose 파일을 ssh 상에서 띄우면 docker-compose.monitoring.yml 도 같이 작동한다.

include:
  - docker-compose.monitoring.yml

services:

  nginx_proxy:
    image: jc21/nginx-proxy-manager:latest
    container_name:  nginx_proxy_manager

 

SSL 인증서 받은 도메인에 경로 추가

Nginx proxy manager - proxy host - custom locations에 추가한 경로에 / 으로 구분해 각 컨테이너로 라우팅해준다.

관리자가 <your:domain>/prometheus로 접속할 수 있게 해준 것이다.

 

Prometheus 확인 

 

ec2 방화벽도 그에 맞게 열어주었다. sudo ufw status

Grafana 띄우기

Nginx proxy manager 로 경로 설정 후, 일단 처음 접속하면 처음에는 별 화면이 없어서 놀랄 수 있다 오른쪽 상단 로그인 후 (최초 로그인 시 id: admin, pw: admin) 최초 비번 설정 변경 후 데이터 소스를 추가할 수 있다.

add data source - prometheus 클릭

 

밑의 나머지 설정은 그대로 두고 save&test

알맞게 설정되면

가 뜬다. loki도 똑같이 http://loki:3100으로 추가하기

 

잘 추가된 모습을 볼 수 있다.

 

대시보드 구성하기

오른쪽 상단 + - import dashboard 클릭

대시보드 id 19792 입력 후 로드 클릭.  cadvisor 기반 dashboard 템플릿 id이다.

데이터 소스로 prometheus 클릭 후 가져오기

 

아름다운 대시보드가 완성되었다.

 

로그기반 대시보드 구성

다중컨테이너로 구성된 docker compose up 하다보면 로그가 너무 많이 뜨는 문제가 있다. 이를 필터로 볼 수 있게 하고 싶었다.

 

오른쪽 상단 + - new dashboard  - 오른쪽 상단 settings - variables

 

원하는 대시보드 구성요소 설정 후

Add

최종 프로젝트 기술 스택