Dockerで作る開発環境:MySQL Exporterを使用してMySQLのメトリクスを可視化する方法

スポンサーリンク
Dockerで作る開発環境:MySQL Exporterを使用してMySQLのメトリクスを可視化する方法 ノウハウ
Dockerで作る開発環境:MySQL Exporterを使用してMySQLのメトリクスを可視化する方法
この記事は約7分で読めます。
よっしー
よっしー

こんにちは。よっしーです(^^)

今日は、dockerで構築した開発環境において、MySQLのメトリクス情報をGrafanaで可視化する手順をご紹介します。

スポンサーリンク

実行環境

この記事では、下記の記事で構築している開発環境を前提にしていますので、環境構築をされていない方は、記事を参考に環境構築をお願いします。

MySQL用のExporterを追加

PrometheusでMySQLのメトリクス情報を取得するために、mysqld_exporterを追加します。

ディレクトリ構造

ディレクトリ構造は下記のようになっています。赤字の箇所が新規&更新になります。

.
├── LICENSE
├── Makefile
├── README.md
└── app
    ├── .env (更新)
    ├── docker-compose.yml (更新)
    ├── flyway
    ├── grafana
    ├── mysql
    │   ├── init_scripts (新規)
    │   │   └── V0.0.1__grant_exporter.sql (新規)
    ├── mysqld-exporter (新規)
    │   └── Dockerfile (新規)
    ├── prometheus
    │   └── prometheus.yml(更新)
    ├── schemaspy
    └── web

docker-compose.yml

下記の赤字部分をファイル(docker-compose.yml) 36行目に追記します。

  volumes:
    - ./mysql/my.cnf:/etc/mysql/conf.d/my.cnf
    - ./mysql/init_scripts:/docker-entrypoint-initdb.d

下記の内容をファイル(docker-compose.yml) 136-149行目に追記します。

  mysqld-exporter:
    build: ./mysqld-exporter
    container_name: mysqld-exporter
    command:
      - --collect.info_schema.tablestats
    environment:
            DATA_SOURCE_NAME: ${MYSQL_EXPORTER_USER}:${MYSQL_EXPORTER_PASSWORD}@${MYSQL_EXPORTER_TARGET}
    ports:
      - 9104:9104
    networks:
      - net
    depends_on:
      mysql:
        condition: service_healthy

.env

下記の赤字部分をファイル(.env) 4-6行目に追記します。

MYSQL_DATABASE=sample
MYSQL_ROOT_PASSWORD=P@ssw0rd
TZ=Asia/Tokyo
MYSQL_EXPORTER_USER=exporter
MYSQL_EXPORTER_PASSWORD=P@ssw0rd
MYSQL_EXPORTER_TARGET=(mysql:3306)/performance_schema

mysql/init_scripts/V0.0.1__grant_exporter.sql

下記の内容で新規ファイル(mysql/init_scripts/V0.0.1__grant_exporter.sql)を作成します。

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

mysqld-exporter/Dockerfile

下記の内容で新規ファイル(mysqld-exporter/Dockerfile)を作成します。

FROM prom/mysqld-exporter

prometheus/prometheus.yml

下記の内容でファイル(prometheus/prometheus.yml)を更新します。

global:
  scrape_interval: 15s
scrape_configs:
  - job_name: 'docker-for-mac'
    static_configs:
      - targets: ['docker.for.mac.host.internal:9323']
  - job_name: 'web'
    static_configs:
      - targets: ['web:9117']
  - job_name: 'mysql'
    static_configs:
      - targets: ['mysqld-exporter:9104']

動作確認

下記のコマンドを実行して、サービスを起動します。

make setup

サービスが起動後、ブラウザで「http://localhost:9090/targets」にアクセスして、StateがUPになっていることを確認します。

ブラウザで「http://localhost:3000/」にアクセスして、Grafanaにログインし、Prometheusのデータソースを追加後、「7362」のダッシュボードをインポートします。

インポートして、下図のダッシュボードが表示されていれば、成功です。

Grafanaでのデータソースの追加とダッシュボードのインポート方法については、下記の記事を参考にしてみてください。

解説

mysqld_exporter とは

mysqld exporterは、MySQLデータベースのメトリクスをPrometheusにエクスポートするためのツールです。Prometheusは、クラウドや物理的なサーバーでのメトリクスの収集、監視、アラート設定に使われるオープンソースのモニタリングツールです。

mysqld exporterを使用することで、MySQLデータベースのパフォーマンスに関する情報をPrometheusにエクスポートし、継続的に監視できます。例えば、クエリの実行時間、データベースサイズ、インデックスの使用状況、クエリの実行回数、接続数などのメトリクスを収集できます。

mysqld exporterは、コマンドラインツールとして提供されており、Prometheusからアクセスできるようにするために、httpポートで待ち受けます。具体的な設定方法については、公式ドキュメントを参照してください。

なお、mysqld exporterは、MySQLバージョン5.6以上で動作します。MySQL以外にも、Percona ServerやMariaDBなどのMySQL互換データベースでも使用することができます。

おわりに

今日は、dockerで構築した開発環境にPrometheusとGrafanaを使用して、MySQLのメトリクス情報を可視化する方法をご紹介しました。メトリクスを確認して、安定運用に役立てましょう。

今回使用したファイルは下記のGitHubにタグ付けしています。

よっしー
よっしー

また明日お会いしましょう!

コメント

タイトルとURLをコピーしました