[Novelit] Docker-compose에 Grafana, Node-exporter, Prometheus 설치

Jung In Lee·2024년 12월 11일
0

Infra

목록 보기
1/5

전제

  • 먼저 모니터링 시스템을 구축하기위해 알아야할 조건이있다.
    같은 서버안에 모니터링 컨테이너를 구축하면, 메모리를 같이 사용하기때문에 정확한 결과를 이끌어내기 어렵다. 따라서 모니터링 서버를 따로 구축하는것을 추천한다.
  • 헷갈리니까 monitoring, production으로 나누어서 표시하겠다.
  • 이 글은 monitoring 서버와 production 서버를 나누어서 구축했다.
  • 먼저, monitoring 서버에는 다음과 같은 프로그램을 설치한다.
    • prom/prometheus
    • grafana
  • production 서버에는 다음을 설치한다
    • node-exporter

monitoring 서버

1. Docker-compose

  • docker-compose.yml
services:
  prometheus:
    image: prom/prometheus
    container_name: prometheus
    restart: always
    env_file:
    - .env
    ports:
      - ${PROMETHEUS_BINDING_PORT}:${PROMETHEUS_PORT}
    volumes:
      - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro
    user: root
    networks:
      - promnet
      

  grafana:
    image: grafana/grafana
    container_name: grafana
    restart: always
    env_file:
    - .env
    ports:
      - ${GRAFANA_BINDING_PORT}:${GRAFANA_PORT}
    user: root
    networks:
      - promnet
      
      
networks:
  promnet:
    driver: bridge

2. Prometheus 설정

  • 우선 docker-compose를 업데이트하기 전에 ec2내에 prometheus 폴더를 생성하고, prometheus.yml을 작성한다.
  • 프로메테우스는 스프링부트 메트릭을 수집하기때문에, 스프링부트에서도 설정이 필요하다.

applicaiton.yml

  • 여기서 monitoring 서버를 구축한다고, application-monitoring.yml을 따로 설정하는경우가있는데...
  • 해당 서버의 메트릭을 수집하는것이기 때문에 같은 yml에 넣어줘야한다. 아니면 같이 적용하거나. 그런 방법이있는지는 아직 안찾아봐서 모르겠다. 난 같이 설정해줬다.
  • 혹시 spring boot security를 적용중인경우 url을 열어놔야한다.
/actuator/**
  • application.yml
---
### monitoring
management:
  server:
    port: ${MANAGEMENT_SERVER_PORT}
  endpoint:
    metrics:
      enabled: true
    prometheus:
      enabled: true
  endpoints:
    web:
      exposure:
        include: prometheus
  • 당연히 gradle도 설정해줘야한다.
	// string boot actuator, prometheus
	implementation "org.springframework.boot:spring-boot-starter-actuator"
	implementation "io.micrometer:micrometer-registry-prometheus"
  • 최종 확인은 ${monitoring IP} : 9090으로 나중에 접속해서 확인한다.
  • 중간 확인은 ${production IP}/actuator하고 ${production IP}/actuator/prometheus로 확인할수있다. 여러 매트릭 목록이 쫘악 출력될것이다.

Prometheus.yml

  • 파일 위치를 잘 결정해야한다.
    • 리눅스 파일위치
      • . : 현재 디렉토리
      • . / prometheus.yml : 현재 디렉토리의 파일
      • ~ : 루트 디렉토리였나...
  • volumn : 원격에서 위치 : docker 컨테이너 안에 마운트 시킬 위치
  • .env 파일 사용을 지원하지않는다.
  • 주소는 배열안에 문자열 형식으로 넣어주어야한다.
global:
  scrape_interval: 10s
  evaluation_interval: 10s
scrape_configs:
  - job_name: 'novelit'
    metrics_path: /actuator/prometheus
    static_configs:
      - targets: ['${production 서버 IP}:${spring boot 서버포트}']

  - job_name: 'novelit-aws'
    metrics_path: /metrics
    static_configs:
      - targets: ['${production 서버 IP}:${node-exporter port}']
  • global의 스크랩 주기는 알아서 설정하자.
  • 여기서 스크랩할것은, 2가지이다.
    • spring boot 서버
    • ec2 서버
  • prometheus.yml을 생성했으면, 업데이트를 먼저 해줘도 된다.
docker pull prom/prometheus
docker-compose up -d
  • 프로메테우스는 해당 monitoring 서버의 포트로 들어가서
  • 위와같이 표시되어야 정상이다.

production 서버

  • grafana를 설정하기전에, production 서버에 node-exporter를 설치해준다. 이건 대시보드 형태로 다른 다양한 형태가 많다. 그중에서도 node-exporter를 사용하는 것이다.
  • docker-compose.yml
  node-exporter:
    image: prom/node-exporter
    container_name: node-exporter
    env_file:
    - .env
    ports:
      - ${NODE_EXPORTER_BINDING_PORT}:${NODE_EXPORTER_PORT}
    networks:
      - backend
  • node-exporter 기본포트는 9100이긴하다.
  • 설치해준다.
docker pull prom/node-exporter
docker-compose up -d
  • node-exporter확인은 해당 production IP의 node-exporter포트에서 확인하면된다.
  • 여기도 메트릭이 쫘악 출력된다.

3. Grafana 설정

  • docker-compose에 잘 적어놨다면 추가 할것이 딱히 없다.

  • 그라파나는 접속해서 비밀번호를 재설정해주고, node-exporter를 사용하고 prometheus를 import해서 사용하기만하면된다.

  • granfana의 기본 포트는 3000이다.

  • monitoring server ip의 grafana 포트로 접속한다.

  • 아이디는 docker-compose.yml에 설정한대로이고, 초기 비밀번호는 admin이다. 접속하고 비밀번호를 변경하면된다.

  • 접속한후 대시보드로 들어가서 New-import로 들어가자

  • node-exporter의 대시보드 ID는 1860이다. load하자.

  • 로드한뒤에는 네이밍을 해주고,

  • 프로메테우스 데이터 소스를 설정한다.

  • 이부분이 중요하다. 처음에 할때 이부분에서 헤멧다. 첫번째 블로그에 모니터링IP:프로메테우스포트 로 되어있는데, 모니터링 IP가 production IP가 아니라 Monitoring IP를 의미하는것이다.

  • save&test를 눌러주면 대시보드가 생성된다.

  • 들어가서, 적용한 데이터소스로 전환해주면

  • 그에따른 대시보드 현황이 표시된다.

  • 너무 많이 생성된 데이터 소스는 connection - datasource에서 목록을 볼수있는데, 들어가서 삭제하면된다.

  • 설정 끝.

참고블로그

추신

  • 일단 느낀점은, ci/cd를 구축해놓지않으니 서버를 빌드하고 도커에 올리고 내려받고 다시 올리고 하는 과정이 너무 반복되다보니, 특히 도커 허브에 푸시할때 시간이 너무 오래걸린다. 아마 다음과정은 ci/cd를 구축하거나 간단히 github action등을 사용해봐야할것같다.
profile
Software Developer

0개의 댓글