ZabbixのデフォルトMySQL監視UserParameterは修正が必要

以下はZabbix 3.0.xでの話です。

Zabbix AgentをZabbix SIAのyum Repositoryから導入すると、
/etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf 内にデフォルトでMySQL監視用ユーザーパラメータが定義されますが、その中のZabbix Pingに関しては修正が必要です。以下がデフォルトの定義です。

UserParameter=mysql.ping,HOME=/var/lib/zabbix mysqladmin ping | grep -c alive

これをそのままコンソール上で実行すると、MySQL(MariaDB)が起動している状態で実行すると1を返しますが、停止時には0だけでなく標準エラー出力への文字出力が含まれ、データ型が数値ではなくなってしまいます。

$ HOME=/var/lib/zabbix mysqladmin 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

数値として受け取れなくなったアイテムは「不明」の状態となり、トリガーが検知しない状態となります。また、これはトリガーのnodata関数が有った場合でも検知されません。

UserParameter=mysql.ping,HOME=/var/lib/zabbix mysqladmin ping 2>/dev/null | grep -c alive

でエラー出力を捨ててみたり

UserParameter=mysql.ping,HOME=/var/lib/zabbix mysqladmin ping 2>&1 | grep -c alive

でエラー出力も標準出力に吐いてgrepに渡す事でMySQLのダウンを検知する事が出来ます。