[Prometheus] MySQL Exporter with Docker


目次

概要

Prometheusでの、MySQLのメトリクス収集用のMySQL ExporterのDocker環境構築手順。

前提条件

以下の手順でPrometheus環境を構築していることを前提とする。
https://qiita.com/Esfahan/items/0feaedfd771f49ac7ee4

Prometheus公式のexporter

環境

  • mysqld_exporter v0.13.0
  • MySQL 5.7(監視対象)

注意

MySQLのperformance_schemaから情報を収集する。
performance_schemaはMySQL 5.5.3から導入されたパフォーマンスをモニタリングするためのスキーマ。
MySQL 5.6以降ではデフォルトでONになっているが、それ以前のバージョンではOFFになっている可能性があるので注意。

監視対象のMySQLの設定

監視対象のMySQLに以下のユーザーを追加。
MySQL Exporterから監視対象のperformance_schemaにアクセスできるようになっている必要がある。

CREATE USER 'exporter'@'%' IDENTIFIED BY 'XXXXXXXXX' WITH MAX_USER_CONNECTIONS 3;
GRANT PROCESS, REPLICATION CLIENT ON *.* TO 'exporter'@'%';
GRANT SELECT ON performance_schema.* TO 'exporter'@'%';

MySQL Exporterの環境構築

docker-compose.yaml
version: '3'
services:
  mysqld-exporter:
    container_name: mysqld-exporter
    image: prom/mysqld-exporter
    env_file:
      - .env
    ports:
      - 9104:9104
    networks:
      - sample-network

networks:
    sample-network:
        external: true
.env
DATA_SOURCE_NAME=exporter:XXXXXXXXX@tcp(your_db_name:3306)/performance_schema
$ docker-compose up -d --build

Prometheusの設定

こちらの記事で構築したPrometheus環境の設定ファイルを編集する。

監視対象を追加

prometheus.yamlに以下を追記。

prometheus/prometheus.yaml
# 前略
scrape_configs:
+  - job_name: mysqld
+    metrics_path: /mysqld_exporter/metrics
+    static_configs:
+      - targets:
+        - your-mysql-exporter-hostname:9104
+        labels:
+          env: development

設定を反映

$ sudo docker-compose restart prometheus

ルールを追加

/etc/prometheus/alert.rules
groups:
  - name: sample001
    rules:
      # MySQL用のルールを追記
      - alert: mysql_down
        # MySQLが起動しているかのPromQL。
        expr: mysql_up == 0
        # 5分間応答がなければアラートを飛ばす
        for: 5m
        labels:
          severity: critical
        # エラー文言
        annotations:
          firing_text: "[{{ $labels.env }}] {{ $labels.instance }} MySQL has been down for more than 5 minutes."
          resolved_text: "[{{ $labels.env }}] {{ $labels.instance }} MySQL has recoverd."

UI確認

http://your_prometeus.com:9090/graph

mysql_upで検索すると、正常時は 1 となっている。監視対象のMySQLをダウンさせると、 0 として検出される。

関連記事