#MySQL監視テンプレートの設定方法
公式テンプレートの中に、MySQL監視用のテンプレートが入っています。稼動状態を監視するために必要なデータを取得できるのですが、監視ホストにテンプレートを適用しただけではデータを取得できません。
今回は、MySQL監視テンプレートの設定方法を紹介します。
#Zabbixサーバ側の設定
Zabbixをインストールすると Template DB MySQL テンプレートが最初から入っています。
しかしZabbixサーバのMySQLの状態を確認するために、MySQLテンプレートを指定しても、以下のようにエラーになってしまいます。
MySQLのアイテムは、Zabbixエージェントで取得しますが、実際の処理はUser parameterに記載されています。
アイテムの説明欄に、User parameterに関する記載があります。本来は、テンプレート自体の説明欄に設定方法を記述しておくべきだと思うのですが、V2.x以前はテンプレートに説明欄がなく、アイテムやトリガーにしかなかったので、このような説明しかないのかもしれません。
Zabbix監視用アカウントの作成
MySQLをZabbixで監視する為に、MySQLにZabbix用アカウントを作成します。アカウント名は何でもよいですが、分かり易いように「zabbix」というアカウントを作成します。
$ mysql -u root -p
mysql> grant process on *.* to 'zabbix'@'localhost' identified by 'keichan0322';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> select host,user from mysql.user where user='zabbix';
+-----------+--------+
| host | user |
+-----------+--------+
| localhost | zabbix |
+-----------+--------+
1 row in set (0.00 sec)
mysql> exit
次に、作成したアカウントを、Zabbixエージェントが利用できるように「–defaults-extra-file」で指定するファイルに記載します。このファイルは新規作成で良く、ファイル名は任意で良いみたいですが、MySQLの設定ファイルだと分かり易いように以下では「my.cnf」という名称にしておきます。
$ sudo mkdir /etc/zabbix/mysql
$ sudo vi /etc/zabbix/mysql/my.cnf
パスワードの確認
[root@monitor ~]# grep ^DBPassword /etc/zabbix/zabbix_server.conf
DBPassword=keichan0322
my.cnf の内容は以下になります。
[client]
user = zabbix
password = keichan0322
–defaults-extra-file が使える状態である事を確認する為、mysqladmin コマンドで利用してみます。以下、1回目は個別でパスワードを打ち込むパターン、2回目は–defaults-extra-fileを指定するパターンです。
$ mysqladmin -u root -p ping
Enter password:
mysqld is alive
$ mysqladmin --defaults-extra-file=/etc/zabbix/mysql/my.cnf ping
mysqld is alive
問題なく–defaults-extra-file が使える状態である事が確認できました。(パスワードを打ち込まなくてもコマンド実行結果を得る事ができました。)
##userparameter_mysql.conf の設定
引き続き、Zabbixエージェント側の設定となります。
Zabbixエージェントのインストール時にデフォルト配置されている「/etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf」に一部設定を追加修正します。
以下の2行が修正対象です。
UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/var/lib/zabbix mysql-N | awk '{print $$2}'
UserParameter=mysql.ping,HOME=/var/lib/zabbix mysqladmin ping | grep -c alive
この2行に「–defaults-extra-file=/etc/zabbix/mysql/my.cnf」をそれぞれ追記します。
UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/var/lib/zabbix mysql --defaults-extra-file=/etc/zabbix/mysql/my.cnf -N | awk '{print $$2}
UserParameter=mysql.ping,HOME=/var/lib/zabbix mysqladmin --defaults-extra-file=/etc/zabbix/mysql/my.cnf ping | grep -c alive
keyが mysql.status[*]とmysql.pingはアカウント情報が必要なので、–defaults-extra-fileを設定しています。
keyが mysql.version はアカウント情報は不要なので、–defaults-extra-file は設定していません。
設定後は、Zabbixエージェントを再起動してください
$ systemctl restart zabbix-agent
$ systemctl status zabbix-agent
zabbix-agent.service - Zabbix Agent
Loaded: loaded (/usr/lib/systemd/system/zabbix-agent.service; enabled; vendor preset: disabled)
Active: active (running) since 月 2020-06-08 14:19:20 JST; 1h 17min ago
Process: 11997 ExecStop=/bin/kill -SIGTERM $MAINPID (code=exited, status=0/SUCCESS)
Process: 11999 ExecStart=/usr/sbin/zabbix_agentd -c $CONFFILE (code=exited, status=0/SUCCESS)
Main PID: 12001 (zabbix_agentd)
CGroup: /system.slice/zabbix-agent.service
tq12001 /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf
tq12002 /usr/sbin/zabbix_agentd: collector [idle 1 sec]
tq12003 /usr/sbin/zabbix_agentd: listener #1 [waiting for connection]
tq12004 /usr/sbin/zabbix_agentd: listener #2 [waiting for connection]
tq12005 /usr/sbin/zabbix_agentd: listener #3 [waiting for connection]
mq12006 /usr/sbin/zabbix_agentd: active checks #1 [idle 1 sec]
##Zabbixエージェント側での設定作業は以上です。
zabbix_get コマンドを実行
[root@monitor ~]# zabbix_get -s 127.0.0.1 -k mysql.ping
1
[root@monitor ~]# zabbix_get -s 127.0.0.1 -k mysql.status[Uptime]
6495
[root@monitor ~]# zabbix_get -s 127.0.0.1 -k mysql.status[Questions]
115657
無事、値が取れているようです。
最後に、Zabbixサーバ側(WebUI)で「Template App MySQL」を監視対象ノードに適用します。そうすると、MySQLの値が取得できるようになります。
なお、値取得の状況は、ZabbixのWeb画面「監視データ」-「最新データ」画面で確認できます。