세상에서 제일 쉬운 Prometheus - Grafana 모니터링 설정 - MySQL편

sojukang·2022년 7월 28일
0

Node Exporter - Prometheus - Grafana 모니터링 과정

1편에 이어 MySQL도 모니터링해봅시다. 다시 전체적인 구조를 설명드리겠습니다

Node Exporter는 스파이와 같습니다. 우리가 모니터링을 원하는 서버에 투입하여 관련 정보를 모읍니다.
Prometheus는 국정원과 같습니다. Node Exporter 등 서버의 정보(metrics)를 모은 스파이들에게 주기적으로 pull 요청을 하여 metrics를 수집합니다.
Garafana는 모은 정보를 바탕으로 시각화하는 도구입니다.

이번 글에서는 이전 글에서 설정한 Prometheus - Grafana를 기반으로 MySQL이 설치된 서버에 MySQL Server Exporter 스파이를 추가로 파견해봅시다.

MySQL Server Exporter

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 설정

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를 실행해봅시다.
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가 수집할 겁니다.

Prometheus

이전 글을 참조해주세요🤸‍♂️

Grafana

이전 글을 참조해주세요🤸‍♂️

Dashboard 연결

이번에는 MySQL Overview Dashboard를 연결해봅시다.

역시 Copy ID to Clipboard를 통해 복사한 id를 Grafana에서 Dashboards -> +import에 진입하여 import 해줍시다.



위와 같이 MySQL Server의 다양한 metrics를 모니터링 할 수 있습니다🌟

참고

MySQL Server Exporter docs

profile
기계공학과 개발어린이

0개의 댓글