はじめに
Percona Monitoring and Management (PMM)とは、Percona社が開発したモニタリングツールです。
その最新リリースであるPMM2のGA(2.0.1)が2019年の10月9日にリリースされました。
この記事では最新バージョンの2.2.2をインストールしてみます。
PMMとは
PMMはMySQLやPostgreSQL,MongoDBなどを監視できるモニタリングツールです。
データベースホストにインストールされたPMM Clientがデータベースやホストのデータを収集します。
PMM ServerはPMM Clientが集めたデータを集約し、グラフで表示します。
PMM2では画面UIが使いやすくなるように変更されたほか、クエリ分析(QAN)にMySQLとMongoDBに加えPostgreSQLがサポートされるようになりました。
また、インストール手順も含め、コマンドなどにも変更があったため本記事でPMM2のインストール手順を紹介します。
環境
ホスト名 | IPアドレス | 用途 |
---|---|---|
pmm-1 | 192.168.2.5 | Dockerホスト(PMM Serverをインストール) |
pmm-2 | 192.168.2.4 | MySQLホスト( PMM Clientをインストール) |
- サーバOSは全て CentOS7.6
各ソフトウェアのバージョン
- Docker 19.03.5
- MySQL 8.0.19
- PMM 2.2.2
データを収集するためにPMM Server(pmm-1)とPMM Client(pmm-2)は通信可能とする必要があります。
通信を有効化するには、以下のportを解放します。
- pmm-1はpmm-2に対してport80または443を解放
- pmm-2はpmm-1に対してport42000と42001を解放
PMMの要件について詳しくはPMM ServerとPMM Clientの要件を参照してください。
インストール手順
MySQLのインストール
PMMはMariaDB、Percona Server for MySQL、Amazon RDSを含むMySQLをサポートしています。
詳しい要件はこちらのマニュアルをご確認ください。
本記事ではMySQLの最新バージョンであるMySQL8.0.19をpmm-2にインストールします。
1 2 |
# rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-2.noarch.rpm # yum install -y mysql-community-server |
PMMはクエリのデータをスロークエリログまたはパフォーマンススキーマから収集します。
今回はデフォルトであるスロークエリログからデータを収集するため、スロークエリログに関する設定を行います。
また、検証のため、long_query_timeを0に設定し全てのクエリを取得するようにしました。
0に設定すると負荷が大きくなるため注意してください。
1 2 3 |
# vi /etc/my.cnf slow_query_log=ON long_query_time = 0 |
次に、PMMの接続時にrootユーザーを使用しない場合はマニュアルを参考にPMM用のユーザーを作成します。
PMM1と異なり、自動で接続用ユーザーを作成するオプション(–create-user)は廃止されています。
また、MySQL8.0の場合は、default_authentication_plugin
がデフォルトでcaching_sha2_password
に設定されています。
The MySQL driver used with PMM does not yet support the SHA-256 authentication.
引用元 : Percona
上記の通りPMMではSHA-256 authenticationをサポートしていません。
そのため、接続用ユーザーはmysql_native_password
を使用する必要があります。
1 2 3 |
mysql> CREATE USER 'pmm'@' localhost' IDENTIFIED WITH mysql_native_password BY 'Password1!' WITH MAX_USER_CONNECTIONS 10; mysql> GRANT SELECT, PROCESS, SUPER, REPLICATION CLIENT, RELOAD ON *.* TO 'pmm'@' localhost'; mysql> GRANT SELECT, UPDATE, DELETE, DROP ON performance_schema.* TO 'pmm'@' localhost'; |
PMM Serverのインストール
PMM Serverをpmm-1にインストールします。
PMM Serverをインストールして、セットアップするには以下の方法があります。
・Dockerを介したPMM Serverの実行
・仮想アプライアンスとしてのPMM Server
・AWS Marketplaceを使用したPMM Serverの実行
本記事ではマニュアルをもとにDockerを介した方法でインストールを行います。
なおDockerはインストール済みとします。
PMM Dataのコンテナを作成します。
1 2 3 4 |
# docker create \ -v /srv \ --name pmm-data \ percona/pmm-server:2.2.2 /bin/true |
PMM Serverのコンテナを作成して起動します。
1 2 3 4 5 6 7 |
# docker run -d \ -p 80:80 \ -p 443:443 \ --volumes-from pmm-data \ --name pmm-server \ --restart always \ percona/pmm-server:2.2.2 |
-pオプションはホスト・インターフェース上に指定したポートを公開します。
PMM ServerのDocker imageには自己証明書が含まれているため、443ポートを公開することでSSL/TLS通信が可能となります。
バージョンの指定には以下のDockerのタグが使用可能です。
今回はPMM2.2.2をインストールするため、:2.2.2
を使用します。
:latest
はPMM2ではなくPMM1をインストールしてしまうため、注意して下さい。
タグ | 内容 |
---|---|
:latest | PMM1の最新のリリースを意味します。 |
:2 | PMM2の最新のリリースを意味します。 |
:2.X | パッチリリースを除くPMM2のマイナーリリースを意味します。 |
:2.X.Y | PMM2の特定のパッチリリースを意味します。 |
PMM Clientのインストール
監視対象のMySQL8.0のサーバー(pmm-2)にPMM Clientをこちらのマニュアルをもとにインストールします。
リポジトリのインストール
1 |
# yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm |
pmm2-client のパッケージをインストールします
yum install -y pmm-client
とするとPMM1をインストールしてしまうため、注意してください。
1 |
# yum install -y pmm2-client |
PMM Serverに接続します
pmm-admin configコマンドでPMM ClientとPMM Serverの通信設定をします。
- PMMのイメージに含まれている自己証明書を使用する場合は–server-insecure-tlsコマンドが必要です。
- –server-urlでPMM ServerのIPアドレスを指定します。フォーマットは
https://username:password@<PMM Sever IP アドレス>:443
です。username:passwordは初期設定ではadmin:adminとなっています。変更はモニタリング画面から可能です。
1 2 3 4 5 6 7 8 9 10 |
# pmm-admin config --server-insecure-tls --server-url=https://admin:admin@192.168.2.5:443 Checking local pmm-agent status... pmm-agent is running. Registering pmm-agent on PMM Server... Registered. Configuration file /usr/local/percona/pmm2/config/pmm-agent.yaml updated. Reloading pmm-agent configuration... Configuration reloaded. Checking local pmm-agent status... pmm-agent is running. |
モニタリング対象の追加
pmm-admin add mysql コマンドを使用してモニタリングサービスにMySQLを追加します。MySQLへの接続情報が必要です。
コマンドの最後にサービス名を自由に指定することもできます。サービス名はモニタリング画面の表示名にも使用されます。指定しない場合は<ノード名>-mysqlとなります。
今回は前項で作ったpmmユーザーを使用し、サービス名を「mysql-8.0」と指定して追加します。
1 2 3 4 5 6 |
pmm-admin add mysql --username=pmm --password=Password1! mysql-8.0 MySQL Service added. Service ID : /service_id/add5ab99-143d-4755-84cb-a32adbb41e0c Service name: mysql-8.0 Table statistics collection enabled (the limit is 1000, the actual table count is 310). |
確認
pmm-admin listコマンドを使ってサービスが追加されていることを確認します。
下記のように4つのAgentのStatusがconnectedとrunningになっていたら、データは収集されています。
1 2 3 4 5 6 7 8 9 |
# pmm-admin list Service type Service name Address and port Service ID MySQL mysql-8.0 127.0.0.1:3306 /service_id/add5ab99-143d-4755-84cb-a32adbb41e0c Agent type Status Agent ID Service ID pmm-agent connected /agent_id/ae5b4bb3-e971-402b-a777-289b79f8133c node_exporter running /agent_id/c3cb7545-7b8c-45e2-afc4-a75e5e624f6e mysqld_exporter running /agent_id/fe4647dd-22cc-43e5-9e5b-85f40f80f700 /service_id/add5ab99-143d-4755-84cb-a32adbb41e0c qan-mysql-slowlog-agent running /agent_id/89d24257-51f9-46d0-9f01-43c4dac7522b /service_id/add5ab99-143d-4755-84cb-a32adbb41e0c |
モニターの確認
ブラウザから、IPアドレスでPMM Serverにアクセスします。
例)https://192.168.2.5:443
パソコンやブラウザの設定などによっては自己証明書を使用しているため、アクセスができない場合があります。その場合は、http通信によるアクセスを試してください。
例)http://192.168.2.5:80
アクセスするとまずログイン画面が表示されます。
初期ユーザー名とパスワードはadmin/adminです。
確認できるグラフの種類は様々で、MySQLに関するダッシュボードだけでも約15種類あります。
例えば、MySQL Instance Summaryダッシュボードの左上に配置されたMySQL Connectionsグラフでは、接続ユーザーに関するデータが確認できます。このグラフでは、ステータス変数Threads_connected、Max_used_connectionsとシステム変数max_connectionsの値が時系列で表示されます。
MySQL Replication Summaryダッシュボードではレプリケーションのモニタリングができます。
わざとデータ不整合を起こすとこのようにSQL Thread Runningの値がNoとなりレプリケーションが停止していること一目でわかります。
モニタリング画面の変更点
PMM2はPMM1から画面UIも変更が加えられています。
特に大きな変更点としてクエリ分析(QAN)でフィルタリング機能が追加されました。
これにより対象のデータベースだけではなくスキーマごとやユーザーごとにフィルタリングできるようになり、クエリの分析がしやすくなりました。
グラフの左側にフィルタリングが追加されています。
また、メニューの下にパンくずリストが表示され前回見ていたグラフの履歴が辿れるようになりました。
その他にもダッシュボードのレイアウトが変更されていたり、細かい改修が多くあります。
まとめ
PMMは簡単に構築ができて、様々なデータをグラフで表示することができとても便利です。
今後のアップデートにも注目していきたいと思います。