Skip to content

메트릭 수집에 필요한 툴들 설치하기

KWAKMANBO edited this page Jan 20, 2025 · 2 revisions

메트릭 수집에 사용되는 툴

  • Grafana와 Prometheus를 사용할 예정
    • Grafana는 데이터 시각화 수행
    • Prometheus는 메트릭 데이터 수집역할
  • Prometheus는 메트릭 데이터 수집에 Collector라는 데이터 수집 툴을 사용
    • node_exporter, postgres_exporter, cadvisor, nestjs-prometheus
    • 위와 같은 툴들이 있는데 어떤 데이터를 수집하는지 알아보고, 우리 프로젝트에 필요한것들만 사용해볼 예정이다.

🤔 1. node exporter

  • node exporter은 하드웨어의 상태 및 정보 커널 관련 메트릭을 수징하는 Collector
  • 현재 하드웨어의 CPU 및 메모리 등 하드웨어 정보를 수집

node exporter의 사용여부

  • 부하 테스트를 진행하면서 서버에 어느정도 부하가 걸리는지 확인하기 위해서는 HW의 상태 및 정보를 확인할 필요가 있으므로 node exporter는 사용하는게 좋아보임

node exporter 설치하기

1. node exporter image pull해오기

docker pull prom/node-exporter

Pasted image 20250116152745 Pasted image 20250116152900

  • 위 명령어로 node exporter를 pull 해오자
  • node exporter image가 pull 된것을 확인할 수 있음

2. node exporter 실행하기

docker run -d \
  --net="host" \
  --pid="host" \
  -v "/:/host:ro,rslave" \
  quay.io/prometheus/node-exporter:latest \
  --path.rootfs=/host
  • 위 명령어를 입력해서 node exporter를 실행하자
  • node exporter컨테이너가 host의 namespace에 접근하려면 추가적인 옵션들이 필요함
    • node exporter가 host를 모니터링 하기위해서는 path.rootfs를 호스트 루트 디렉토리로 지정해주어야함
    • WHY?) node exporter가 호스트의 파일 시스템에 접근할 수 있게 하기위해서
  • --net="host"
    • 컨테이거나 호스트의 네트워크 네임 스페이스를 공유
    • 컨테이너 내부의 네트워크 인터페이스가 호스트와 동일하게 작동하고
    • Node Exporter가 시스템 리소스 정보를 정확히 수집할 수 있게함
      • host의 네트워크 네임 스페이스를 공유했기 때문에 포트 포워딩 없이 Node Exporter가 사용하는 9100으로 접속하면 된다
  • --pid="host"
    • 컨테이너가 호스트의 프로세스 네임스페이스를 공유
    • 컨테이너 내부에서 호스트의 모든 프로세스를 관찰하 메트릭을 수집할 수 있음
  • -v "/:/host:ro,rslave"
    • 볼륨을 설정, 호스트의 루트 디렉토리 / 와 컨테이너의 /host 디렉토리 경로에 마운트
    • ro 옵션을 통해 마운트를 읽기 전용으로 설정
    • rslave옵션을 통해 Propagation 설정, 하위 마운트 및 변경 사항이 호스트와 컨테이너간에 공유
    • Node Exporter는 호스트의 전체 파일 시스템을 확인해야 디스크 관련 메트릭을 수집할 수 있음 Pasted image 20250116160603
  • Node Exporter가 실행되고 있음
  • Node Exporter는 기본적으로 9100번 포트를 사용한다고 하니 http://localhost:9100로 접속되는지 확인해보자

Node Exporter가 접속 안되는 문제

  • 내 로컬환경에서는 http://localhost:9100로 접속했을때 접속이 안되는 문제가 발생했다.
  • Node Exporter 접속 안되는 문제] 이 글을 보고 해결할 수 있다.

Pasted image 20250116164103 Pasted image 20250116164111


☺️ 2. MySQL Exporter

  • Prometheus에서 제공하는 Exporter들의 종류는 정말로 많음
  • 그중 우리 프로젝트에서 사용하는 MySQL은 MySQL server exporter가 있어 사용해보려한다.

권한부여

  • 일단 exporter전용 유저를 만들어서 사용해볼 예정
CREATE USER 'exporter'@'%' IDENTIFIED BY 'XXXXXXXX' WITH MAX_USER_CONNECTIONS 3;
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'%';
FLUSH PRIVILEGES;
  • exporter는 UserID를 의미하고, 'XXXXXXXX'는 비밀번호를 의미하므로 기호에 맞게 커스텀해도된다. Pasted image 20250116165452
  • 생성한 유저의 정보를 확인해볼 수 있다.

my.cnf 파일 설정하기

sudo echo ''' [client]
host=[컨테이너명]
user=exporter 
password=[비밀번호] 
''' | sudo tee /home/users/mysql_exporter.cnf
  • 디렉토리는 마음대로 해줘도된다. 나같은 경우 home/users로 지정해줬는데 이때 home디렉토리 속에 users라는 디렉토리가 존재해야 명령어가 수행된다.

mysql exporter docker pull해오기

docker pull prom/mysqld-exporter
  • 위 명령어로 mysql exporter를pull해오자

mysql exporter 실행하기

docker run -itd -p 9104:9104  -v /home/users/mysql_exporter.cnf:/.my.cnf --network my-mysql-network --name mysql_exporter prom/mysqld-exporter
  • mysql과 연결하기 위해서는 mysql exportermysql이 속한 네트워크와 동일하게 연결해줘야한다. Pasted image 20250120160103
  • mysql이 속해있는 네트워크 my-mysql-network랑 연결해주자 Pasted image 20250120165432
  • docker inspect [네트워크 이름]으로 mysql과 똑같은 network에 속하는지 확인해주자
  • 같은 network에 속하지 않는다면 연결이 안된다..(한참 헤맸다 이거떔에ㅔ..)

mysql exporter 실행 확인하기

  • 9104포트로 포트 매핑을 했으니, localhost:9104/metrics로 요청을 보내보자 Pasted image 20250120165622
  • 요청을 보냈을때 응답으로온 메트릭 데이터이다.
  • 맨밑 mysql_up이 1이면 연결이 된거고 0이면 연결이 안된거니 명심하자!
  • 같은 네트워크에 속해서 연결할때 명심해야할점, -p 옵션으로 포트 포워딩을 해줬어도, 같은 네트워크 내에서는 컨테이터 내부 포트를 사용하니 포트 매핑한 포트로 연결해줄 필요가 없다고한다!
  • 위 처럼 mysql exporter가 메트릭 데이터를 수집해오는것을 확인할 수 있다.

🔥 NestJS Prometheus

  • 위에서 설치한 node exporter는 http request 및 response time 등을 핸들링하거나 추적하기에는 적합하지 않는 데이터를 수집
  • 실제 http request/response를 다루기 위해서 nestjs-prometheus를 이용해야한다고 한다.
  • NestJS prometheus 에서 설치하는 방법과 적용방법을 알 수 있다.
  • 일단 위에 두개만 먼저 서버에 적용해보고 추후 에 NestJS Prometheus를 도입해볼 예정

참고문헌

grafana monitoring with nestjs
[Prometheus] Node Exporter란?
Mysql exporter Docker 설치

팀 빌딩

📚팀 빌딩
📝Git 전략

회의록

1주차

🤝1월 7일
🤝1월 8일
🤝1월 9일

2주차

🤝주간 계획(1월 13일)

3주차

🤝주간 계획(1월 20일)

인공지능 리팩토링 1주차

🤝주간 계획(2월 3일)

인공지능 리팩토링 2주차

🤝주간 계획(2월 10일)

개발일지

AI 리팩토링 기획안

AI 리팩토링 개발일지

성능개선

리팩토링

팀회고

학습 정리

Clone this wiki locally