Database JUNKY

MySQL,MariaDBを中心としたブログです

mysql_health_check でlong_queryをnagiosで監視する

月に一度はかならずはまるnagios サービスが長期化すると、この観点でも監視を入れないとだめだっていうのがどんどん増えてきて対応はするのですが、また数日後、どう設定したんだっけ?というのを忘れてしまうのが難点なので、あくまでも自己流ですが、メモとして残しておこうと思います。

f:id:hit10231023:20180309111041p:plain

MySQLnagios監視について

nagiosでのMySQL監視にて標準でインストールされるものとして、メジャーなのが、

check_mysql
check_mysql_query

なのですが、この2つのクエリには、ロングクエリー(スローログではありません)および、ロッククエリを検出したいと思った時、独自のスクリプトを書くかでないと簡単には実現できません

チェックすることに時間をかけたくないので、私は、誰かが作った、mysql¥health¥checkを使おうと思います。

なので、標準のcheck¥_mysqlシリーズの話はここでは触れません

ご了承ください

perlのインストール

mysql_health_checkは、perlを必須としておりますので、インストールされていない方は、まず、perlの設定を行ってから・・・になりかす。perlに関しては、よくわからないので、とりあえず全部いちゃいました。(いや、私はプログラム全般的にわからないのですが)

なお、今回検証した、監視クラインとは、amazon linux での環境なので、他の環境をご利用の方は。適宜変更をお願いします。

# yum install --skip-broken perl*
# yum install perl-DBD-MySQL

mysql_health_checkのダウンロード

https://exchange.nagios.org/directory/Plugins/Databases/MySQL/mysql_health_check/details

より、

mysql_health_check-1.1.2.tar.gz

をダウンロード

nagios監視下のサーバに設定

# cd /tmp
# tar zxvf mysql_health_check-1.1.2.tar.gz

解凍したディレクトリを、pluginディレクトリに移動する

# mv -f mysql_health_check /usr/lib64/nagios/plugins/

環境設定をする

perlのお作法的なものがわからなかったため、以下のように修正しました。

# cd /usr/lib64/nagios/plugins/mysql_health_check
# vi mysql_health_check.pl
-----
#!/usr/bin/perl -w
# !/usr/bin/env perl -w

動作確認

たぶん、これで動いた!!

# ./mysql_health_check.pl
Usage: mysql_health_check.pl [-v|-verbose] [-H|--hostname <host>] [-P|--port <port>] [-u|--user <user>] [-p|--password <passwd>] [-d|--database <database>] [-w|--warning <threshold>] [-c|--critical <threshold>] [--shortname <shortname>] [-m|--mode <varcomp|locked-query|long-query>] [--cache_dir <directory>] [--no_cache] [--max_cache_age <seconds>] [--comparison <math expression>] [--expression <math expression>]

Missing argument: hostname
Missing argument: user
Missing argument: mode

実際の動作確認

内容につきましては、 /usr/lib64/nagios/plugins/mysql_health_check/templates の中みていただくとわかるかと思うのですが。とりあえず、以下のようなイメージで直接コマンドで動作確認をしました。

  • max_connection

なんとなく勘ですが、コネクションが80%以上になったら、アラートするって意味なんじゃないかと思います

# ./mysql_health_check.pl --hostname localhost --port 3306 --user admin --password adminpassword --mode=varcomp --expression="Max_used_connections/max_connections * 100" --comparison=">80" --shortname=max_connections
---------------------
max_connections OK - Comparison check passed: (Max_used_connections/max_connections * 100) >80 = 1.72
  • long_query

長く実行されているクエリーを検知した場合、アラートを出します。 5秒でワーニング、10秒でクリティカルです

# ./mysql_health_check.pl --hostname localhost --port 3306 --user admin --password adminpassword --mode=long-query --warning=5 --critical=10
--------------------
mysql_long-query OK
  • lock_query

ロックをしているクエリーを検知します。こちらも5秒でワーニング、10秒でクリティカルにしました

# ./mysql_health_check.pl --hostname localhost --port 3306 --user admin --password adminpassword --mode=locked-query --warning=5 --critical=10
--------------------
mysql_locked-query OK

これらのコマンドは、nagiosサーバであれば、command.cfg に記載するのですが、今回は、nagiosクライアント、nrpeでの設定になりますので /etc/nagis/nrpe.cfg に直接書きます