Prometheus Exporter設定例 (MySQL編)

スポンサーリンク

PrometheusはExporterと呼ばれるメトリック情報を公開するコンポーネントから情報を収集します。Exporterは前述の説明で紹介した「Node Exporter」以外にも様々なメトリックを公開するものがあります。もし、監視したいソフトウェアのExporterが存在しないならば、容易に自作する事もできます。ここでは、既存のExporterの使用感を掴むために、OfficialなExporterであるmysqld_exporterの使い方を説明します。

前提

参照資料

動作確認済環境

  • Rocky Linux 8.6
  • Prometheus 2.36.2
  • mysqld 8.0.26
  • mysqld_exporte 0.14.0

構成図

2台の仮想マシンに対して、以下のコンポーネントをインストールします。prometheusのインストール方法は説明を省略します。

+----------------+ +-----------------+ 
| linux010       | | linux020        | 
| 172.16.1.10/24 | | 172.16.1.20/24  | 
|                | |                 | 
| prometheus     | | mysqld_exporter | 
|                | | mysqld          | 
+----------------+ +-----------------+ 

mysqld(MySQL Server)のインストール

インストールとユーザ作成

linux020へMySQLをインストールします。

dnf install mysql-server

mysqldを起動します。

systemctl enable mysqld.service --now

prometheusが使用するMySQLユーザを定義します。GitHubのREADME.mdに記された最小限の権限設定は以下の通りです。「172.16.1.%」や「password」の部分は環境に応じて適宜の変更をお願いします。

mysql -uroot << EOF
CREATE USER 'exporter'@'localhost' IDENTIFIED BY 'password' WITH MAX_USER_CONNECTIONS 3;
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost';
EOF

疎通確認

前述の操作で作成したユーザで接続可能である事を確認します。

[root@linux020 ~]# mysql -uexporter -ppassword --host=localhost
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.26 Source distribution

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> exit
Bye
[root@linux020 ~]# 

mysqld_exporterのインストール

インストールと起動

mysqld_exporterのインストール方法はいくつかあります。このページでは「公式サイト」や「GitHub」で紹介されていないパッケージを用いた手法を紹介します。

Prometheusのリポジトリを登録します。

cat << 'EOF' > /etc/yum.repos.d/prometheus.repo
[prometheus]
name=prometheus
baseurl=https://packagecloud.io/prometheus-rpm/release/el/$releasever/$basearch
repo_gpgcheck=1
enabled=1
gpgkey=https://packagecloud.io/prometheus-rpm/release/gpgkey
       https://raw.githubusercontent.com/lest/prometheus-rpm/master/RPM-GPG-KEY-prometheus-rpm
gpgcheck=1
metadata_expire=300
EOF

mysqld_exporterをインストールします。

dnf install mysqld_exporter

パッケージ版の場合は、systemdのお作法に基づいて起動引数が設定されています。/usr/lib/systemd/system/mysqld_exporter.serviceを確認すると、環境変数は/etc/default/mysqld_exporterに定義できる事が分かります。

また、起動引数は環境変数MYSQLD_EXPORTER_OPTSで指定できる事も頭の片隅に置いてください。後続の操作で環境変数を変更します。

[root@linux020 ~]# cat /usr/lib/systemd/system/mysqld_exporter.service 
# -*- mode: conf -*-

[Unit]
Description=Prometheus exporter for MySQL server metrics.
Documentation=https://github.com/prometheus/mysqld_exporter
After=network.target

[Service]
EnvironmentFile=-/etc/default/mysqld_exporter
User=prometheus
ExecStart=/usr/bin/mysqld_exporter $MYSQLD_EXPORTER_OPTS
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=5s


[Install]
WantedBy=multi-user.target
[root@linux020 ~]# 

環境変数を指定するファイル/etc/default/mysqld_exporterにMySQLへの接続情報を定義します。設定例は以下の通りです。

cat << 'EOF' > /etc/default/mysqld_exporter
MYSQLD_EXPORTER_OPTS=""
DATA_SOURCE_NAME='exporter:password@(localhost:3306)/'
EOF

mysqld_exporterを起動します。

systemctl enable mysqld_exporter.service --now

「http://localhost:9104/metrics」にてmysqld_exporterからmysqldへ接続可能である事を確認します。接続可能な場合は「mysql_up 1」になります。

[root@linux020 ~]# curl -s http://localhost:9104/metrics | grep mysql_up
# HELP mysql_up Whether the MySQL server is up.
# TYPE mysql_up gauge
mysql_up 1
[root@linux020 ~]#

起動引数の変更

GitHubのREADME.mdのCollector Flagsの説明を見ると、取得対象メトリックの取捨選択ができる事が分かります。

prometheus exporter flags

mysqld_exporter 0.10.0より大きいバージョンの場合、以下のような引数を与えると取得対象を増やす事ができます。

--collect.auto_increment.columns
--collect.binlog_size

逆に取得対象を減らし軽量化を図りたい場合は、以下のようにnoを付与した引数を否定します。

--no-collect.auto_increment.columns
--no-collect.binlog_size

例えば、mysqld_exporter 0.14.0の場合は、以下grep出力が示す通りデフォルト設定ではbinlog_sizeの取得は無効化されています。

[root@linux020 ~]# curl -s http://localhost:9104/metrics | grep mysql_binlog_size_bytes
[root@linux020 ~]# 

起動引数に以下を追加し、binlog_sizeを取得できるようにします。

cat << EOF > /etc/default/mysqld_exporter 
MYSQLD_EXPORTER_OPTS="--collect.binlog_size"
DATA_SOURCE_NAME='exporter:password@(localhost:3306)/'
EOF

systemctl restart mysqld_exporter.service

確かに、binlog_sizeを取得できる事を確認します。

[root@linux020 ~]# curl -s http://localhost:9104/metrics | grep mysql_binlog_size_bytes
# HELP mysql_binlog_size_bytes Combined size of all registered binlog files.
# TYPE mysql_binlog_size_bytes gauge
mysql_binlog_size_bytes 729
[root@linux020 ~]# 

Prometheusの設定例

/etc/prometheus/prometheus.ymlの設定例は以下の通りです。

cat << EOF > /etc/prometheus/prometheus.yml
scrape_configs:
  - job_name: mysqld
    static_configs:
      - targets:
        - 172.16.1.20:9104
EOF

systemctl restart prometheus.service 

設定後、MySQLの情報が取得できる事を確認します。

prometheusによる確認結果

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