Prometheus 와 Grafana, Node Exporter , Mysqld Exporter , RabbitMQ Exporter 환경 구축 (1/2)

2024. 4. 2. 18:41· 운영체제 및 서버/Linux
목차
  1. 모니터링 환경 구축
  2. 구축 배경
  3. 설치 및 세팅 

모니터링 환경 구축

프로메테우스

구축 배경

서버 상태, Rabbit MQ 상태, Mysql 상태를 실시간으로 확인할 수 있는 환경을 구축하고 싶다는 생각은 계속 해왔다.

개발서버의 경우 Proxmox로 구성되어 있어 언제든지 서버 상태를 조회해볼 수 있었지만, 서비스운영 서버의 경우에는 직접 들어가 일일히 top 또는 htop 을 통해 확인 해줘야 했다.

만약 데이터베이스 이슈 확인을 위해 슬로우쿼리가 의심되는 경우라면 그게 맞는지 로그를 뒤져 지연 시간을 확인해야 한다. 

 

여럿 다양한 경우들이 발생할 수 있고, 서비스 운영을 하는 상황이라면 더더욱 모니터링 시스템 구축은 필수이다. 

그 중 오픈소스로 사용이 가능한 프로메테우스와 그라파나를 소개 설치 시 시행착오를 줄일 수 있도록 설치 가이드를 작성하고자 한다.

 

설치 및 세팅 

프로메테우스는 자료 수집을 진행 , 그라파나는 수집된 자료를 시각화하는 오픈소스이다.

일반적으로 프로메테우스와 그라파나를 함께 쓰는게 일반적이다. 

 

프로메테우스의 기본 용어

메트릭(Metric) 측정 가능한 데이터 포인트로, 시스템의 상태를 나타내는 숫자값.
예를 들어 CPU 사용량, 메모리 사용량, 요청 수 등이 메트릭에 해당.
타임 시리즈(Time Series) 시간의 흐름에 따른 메트릭의 연속적인 데이터 포인트 집합.
메트릭과 레이블(Label)의 조합으로 구성.
레이블(Label) 메트릭에 부가적인 식별 정보를 제공하는 키-값 쌍. 
예를 들어 job=node_exporter, instance=host1:9100 등이 레이블에 해당.
타겟(Target) 메트릭을 수집하는 대상으로, 일반적으로 엔드포인트 URL을 의미.
예를 들어 node_exporter의 엔드포인트가 타겟이 됨.
작업(Job) 동일한 목적의 타겟 그룹으로, 유사한 메트릭을 수집하는 타겟들의 집합.
예를 들어 node_exporter를 실행하는 모든 노드들이 하나의 작업이 될 수 있음
스크랩(Scrape) 프로메테우스가 타겟의 메트릭을 수집하는 행위.
특정 간격(scrape_interval)으로 주기적으로 수행.
알림 규칙(Alerting Rule) 특정 조건을 만족하면 알림을 발생시키는 규칙.
이를 통해 문제 상황을 감지하고 관리자에게 알림을 보낼 수 있음.
레코딩 규칙(Recording Rule)
새로운 타임 시리즈 데이터를 만들거나 기존 데이터를 전처리하는 규칙.
데이터 가공 및 차원 축소에 사용.
익스포터 ( Exporter ) 애플리케이션이나 시스템 메트릭을 프로메테우스가 수집할 수 있는 형태로 노출해주는 프로그램.
Exporter가 메트릭을 HTTP 엔드포인트로 노출하면, 프로메테우스가 이를 주기적으로 스크랩하여 수집 함.
다시 정리해보면 타깃 시스템의 메트릭을 수집하고 프로메테우스 포맷으로 변환, HTTP 엔드포인트를 통해 이 메트릭들을 노출시키는 역할을 수행.

 출처 : claude 3 AI

도커기반으로 설치하지 않으면 매우 귀찮아지는데, 아주 다행스럽게 도커기반 이미지로도 제공하고 있어 이를 기반으로 서버에 세팅했다.

프로메테우스에서 익스포터 (Exporter)는 말 그대로 자료를 제공해주는 역할을 하는 도구로써, 기본적으로 툴킷 기반으로 커스텀하게 제작해 사용도 가능하지만 왠만한 익스포터는 만들어져있기도 하고 프로메테우스측에서 오피셜하게 공식적으로 지원하는 익스포터들이 있다.

그중 몇개를 함께 사용해보고자 한다. 

노드 익스포터 - https://github.com/prometheus/node_exporter

 

GitHub - prometheus/node_exporter: Exporter for machine metrics

Exporter for machine metrics. Contribute to prometheus/node_exporter development by creating an account on GitHub.

github.com

MySQL server exporter - https://github.com/prometheus/mysqld_exporter

 

GitHub - prometheus/mysqld_exporter: Exporter for MySQL server metrics

Exporter for MySQL server metrics. Contribute to prometheus/mysqld_exporter development by creating an account on GitHub.

github.com

폴더 및 파일 구조

./grafana/

./nodeExporter/

./prometheus/prometheus.yml

./docker-compose.yml

prometheus.yml

global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: 'node_exporter'
    metrics_path: /metrics
    static_configs:
      - targets: ['서버주소:9100']

  - job_name: 'rabbitmq_exporter'
    metrics_path: /metrics
    static_configs:
      - targets: ['서버주소:15692']

  - job_name: 'mysqld_exporter'
    metrics_path: /metrics
    static_configs:
      - targets: ['서버주소:9104']
evaluation_interval : 규칙 파일에 정의된 레코딩 룰과 알림룰을 평가하는 주기 
scrape_interval : 프로메테우스가 모니터링 대상의 메트릭을 수집(스크랩)하는 주기
metrics_path : 엔드포인트 패스

docker-compose.yml

version: "3.8"

services:
  prometheus:
    image: prom/prometheus
    container_name: prometheus
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus:/etc/prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
    restart: always

  grafana:
    image: grafana/grafana
    container_name: grafana
    ports:
      - "4000:3000"
    volumes:
      - ./grafana:/var/lib/grafana
    restart: always
    
  mysql:
    container_name: mysql
    image: mysql:8.0.34
    volumes:
      - ./mysql/init/:/docker-entrypoint-initdb.d/
      - ./mysql/conf:/etc/mysql/conf.d
      - ./mysql/storage:/var/lib/mysql
    environment:
      TZ: "Asia/Seoul"
      MYSQL_DATABASE: 데이터베이스명
      MYSQL_ROOT_PASSWORD: 루트_비밀번호
      MYSQL_USER: 유저_계정명
      MYSQL_PASSWORD: 유저_계정비밀번호
    ports:
      - "3306:3306"
    restart: always

  mysqld-exporter:
    container_name: mysqld_exporter
    image: prom/mysqld-exporter
    environment:
      - DATA_SOURCE_NAME="계정명:비밀번호@(mysql:3306)/"
    command:
      - "--mysqld.username=계정명:비밀번호"
      - "--mysqld.address=mysql:3306"
    links:
      - mysql
    ports:
      - 9104:9104
    depends_on:
      - mysql
    restart: unless-stopped

  node_exporter:
    image: quay.io/prometheus/node-exporter:latest
    container_name: node_exporter
    command:
      - '--path.rootfs=/host'
    restart: unless-stopped
    volumes:
      - '/:/host:ro,rslave'
    ports:
      - "9100:9100"

일단 여기선 Mysql 설정을 길게 얘기하진 않겠다.  볼륨은 직관적이니 수정해서 쓰면 된다.

개인적으로 초기 sql 과 별도 설정이 필요해 따로 빼둔 것이다.

 

중요한건 mysqld-exporter인데, 공식 github에는 enviroment 로 DATA_SOURCE_NAME 을 저렇게 넣으면 된다고 하는데  실제로 구동시엔 안된다. 

해결방법은 command를 이용하는 방법인데, 위 docker-compose에 나와있는대로 mysqld.username과 address 를 지정해주면 된다.

우선 도커 컴포즈에 명시한 mysqld exporter를 제외하고 구동 (docker-compose up -d) 하여 mysql 컨테이너에 접속해 내부에서 데이터베이스 계정을 미리 만들어주자. 루트를 사용해도 되긴 하는데, 과한 권한을 굳이 줄 필요가 없기 때문에 새로 만들어보자.

# mysql 컨테이너 아이디를 확인한다.  
docker ps 

# 컨테이너 접속 
docker exec -it 컨테이너ID bash 

# mysql 접속 
sh#> mysql -uroot -p 

# 계정 생성 
CREATE USER 'exporter'@'%' IDENTIFIED BY '비밀번호' WITH MAX_USER_CONNECTIONS 3;

# 권한 부여 
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'%';

# 적용
FLUSH PRIVILEGES;

# ctrl + c 이후 exit
# MYSQL 메트릭을 수집하기 위해 필요한 권한 리스트 

PROCESS : 프로세스 목록, 프로세스 상태 등을 확인.
REPLICATION CLIENT : 슬레이브 상태 및 마스터 로그 상태를 확인.
SELECT : 데이터베이스 정보를 읽기 위해 information_schema , 메트릭 수집 대상이 되는 각 데이터베이스에 대한 SELECT 권한.

계정을 만들었다면 잠시 빼놨던 Docker-compose 내  mysqld-exporter 설정을 다시 삽입한다. 

 

rabbitmq 익스포터도 따로 있긴한데, Official 도 아니기에 따로 깃헙에 있는 익스포터는 쓰지 않았다. 

게다가 RabbitMQ 공식사이트에서 확인해보니 이미 엔드포인트단을 Plugin으로 제공하고 있어 굳이 라이브러리를 쓸 필요가 없었다.

# 관리자페이지를 설치하지 않았다면 설치
rabbitmq-plugins enable rabbitmq_management

# 프로메테우스용 Exporter Plugin
rabbitmq-plugins enable rabbitmq_prometheus

http://메세지큐_주소:15672/metrics 로 접속해보면 아래와 같은 사진이 나오는걸 확인할 수 있다.

사진에 보이는 것 외에 꽤나 긴 줄이 나오는걸 확인할 수 있다.

여기까지 세팅하고 docker-compose를 구동했다면 아래의 주소들 접속이 이상없이 잘 됨을 확인할 수 있다.

http://서버주소:9090/ : 프로메테우스 
http://서버주소:4000/ : 그라파나
http://서버주소:9100/ : 노드 익스포터
http://서버주소:9104/ : MySQL 익스포터
http://서버주소:15672/ : RabbitMQ 관리자 및 익스포터 

물론 RabbitMQ 의 경우에는 별도(도커가 아닌 일반설치)로 켰다는 전제하다.

사실 편의상 docker-compose에 넣어도 되는데 이미 서비스 중인 곳에서 사용하는게 있어서 스킵한다. 

각 주소로 접속해보면 잘 되는걸 확인할 수 있다. 안된다면, 본인 방화벽 또는 폴더권한을 한번 봐야한다. 

여기까지 했다면 프로메테우스와 각 익스포터 설정은 끝났다.

아래 사진과 같이 프로메테우스에 접속해서 status-Target을 눌러보자.

프로메테우스에 접속 후 status-Targets 클릭

아래 사진과 같이 뜨면 된다.

Node Exporter 가 두 개인건, 나는 두 서버를 등록해서 그런건데 아마 따라한 사람들이라면 하나만 뜰 것 이다.

위 사진처럼 state가 UP 이라고 나온다면 정상.

스테이트가 UP이고 각 메트릭스주소를 눌러 아까 RabbitMQ때 Metrics 페이지와 비슷하게 뜨는 것 같으면 정상이다. 

이제 그라파나를 설정하러 가보자.

Prometheus 와 Grafana,  Node Exporter , Mysqld Exporter , RabbitMQ Exporter 환경 구축 (2/2)

 

Prometheus 와 Grafana, Node Exporter , Mysqld Exporter , RabbitMQ Exporter 환경 구축 (2/2)

그라파나 세팅 이전 프로메테우스와 익스포터 설정은 아래의 링크에서 확인할 수 있다. Prometheus 와 Grafana, Node Exporter , Mysqld Exporter , RabbitMQ Exporter 환경 구축 (1/2) Prometheus 와 Grafana, Node Exporter , Mys

god-logger.tistory.com

 

반응형
저작자표시 비영리 변경금지

'운영체제 및 서버 > Linux' 카테고리의 다른 글

프로메테우스 - prom-client 를 통한 Node.js 웹소켓 메세지 수신량 파악  (0) 2024.04.05
Prometheus 와 Grafana, Node Exporter , Mysqld Exporter , RabbitMQ Exporter 환경 구축 (2/2)  (0) 2024.04.03
데이터베이스 백업용 SCP 사용을 위한 서버간 SSH 키 등록  (0) 2024.03.20
Ubuntu 22.04 Docker ( with docker-compose) 설치  (1) 2024.03.19
  1. 모니터링 환경 구축
  2. 구축 배경
  3. 설치 및 세팅 
'운영체제 및 서버/Linux' 카테고리의 다른 글
  • 프로메테우스 - prom-client 를 통한 Node.js 웹소켓 메세지 수신량 파악
  • Prometheus 와 Grafana, Node Exporter , Mysqld Exporter , RabbitMQ Exporter 환경 구축 (2/2)
  • 데이터베이스 백업용 SCP 사용을 위한 서버간 SSH 키 등록
  • Ubuntu 22.04 Docker ( with docker-compose) 설치
신·기록
신·기록
개발 관련 이슈 해결방안, 활용 방법, 제품 리뷰 등을 기록하는 개인 블로그
신·기록
문제해결집
신·기록
전체
오늘
어제
  • 분류 전체보기 (175)
    • 뉴스 (9)
    • 제품 리뷰 (19)
    • 운영체제 및 서버 (53)
      • Linux (27)
      • Mac OS (8)
      • Proxmox (6)
      • Nginx (2)
      • Raspberry Pi (3)
      • Odroid M2 (4)
    • AI 인공지능 (7)
    • 모바일 (4)
      • Flutter (1)
      • 안드로이드 (1)
    • 데이터베이스 (11)
      • Mysql (9)
    • 자바 (11)
      • Spring Framework (9)
    • 자바스크립트 (19)
      • Node JS (4)
      • Electron Framework (10)
      • React & Next.js (4)
    • 클라우드 플랫폼 (4)
    • 학습 (4)
    • 이슈 (21)
    • 비디오게임 에뮬레이터 (2)
    • CPU 성능 순위 (1)
    • 그래픽카드 성능 순위 (1)
    • 기타 (7)

블로그 메뉴

  • 이용 원칙
  • 태그
  • 방명록

인기 글

최근 글

05-13 14:55
관련 문의는 방명록에 부탁드립니다.
본 블로그의 스킨 출처는 아래와 같습니다.
hELLO · Designed By 정상우.v4.2.2
신·기록
Prometheus 와 Grafana, Node Exporter , Mysqld Exporter , RabbitMQ Exporter 환경 구축 (1/2)
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.