MySQLのプロセスとかポートとかはZabbix-Agentで監視できるが、mysqlのステータスはどうやって監視するんですか、というお話。
mysqlに接続できれば、mysqladmin extended-status だったり show global status なんかのコマンドでステータスを確認できますよね。
それをZabbixから監視する方法を説明します。
環境
- CentOS7.5
- MariaDB5.5
- Zabbix-Server 3.4
MySQL 監視用ユーザの作成
まず、mysqlにrootログインします。
1 |
# mysql -uroot -p |
次に、パスワードを指定してユーザを作成します。
1 2 |
MariaDB [(none)]> grant process on *.* to zabbixagent@localhost identified by 'password'; Query OK, 0 rows affected (0.35 sec) |
作成したユーザでmysqlコマンドを実行できることを確認します。
1 2 3 |
# mysqladmin status -u zabbixagent -p Enter password: Uptime: 332994 Threads: 14 Questions: 8447907 Slow queries: 291 Opens: 97 Flush tables: 2 Open tables: 123 Queries per second avg: 25.369 |
パスワードファイルの作成
作成したMySQLユーザのパスワードファイルを作成します。
Zabbix-Agentのディレクトリに設置しましたが、どこに設置しても良いです。というのは、mysqlに接続時に「--defaults-extra-file」オプションで今回作成するパスワードファイルのパスを指定するから。
パスワードはダブルコーテーションでくくったほうが良いようです。
1 2 3 |
[client] user=zabbixagent password="password" |
パーミッションを設定します。
1 2 |
# chown zabbix:zabbix /etc/zabbix/zabbix_agentd.d/zabbix_my.cnf # chmod 600 /etc/zabbix/zabbix_agentd.d/zabbix_my.cnf |
動作確認
userparameter_mysql.conf に記載されているアイテムの値を取得できるか確認することにします(がコマンドは変更します)
show global statusコマンド(Variable_nameは適宜変更して)
1 2 |
# echo "show global status where Variable_name='Slow_queries';" | mysql --defaults-extra-file=/etc/zabbix/zabbix_agentd.d/zabbix_my.cnf -N| awk '{print $2}' 291 |
「show global status」は、mysqlにログインして実行すると以下のようなステータスを確認できる
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# mysql -uzabbixagent -p Enter password: MariaDB [(none)]> show global status; +------------------------------------------+-------------+ | Variable_name | Value | +------------------------------------------+-------------+ | Aborted_clients | 23 | | Aborted_connects | 721 | | Access_denied_errors | 721 | | Aria_pagecache_blocks_not_flushed | 0 | | Aria_pagecache_blocks_unused | 15737 | | Aria_pagecache_blocks_used | 1 | | Aria_pagecache_read_requests | 96 | | Aria_pagecache_reads | 0 | | Aria_pagecache_write_requests | 54 | | Aria_pagecache_writes | 0 | | Aria_transaction_log_syncs | 0 | (以下略 |
mysql.ping の確認
1 2 |
# mysqladmin --defaults-extra-file=/etc/zabbix/zabbix_agentd.d/zabbix_my.cnf ping| grep -c alive 1 |
MySQLバージョンの確認
1 2 |
# mysql -V mysql Ver 15.1 Distrib 5.5.56-MariaDB, for Linux (x86_64) using readline 5.1 |
ユーザパラメータファイルの修正
動作の確認ができたところで、Zabbix-Agentが使用する userparameter_mysql.conf を以下のように修正します。
1 2 3 4 5 6 7 8 9 10 |
### デフォルト UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/var/lib/zabbix mysql -N | awk '{print $$2}' UserParameter=mysql.size[*],bash -c 'echo "select sum($(case "$3" in both|"") echo "data_length+index_length";; data|index) echo "$3_length";; free) echo "data_free";; esac)) from information_schema.tables$([[ "$1" = "all" || ! "$1" ]] || echo " where table_schema=\"$1\"")$([[ "$2" = "all" || ! "$2" ]] || echo "and table_name=\"$2\"");" | HOME=/var/lib/zabbix mysql -N' UserParameter=mysql.ping,HOME=/var/lib/zabbix mysqladmin ping | grep -c alive UserParameter=mysql.version,mysql -V ### 修正後 UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | mysql --defaults-extra-file=/etc/zabbix/zabbix_agentd.d/zabbix_my.cnf -N | awk '{print $$2}' UserParameter=mysql.ping,mysqladmin --defaults-extra-file=/etc/zabbix/zabbix_agentd.d/zabbix_my.cnf ping 2>&1 | grep -c alive UserParameter=mysql.version,mysql -V |
変数は使えないらしいので認証ファイル(zabbix_my.cnf)はそのまま指定
awkで$をかぶせるのは仕様
pingのエラー出力を捨てるのに注意(2>&1を追加)
Zabbix-Agentを再起動して設定を反映します。
1 |
# systemctl restart zabbix-agent |
zabbix_getコマンドで動作を確認します。キー(-kオプション)の引数には、userparameter_mysql.conf に記載されているアイテムを指定します。
1 2 3 4 5 6 7 8 9 10 11 |
# zabbix_get -s 192.168.10.200 -k mysql.ping 1 # zabbix_get -s 192.168.10.200 -k mysql.version mysql Ver 15.1 Distrib 5.5.56-MariaDB, for Linux (x86_64) using readline 5.1 # zabbix_get -s 192.168.10.200 -k mysql.status[Com_begin] 1072666 # zabbix_get -s 192.168.10.200 -k mysql.status[Slow_queries] 291 |
Web画面からの設定を追加します。あらかじめMySQLのテンプレートが用意されているので、それを適用すればよいでしょう。トリガーは mysql.ping しかなかったので、必要に応じて作成しましょう。
おまけ
mysqlpingの不具合の対応の詳細
正常時は1を返すので問題ないが、mysql がダウンしているときはエラー出力が返る(以下)ので、ユーザパラメーターのファイルに記載するコマンドは修正が必要になる。
1 2 3 4 5 |
# mysqladmin --defaults-extra-file=/etc/zabbix/zabbix_agentd.d/zabbix_my.cnf ping | grep -c alive mysqladmin: connect to server at 'localhost' failed error: 'Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)' Check that mysqld is running and that the socket: '/var/lib/mysql/mysql.sock' exists! 0 |
以下のように 2>&1 を加えてやればよいだけだが、対応しておかないとmysqlのダウンを検知できない。検知できないというのは、正確にいうとトリガーは作動しませんでした。アイテムのデータ型が整数になっているので、整数以外が返ってきた時点で unknownのようなステータスになってしまうようです。
1 2 |
# mysqladmin --defaults-extra-file=/etc/zabbix/zabbix_agentd.d/zabbix_my.cnf ping 2>&1 | grep -c alive 0 |
Zabbix-Agent再起動時のエラー
userparameter_mysql.conf を修正後に設定を反映しようとZabbix-Agentを再起動しようとしたら以下のエラーで起動しない。。。
1 |
9月 03 19:03:11 CentOS75 zabbix_agentd[7965]: zabbix_agentd [7965]: invalid entry "[client]" (not following "parameter=value" notation) in config file "/etc/zabbix/zabbix_agentd.d/zabbix_my.cnf", line 1 |
なぜか mysql のユーザ情報を記載したファイル(zabbix_my.cnf)を読みこんでしまっていた。zabbix-agent.conf のInclude設定をみると、ディレクトリ配下のファイルをすべて読み込むようになっていたので、*.conf のみを対象となるように変更して対処した。
1 2 3 |
Include=/etc/zabbix/zabbix_agentd.d/ ↓変更 Include=/etc/zabbix/zabbix_agentd.d/*.conf |
ちなみにZabbix-Agentバージョンは以下。
1 2 |
# rpm -qa|grep zabbix zabbix-agent-3.0.13-2.el7.x86_64 |
この場合は、Mysql認証情報のファイルの置き場によってはZabbixが読み込んでエラーが出る場合があります。
Zabbix-Agent3.4では、*.conf まで記述されていたので、修正されたのでしょうね。
以上です。
↓↓↓ 持っていると便利な一冊。