배경 및 목표
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 Exporter 및 Prometheus 구성
├── 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를 도입하면 어떤 이점이 있나요?
Related Posts
Search