1편에 이어 MySQL도 모니터링해봅시다. 다시 전체적인 구조를 설명드리겠습니다
Node Exporter는 스파이와 같습니다. 우리가 모니터링을 원하는 서버에 투입하여 관련 정보를 모읍니다.
Prometheus는 국정원과 같습니다. Node Exporter 등 서버의 정보(metrics)를 모은 스파이들에게 주기적으로 pull 요청을 하여 metrics를 수집합니다.
Garafana는 모은 정보를 바탕으로 시각화하는 도구입니다.
이번 글에서는 이전 글에서 설정한 Prometheus - Grafana를 기반으로 MySQL이 설치된 서버에 MySQL Server Exporter 스파이를 추가로 파견해봅시다.
MySQL Server Exporter github repository
MySQL Server Exporter 공식 repository에서 현재까지 나온 버전을 확인 후 내 서버 환경에 맞는 버전을 찾아봅시다.
저희는 Linux ubuntu 22.04
, Arm64
기반 CPU 환경에서 0.14.0
버전으로 진행해보겠습니다. Arm64
기반이 아닌 경우 binary 파일 읽기 오류가 발생합니다. 맞는 버전을 설치하거나 docker 등 가상 환경에서 설치를 진행하면 됩니다.
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.14.0/mysqld_exporter-0.14.0.linux-arm64.tar.gz
다운 받은 뒤 압축을 풀고 압축 파일은 지워줍시다.
tar xvfz mysqld_exporter-0.14.0.linux-arm64.tar.gz
MySQL 관련 metrics를 수집하기 위해서는 MySQL에 유저를 등록해야 합니다.
이제 MySQL로 들어가서 설정해봅시다.
MySQL에 들어가봅시다.
mysql -u root -p # 권한이 없을 경우 sudo
CREATE USER 'exporter'@'localhost' IDENTIFIED BY 'enter_password_here' WITH MAX_USER_CONNECTIONS 3;
exporter
에 등록할 유저 이름을, localhost
에 접근할 ip를, enter_password_here
에 password를 넣어주시면 됩니다. 부하가 몰릴 때 metrics 수집 요청이 무시될 경우를 대비해서 MAX_USER_CONNECTIONS
에 적절한 값을 줍시다.
It’s recommended to set a maximum connection limit for the exporter user to avoid overloading the server with monitoring scrapes under heavy load.
유저가 잘 생성 되었는지 확인하려면
show databases;
use mysql;
select user, host from user;
명령을 실행하여 확인해봅시다.
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost';
생성한 유저에게 데이터를 가져오기 위한 적절한 권한을 부여해줍시다.
이제 MySQL에서 나가 서버 환경 변수를 설정해봅시다
export DATA_SOURCE_NAME='exporter:enter_password_here@(mysql_hostname:3306)/'
역시 exporter
에 등록한 유저 이름을, enter_password_here
에 등록한 password를, mysql_localname
에 등록할 접근 ip를 넣어줍시다. localhost에서 접근할 경우 localhost
를 넣으면 됩니다.
이제 MySQL Server Exporter를 실행해봅시다.
MySQL Server Exporter가 설치된 디렉토리에서 다음 명령어를 적용해봅시다.
nohup ./mysqld_exporter --web.listen-address=:8080 &
service 등록을 통해 향후 편하게 할 수도 있습니다. 관련 내용은 Creating a Linux service with systemd를 참조해주세요.
이번 exporter는 8080으로 연결해보겠습니다. 남는 포트로 진행해주세요👍
이제 {ip}:8080/metrics
로 접근하면 MySQL Server Exporter에 의해 수집된 metrics들을 볼 수 있습니다.
# TYPE mysql_exporter_collector_duration_seconds gauge
mysql_exporter_collector_duration_seconds{collector="collect.global_status"} 0.013033016
mysql_exporter_collector_duration_seconds{collector="collect.global_variables"} 0.007757907
mysql_exporter_collector_duration_seconds{collector="collect.info_schema.innodb_cmp"} 0.008343028
mysql_exporter_collector_duration_seconds{collector="collect.info_schema.innodb_cmpmem"} 0.01345214
mysql_exporter_collector_duration_seconds{collector="collect.info_schema.query_response_time"} 0.00017695
mysql_exporter_collector_duration_seconds{collector="collect.slave_status"} 0.016699626
mysql_exporter_collector_duration_seconds{collector="connection"} 0.000915776
...
이제 이 스파이가 쌓은 정보를 Prometheus가 수집할 겁니다.
이전 글을 참조해주세요🤸♂️
이전 글을 참조해주세요🤸♂️
이번에는 MySQL Overview Dashboard를 연결해봅시다.
역시 Copy ID to Clipboard
를 통해 복사한 id를 Grafana에서 Dashboards -> +import
에 진입하여 import 해줍시다.
위와 같이 MySQL Server의 다양한 metrics를 모니터링 할 수 있습니다🌟