mysql_health_check でlong_queryをnagiosで監視する
月に一度はかならずはまるnagios サービスが長期化すると、この観点でも監視を入れないとだめだっていうのがどんどん増えてきて対応はするのですが、また数日後、どう設定したんだっけ?というのを忘れてしまうのが難点なので、あくまでも自己流ですが、メモとして残しておこうと思います。
ZTE SIMフリースマートフォン ZTE Blade V580(シルバー) BLADE V580 SILVER
- 出版社/メーカー: ZTE
- メディア: エレクトロニクス
- この商品を含むブログを見る
mineo エントリーパッケージ au/ドコモ対応SIMカード データ通信/音声通話 (ナノ/マイクロ/標準SIM/VoLTE)
- 出版社/メーカー: ケイ・オプティコム
- 発売日: 2015/03/27
- メディア: エレクトロニクス
- この商品を含むブログ (21件) を見る
MOSPRO LED クリップライト タッチパネル 三段階調光 電気スタンド ランプ (ホワイト)
- 出版社/メーカー: LEVIN
- メディア:
- この商品を含むブログを見る
詳解MySQL 5.7 止まらぬ進化に乗り遅れないためのテクニカルガイド
- 作者: 奥野幹也
- 出版社/メーカー: 翔泳社
- 発売日: 2016/09/01
- メディア: Kindle版
- この商品を含むブログ (4件) を見る
PHPによるECサイトプログラミング~ショッピングカートから決済まで―MySQLのデータベース設計とPHPセッション管理の作法
- 作者: 大角清美
- 出版社/メーカー: 羣青出版社
- 発売日: 2015/07/08
- メディア: Kindle版
- この商品を含むブログを見る
MySQLのnagios監視について
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 に直接書きます