Mysqld-exporter on Kubernetes

snooby·2022년 9월 22일
3

🐳 Docker & K8S

목록 보기
44/51
post-thumbnail

보통 회사에서 무료의 관계형 데이터베이스로 mysql을 많이 사용합니다.
mysql로 사용중인 우리의 db가 갑작스럽게 꺼진다거나 에러가 날 경우 사용중인 실시간 서비스 등에 치명적인 영향을 미칠 수 있습니다.

그래서 사용중인 툴을 실시간 모니터링하고 지정한 어떠한 경우에 알람을 보내도록 설정하곤 하는데요.
오늘은 그중 mysql을 모니터링하는 방법과 과정을 알아보도록 합시다.

mysql을 모니터링하기 위해서는 mysqld-exporter를 사용합니다.
보통 툴마다 툴명-exporter이러한 공식 exporter를 제공하는데 만일 이런 공식 exporter가 없을 경우 자체 모니터링 시스템이 있거나 다른 exporter를 활용하여 모니터링 할 수 있다고 합니다.

목표

저는 mysqld-exporter를 kubernetes상에 올려 mysql의 metric을 수집하고 이를 prometheus job scrape로 지정하여 grafana에 수집 metric ui dashboard와 alert를 지정하도록 해보겠습닏.

yaml 파일 작성

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
profile
데이터를 가치있게 다루고 싶은 개발자 🐥

0개의 댓글