データベース管理システムの MySQL が正常に起動していることを監視するためのテンプレートを作成します。LAMP環境で構築されているWEBサイトの MySQLデータベースには、一般的にユーザ情報やブログ記事などが保存されていますので、MySQL が起動していないとWEBサイトを表示することができません。MySQL の死活監視は3306番ポートにTCP接続ができることにより確認します。また、MySQL への同時接続数(スレッド数)と、データベースからの読み出しに時間がかかったスロークエリ数の監視設定も行います。
MySQL のスレッド数やスロークエリ数は mysqladmin コマンドで確認できます。Zabbixからの監視もこの mysqladmin コマンドの出力結果をユーザーパラメータという仕組みを使って取得します。
$ mysqladmin status -u root -p Enter password: Uptime: 4480003 Threads: 19 Questions: 492747 Slow queries: 0 Opens: 817 Flush tables: 1 Open tables: 137 Queries per second avg: 0.109
上の出力ではスレッド数(Threads)は19、スロークエリ数(Slow queries)は0となっていますね。
テンプレートの作成
[設定]→[テンプレート]→[テンプレートの作成]をクリックします。
[テンプレート]タブを選択 下記を入力し「追加」をクリックすればテンプレートが作成されます。
テンプレート名:A_Template_App_MySQL グループ:A_Templates グループを作成する
アプリケーションの作成
[設定]→[テンプレート] 「A_Template_App_MySQL」行の「アプリケーション」をクリックします。
名前に「mysql」を入力し「追加」をクリックすればアプリケーションが作成されます。
ポート監視アイテムの作成
[設定]→[テンプレート] 「A_Template_App_MySQL」行の「アイテム」をクリックします。
下記を設定し「追加」をクリックすればアイテムが作成されます。
---(設定箇所)---------------------------
名前:2020_mysql ポート監視
タイプ:シンプルチェック
キー:net.tcp.service[tcp,,3306]
更新間隔(秒):60
値のマッピングの使用:Service state(0 ⇒ Down, 1 ⇒ Up と表示されます)
アプリケーション:mysql
------------------------------
アイテムキー net.tcp.service のパラメータ
net.tcp.service[service,<ip>,<port>]
service - ssh、 ntp、ldap、smtp、ftp、http、pop、nntp、imap、tcp、https、telnetの何れか1つ
ip - Zabbixのホストの定義のIPアドレス
port - ポート番号(デフォルトでは標準のサービスポート番号が使用されます)
詳細は公式マニュアル 5 シンプルチェック | Zabbix Documentaion 2.2 をご参照ください。
MySQLのスレッド数とスロークエリ数の監視アイテムの作成
MySQLの状態を監視するアイテムキーはありませんので、監視される側のサーバのZabbixエージェントの設定ファイルにユーザーパラメータとして登録します。
ユーザーパラメータは Linuxコマンドなどの出力結果を、オリジナルのアイテムキーとして定義できるとても便利なしくみです。登録するコマンドは自分で作ったシェルスクリプトなどでも構いませんので、ほぼどんな項目でもアイテムキーとして定義することができます。
MySQL スロークエリログの有効化
MySQLの設定ファイル [mysqld] セクションに下記を追加します。スロークエリログファイルの場所はご自分の環境にあわせて指定してください。
sudo vi /etc/my.cnf
[mysqld] ---(下記を追加)--------------------------- # スロークエリログの有効化 slow_query_log=1 # 何秒以上かかったクエリをスロークエリログへ記録するかを指定 long_query_time=1.0 # スロークエリログファイルの指定 slow_query_log_file=/var/log/mysql/slow_query.log
・設定が終わったらMySQLを再起動します。
sudo service mysqld restart
MySQL 監視用ユーザの作成
MySQLの監視用ユーザを作成します。ここで作成したユーザとパスワードを使って、ユーザーパラメータ内で mysqladmin コマンドを実行します。
$ mysql -uroot -p grant process on *.* to zabbixagent@localhost identified by '<パスワード>';
作成したユーザで mysqladmin コマンドを実行できるかを確認します。
$ mysqladmin status -u zabbixagent -p Enter password:<パスワード> Uptime: 312 Threads: 1 Questions: 8 Slow queries: 0 Opens: 33 Flush tables: 1 Open tables: 26 Queries per second avg: 0.025
ユーザーパラメータの登録
Zabbixエージェントの設定ファイルにMySQLの状態を監視するユーザーパラメータ(UserParameter)を追加します。
sudo vi /etc/zabbix/zabbix_agentd.conf
---(下記を変更)--------------------------- Include=/etc/zabbix/zabbix_agentd.d/ ↓ # Include=/etc/zabbix/zabbix_agentd.d/ ---(下記を最終行に追加)--------------------------- # MySQL:アクティブスレッド (クライアント) の数 UserParameter=mysql.threads,HOME=/var/lib/zabbix /usr/bin/mysqladmin -u zabbixagent status|cut -f3 -d":"|cut -f1 -d"Q" # MySQL:スロークエリの累積数(long_query_time 秒よりも時間を要したクエリー) UserParameter=mysql.slowqueries,HOME=/var/lib/zabbix /usr/bin/mysqladmin -u zabbixagent status|cut -f5 -d":"|cut -f1 -d"O"
・zabbixユーザーのホームディレクトリ作成
mkdir /var/lib/zabbix
chmod 700 /var/lib/zabbix
chown zabbix:zabbix /var/lib/zabbix
・MySQLの監視用ユーザのパスワードファイルを作成
vi /var/lib/zabbix/.my.cnf
---(下記を追加)--------------------------- [mysqladmin] user=zabbixagent password="<パスワード>"
※ <パスワード> はクオートしておくことを、オススメします。
・パーミッションの設定(パスワードを書いてあるためzabbixユーザー以外は読み書き禁止にする)
chown zabbix:zabbix /var/lib/zabbix/.my.cnf
chmod 600 /var/lib/zabbix/.my.cnf
・Zabbixエージェントを再起動します。
sudo service zabbix-agent restart
動作確認
Zabbixサーバ上で zabbix_get コマンドを実行して動作確認をします。ユーザーパラメータで指定したコマンドと同じ出力結果が返ってくればOKです。
$ zabbix_get -s 172.16.1.20 -p 10050 -k mysql.threads 1 $ zabbix_get -s 172.16.1.20 -p 10050 -k mysql.slowqueries 0
ユーザーパラメータの書式
ユーザーパラメータの書式は「UserParameter=<アイテムキー名>,<実行するコマンド>」になります。実行するコマンドはフルパスで指定するのがよいでしょう。
例えば今回設定したMySQLアクティブスレッドのユーザーパラメータは、Zabbixサーバで「mysql.threads」アイテムキーを実行すると、監視対象サーバ上で「mysqladmin -u zabbixagent status|cut -f3 -d":"|cut -f1 -d"Q"」コマンドが実行され出力結果をZabbixサーバに返します。
詳細は公式マニュアル 4 ユーザーパラメータ | Zabbix Documentation 2.2 をご参照ください。
アイテムの作成
[設定]→[テンプレート] 「A_Template_App_MySQL」行の「アイテム」をクリックします。
下記を設定し「追加」をクリックすればMySQLスレッド数のアイテムが作成されます。
---(設定箇所)---------------------------
名前:3010_mysqld スレッド数
キー:mysql.threads
更新間隔(秒):60
アプリケーション:mysql
------------------------------
同様にMySQスロークエリ数のアイテムを作成します。スロークエリ数はMySQLを起動してからの累積数になりますので、保存時の計算を「差分」にしておきます。
---(設定箇所)---------------------------
名前:3012_mysqld スロークエリ数
キー:mysql.slowqueries
更新間隔(秒):60
保存時の計算:差分
アプリケーション:mysql
------------------------------
トリガーの作成
MySQLが起動していない場合は通知するようにトリガーを設定します。
[設定]→[テンプレート] 「A_Template_App_MySQL」行の「トリガー」をクリックします。
下記を設定し「追加」をクリックすればトリガーが作成されます。
---(設定箇所)---------------------------
名前:{HOST.NAME} mysql
条件式:{A_Template_App_MySQL:net.tcp.service[tcp,,3306].last()}=0
深刻度:致命的な障害
------------------------------
条件式末尾の「0」は MySQL が起動していないことを示します。
トリガーの名前にはマクロが使用できます。上の設定 {HOST.NAME} はホストの表示名がトリガー名に表示されます。
条件式は、{<テンプレート名>:<アイテムキー>.<トリガー関数>}=<値> の形式です。手入力してもかまいませんが、なかなか複雑な書式ですので、条件式の「追加」ボタンをクリックして対象のアイテムの選択と関数を選択、Nにしきい値を入力して「挿入」ボタンをクリックすれば条件式を生成してくれます。
▽ サポートされているトリガー関数 | Zabbix Documentaion 2.2
https://www.zabbix.com/documentation/2.2/jp/manual/appendix/triggers/functions
グラフの作成
[設定]→[テンプレート] 「A_Template_App_MySQL」行の「グラフ」をクリックします。
「グラフ」タブを選択し、アイテムの「追加」をクリックします。
グラフに表示したいアイテムを選択し「選択」をクリックします。
下記を設定してアイテムが追加されていることを確認し「追加」をクリックすれば mysqld スレッド数のグラフが作成されます。
---(設定箇所)---------------------------
名前:mysqld スレッド数
アイテム:A_Template_App_MySQL: 3010_mysqld スレッド数
------------------------------
同様に MySQスロークエリ数のグラフも作成します。
---(設定箇所)---------------------------
名前:mysqld スロークエリ数
アイテム:A_Template_App_MySQL: 3012_mysqld スロークエリ数
------------------------------
スクリーンの作成
作成したグラフをスクリーンに登録します。
[設定]→[テンプレート] 「A_Template_App_MySQL」行の「スクリーン」をクリックします。
---(設定箇所)---------------------------
名前:mysql
列:2
行:1
----------------------------
スクリーンセルの設定が開きますので、グラフ名の「選択」をクリックします。
グラフ名が「A_Template_App_MySQL: mysqld スレッド数」になっていることを確認して「追加」をクリックすれば登録終了です。他の値は特に変更する必要はありませんがお好みで調整してください。
同様に下記の mysqld スロークエリ数のグラフも登録します。
最後に作成した監視テンプレートの動作確認をして作業完了です。
コメント
いつもブログを参考にさせて頂いています。
スレッド数とスロークエリ数の監視 の zabbix_agentd.conf の設定部分ですが、
UserParameter=mysql.threads,HOME=/var/lib/zabbix /usr/bin/mysqladmin -u root status|cut -f3 -d”:”|cut -f1 -d”Q”
UserParameter=mysql.slowqueries,HOME=/var/lib/zabbix /usr/bin/mysqladmin -u root status|cut -f5 -d”:”|cut -f1 -d”O”
共に、 -u zabbixagent の間違いではないでしょうか?
>heatkittanさん
コメントありがとうございます!
ご指摘の通り「-u root」ではなく「 -u zabbixagent」の間違えです、、
記事の方を修正いたしました。