はじめに
Percona社が開発したモニタリングツールPercona Monitoring and Management (以下 PMM)では多くのメトリクスが収集されグラフに表示されています。さらに、PMMでは任意のコマンドの実行結果を収集することも可能です。
本記事では任意のOSコマンドの実行結果を収集してグラフに表示する方法を紹介します。
前提
本記事では、PMM2.9.0を使用します。PMM1とPMM2ではディレクトリのパスなどが変更されているので注意してください。
また、PMM ServerとPMM Clientはインストール済みで、PMM ClientがPMM Serverに接続済みであることを前提としています。
インストール方法などは以前こちらの記事でも紹介しているのでそちらをご覧ください。
手順
PMM Clientはnode_exporterがOSのメトリクスを収集しています。
デフォルトで収集されているメトリクス以外にもtextfile collectorを使用することで、node_exporterは任意のコマンドの実行結果を収集してくれます。
このtextfile collector機能はPMM1.16.0以降のバージョンで有効になっています。
textfile collectorはファイルに書かれた<メトリクス名> <値>
のセットを読み取ります。
・メトリクス名は自由に設定できます。prometheusのドキュメントに命名規則のガイドがあるので参考にしてください。
・値の部分は数値でなくてはいけません。
デフォルトのディレクトリは/usr/local/percona/pmm2/collectors/textfile-collector/です。
textfile collectorはこのサブディレクトリから拡張子が.promのファイルを読み取ります。
サブディレクトリは3つあります。
1 2 |
# ls /usr/local/percona/pmm2/collectors/textfile-collector high-resolution low-resolution medium-resolution |
high,low,mediumはそれぞれ収集間隔を意味します。デフォルトでlow:60秒, medium:10秒, high:5秒です。
詳しくはこちらのマニュアルをご確認ください。
試しに<メトリクス名> <値>
を1セットファイルに書き込んでみます。今回はmedium-resolutionにtest.promファイルを作成します。
1 2 |
# vi /usr/local/percona/pmm2/collectors/textfile-collector/medium-resolution/test.prom os_metric_test 2000 |
os_metric_testがメトリクス名、2000が値となります。
この値が収集されていることをPMM Webinterfaceから確認します。左側のサイドメニューのExploreを選び、上部のMetricsボックスにメトリクス名”os_metric_test”を入力します。
右上にある青色のRun Query
ボタンを押すとos_metric_testのグラフが表示されます。値も2000になっていることがわかります。
これだけではモニタリングにはならないので、次にこのtest.promファイルにcronを使用して定期的にコマンド結果が書き込まれるようにします。
例としてuptimeの実行結果から接続しているユーザー数を表示してみます。
1 2 |
# uptime 19:29:53 up 9:25, 3 users, load average: 0.57, 0.40, 0.33 |
このコマンドの結果から接続ユーザー数だけを取り出し、メトリクス名とともに1分間隔でtest.promファイルに書き込むようにします。
1 2 |
# crontab -e */1 * * * * echo `uptime | cut -f 7 -d ' '` | sed -ne 's/^/node_uptime_connect_user /p' > /usr/local/percona/pmm2/collectors/textfile-collector/medium-resolution/test.prom |
test.promファイルを確認すると以下のように<メトリクス名> <値>
の形式で記録されています。
1 2 |
# cat /usr/local/percona/pmm2/collectors/textfile-collector/medium-resolution/test.prom node_uptime_connect_user 3 |
PMMで確認すると、node_uptime_connect_userのグラフが表示されます。
試しに接続数を増やしてから再度Run Query
を実行すると、値が更新されていることが確認できます。
最後に数値以外のデータを収集する方法を紹介します。prometheusは数値しか収集できません。そのためコマンドの返り値が文字列の場合は数字に変換してtest.promファイルに書き込みます。
例として。systemctl is-active mysqld
の結果をactiveの場合は1、それ以外は0をtest.promに出力するスクリプトを作成し、1分間隔で実行します。
1 2 3 4 5 6 7 8 9 10 11 |
# vi active-check.sh #!/bin/bash if [ `systemctl is-active mysqld` = active ]; then echo node_active_mysqld 1 > /usr/local/percona/pmm2/collectors/textfile-collector/medium-resolution/test.prom else echo node_active_mysqld 0 > /usr/local/percona/pmm2/collectors/textfile-collector/medium-resolution/test.prom fi # chmod 744 active-check.sh # crontab -e */1 * * * * /root/casetest.sh |
これで文字列のデータも収集することができます。このように数値に変換してメトリクスを収集する場合は、PMMでグラフを作成する際に数値と対応する文字列を設定することができます。
グラフを新しく作る場合は左側のサイドメニューのプラスマークを選択し、Add Queryを選択します。
次にMetricsの項目に今回収集しているメトリクスの名前node_active_mysqld
を入力します
次にVisualizationをSinglestatにします。すると折れ線グラフから文字表示のグラフに変更されます。
最後にVisualizationの設定ページの下の方にあるValue MappingsのSet value mappingsで数値と文字列の対応を設定します。数値の代わりに文字を表示することができました。
まとめ
追加のインストールや複雑な設定の変更などはせずに追加のメトリクスの収集ができました。それぞれの環境に合わせてPMMをカスタマイズすることができ便利な機能だと思います。
MySQLに任意のクエリを実行して、その結果をメトリクスとして収集するCustom Queriesという機能もあるので、次はこの機能についても紹介してみたいと思います。