보통 회사에서 무료의 관계형 데이터베이스로 mysql을 많이 사용합니다.
mysql로 사용중인 우리의 db가 갑작스럽게 꺼진다거나 에러가 날 경우 사용중인 실시간 서비스 등에 치명적인 영향을 미칠 수 있습니다.
그래서 사용중인 툴을 실시간 모니터링하고 지정한 어떠한 경우에 알람을 보내도록 설정하곤 하는데요.
오늘은 그중 mysql을 모니터링하는 방법과 과정을 알아보도록 합시다.
mysql을 모니터링하기 위해서는 mysqld-exporter를 사용합니다.
보통 툴마다 툴명-exporter이러한 공식 exporter를 제공하는데 만일 이런 공식 exporter가 없을 경우 자체 모니터링 시스템이 있거나 다른 exporter를 활용하여 모니터링 할 수 있다고 합니다.
저는 mysqld-exporter를 kubernetes상에 올려 mysql의 metric을 수집하고 이를 prometheus job scrape로 지정하여 grafana에 수집 metric ui dashboard와 alert를 지정하도록 해보겠습닏.
mysqld-exporter를 설치하기위한 deployment와 service를 작성해주겠습니다.
# mysql-exporter.yaml
apiVersion: v1
kind: Service
metadata:
name: mysqld-exporter
namespace: monitoring
labels:
app: mysqld-exporter
spec:
type: ClusterIP
ports:
- name: http-metrics
port: 9104
protocol: TCP
selector:
app: mysqld-exporter
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysqld-exporter
namespace: monitoring
labels:
app: mysqld-exporter
spec:
selector:
matchLabels:
app: mysqld-exporter
replicas: 1
template:
metadata:
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "9104"
labels:
app: mysqld-exporter
spec:
containers:
- name: mysqld-exporter
image: prom/mysqld-exporter:latest
env:
- name: DATA_SOURCE_NAME
value: {{mysql user명}}:{{mysql pwd}}@{{mysql host}}:{{mysql port}}/
ports:
- containerPort: 9104
DATA_SOURCE_NAME 부분에다가는 앞서 설치한 mysql에 접속할 수 있는 사용자 정보를 넣어주면 됩니다.
없을 경우 아래 sql문을 통해 접속권한을 가진 사용자를 생성해주시면 됩니다.
mysql> GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost' identified by cds8080808!';
mysql> flush privileges;
이를 실행시켜주면 mysql-exporter가 설치됩니다.
kubectl apply -f mysql-exporter.yaml