Search

[Monitoring]1.4 도커를 활용하여 MySQL Exporter 모니터링 환경 구축

Publish Date
2024/12/13
Tags
Status
Done
1 more property
MySQL Exporter 설정하기
MySQL Exporter를 도입하여 쿠폰 발급 시스템의 DB 성능 모니터링과 리소스 병목 구간을 시각화하여 실시간으로 성능 문제를 감지하고 대응하는 시스템을 구축한다.
Table of Content

배경 및 목표

MySQL Exporter는 Prometheus와 함께 사용되며 MySQL 서버의 상태 및 성능 메트릭을 수집하는 도구이다. 이를 통해 DB 성능 모니터링, 리소스 사용량 파악, 병목 구간 분석 등을 수행할 수 있다.
쿠폰 발급 트랜잭션 과정에서 발생하는 MySQL 리소스 사용량성능 병목을 시각화하고 분석하기 위해 MySQL Exporter를 도입하여 Prometheus와 Grafana를 통해 실시간 모니터링 시스템을 구축한다.
구성 요소
설명
MySQL Server
애플리케이션 데이터를 저장하고 관리하는 역할을 수행
MySQL Exporter
Prometheus에서 사용할 수 있는 형식으로 MySQL 서버의 메트릭 수집하여 노출
Prometheus
MySQL Exporter로부터 메트릭 데이터를 수집하고, 저장하며, 사용자 정의 쿼리로 데이터를 분석 지원
Grafana
Prometheus에서 수집한 데이터를 기반으로 시각적인 대시보드를 생성

MySQL Exporter 설정하기

개발환경

항목
설정
DB
MySQL 8.0
Monitoring
Prometheus, Grafana
Exporter
MySQL Exporter (Prometheus)
Dash Board
MySQL 대시보드 템플릿 (ID: 7362)

구조

coupon-BE/ ├── docker-compose.yml # MySQL ExporterPrometheus 구성 ├── coupon-DB/ │ └── backup/ │ └── my.cnf # MySQL 사용자 인증 설정 파일 └── monitorning/ └── prometheus/ └── config/ └── prometheus.yml # Prometheus 설정
Java
복사
파일명
내용
my.cnf
MySQL Exporter를 위한 사용자 인증 설정
docker-compose.yml
MySQL Exporter 컨테이너 추가 및 설정
prometheus.yml
Prometheus가 MySQL Exporter의 메트릭을 수집하도록 설정

구현

0. 환경 사전 준비

MySQL 데이터베이스 서버와 Prometheus 및 Grafana가 설치 되어 있어야 한다.

1. .my.cnf파일 설정

호스트 머신에 .my.cnf 파일을 생성한다.
my.cnf
[client] host=coupon-mysql user=abcd password=1234
SQL
복사
확인
> docker exec -it mysqld-exporter sh cat /etc/.my.cnf
SQL
복사
> docker inspect mysqld-exporter | grep -A 2 "Args" "Args": [ "--config.my-cnf=/etc/.my.cnf" ],
SQL
복사

2. MySQL 사용자 생성 및 권한 설정

MySQL Exporter가 DB 접근 및 모니터링이 가능하도록 abcd 사용자에게 권한을 부여한다.
> docker exec -it coupon-mysql bash mysql -u root -p # 비밀번호: 1234 mysql> GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'abcd'@'%'; mysql> FLUSH PRIVILEGES; # 서비스 재시작 docker-compose restart coupon-mysql
SQL
복사
확인
> SHOW GRANTS FOR 'abcd'@'%';
SQL
복사

3. MySQL Exporter 컨테이너 설정

docker-compose.yml에 MySQL Exporter 컨테이너를 추가한다.
docker-compose.yml
services: mysqld-exporter: image: prom/mysqld-exporter:latest container_name: mysqld-exporter networks: - coupon-network ports: - 9104:9104 environment: - DATA_SOURCE_NAME=abcd:1234@(coupon-mysql:3306)/ # MySQL 컨테이너 이름 사용 - TZ=Asia/Seoul depends_on: - coupon-mysql volumes: - ./coupon-DB/backup/my.cnf:/etc/.my.cnf command: - '--config.my-cnf=/etc/.my.cnf'
SQL
복사
확인
> docker inspect mysqld-exporter | grep -A 5 "Env" "Env": [ "DATA_SOURCE_NAME=abcd:1234@(coupon-mysql:3306)/", "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ], "Cmd": [ "--config.my-cnf=/etc/.my.cnf"
SQL
복사

4. Prometheus 설정

MySQL Exporter의 메트릭을 수집하도록 Prometheus에 설정을 추가한다.
prometheus.yml
scrape_configs: - job_name: 'mysql-exporter' # MySQL 메트릭 수집 static_configs: - targets: [ 'mysqld-exporter:9104' ]
SQL
복사
Prometheus를 재시작
docker-compose restart prometheus
SQL
복사
확인
http://<host>:9104/metrics
SQL
복사

5. Grafana 대시보드 설정

데이터 소스 추가

1.
Grafana 접속: http://<Grafana-Server-IP>:3000
2.
Data sources › Add data source > Prometheus 선택
3.
URL 지정
URL: http://<Prometheus-Server-IP>:9090 (Docker 네트워크 기준)
host.docker.internal:9090
prometheus:9090
host.docker.internal은 Docker 컨테이너에서 호스트 머신에 접근할 수 있도록 제공되는 특별한 DNS 이름이다. host.docker.internal을 사용하면, 컨테이너에서 호스트 머신의 IP 주소를 명시하지 않고도 접근할 수 있다.
로컬 환경에서 Docker 컨테이너와 호스트 간 통신을 위해 host.docker.internal이 필요할 수 있다.
그러나 Prometheus와 Grafana가 동일한 Docker 네트워크에서 실행 중이라면, http://prometheus:9090을 사용하는 것이 권장된다.
4.
Save & Test 클릭

대시보드 설정하기

1.
Dashboards > New > Import 클릭하기
2.
Grafana에서 대시보드 가져오기
대시보드 ID 입력: 7362 (MySQL Metrics)
MySQL 대시보드 Id(7362) Load
3.
데이터 소스 설정하기
위에서 설정한 데이터 소스를 지정한다.
데이터 소스 Prometheus 설정 후 Import 하기
4.
대시보드 확인
MySQL 대시보드

Q&A

Q.MySQL Exporter는 어떤 역할을 하나요?
Q. Prometheus와 MySQL Exporter의 연동 과정은 무엇인가요?
Q. MySQL Exporter에서 수집하는 주요 메트릭은 무엇인가요?
Q. MySQL Exporter를 통해 성능 병목 구간을 어떻게 파악할 수 있나요?
Q. 쿠폰 발급 시스템에 MySQL Exporter를 도입하면 어떤 이점이 있나요?
Search
Main PageCategoryTagskkogggokkAbout MeContact