こんにちは。よっしーです(^^)
今日は、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にタグ付けしています。
また明日お会いしましょう!
コメント