Zabbixでmysqlをモニタリングするスクリプト

More than 5 years have passed since last update.

Zabbix study - SSSSLIDE

で紹介されていた手法を使っています。ありがとうございます。

zabbix agentからUserParameterで外部スクリプトを起動し、そこからzabbix_senderで複数の値を登録するという手法です。

まず、mysqlをモニタリングするユーザの作成と権限付与を行います。PROCESS権限が必要です。

5.3.1. Creating a MySQL User Account for the Monitor Agent

grant process on *.* to '${Your_mysql_user_here}'@'${Your_mysql_server_here}' identified by '${Your_mysql_password_here}';

パスワードはファイルに保存しておいて、mysqlの--defaults-extra-fileオプションで指定します。

MySQL :: MySQL 5.5 Reference Manual :: 4.2.3.3 Using Option Files


/etc/zabbix/.my.cnf

[client]

password=${Your_mysql_password_here}

/etc/zabbix/.my.cnfはzabbixユーザのみ読めるようにしておきます。

sudo chown zabbix:zabbix /etc/zabbix/.my.cnf

sudo chmod 400 /etc/zabbix/.my.cnf

zabbix agentから起動するスクリプトです。以下の2つのSQLを1回のmysqlコマンド起動で実行して、awkで加工して必要な値を出力します。

show global status;

show engine innodb status\G


/etc/zabbix/send_mysql_stat_to_zabbix.sh

#!/bin/sh

dbuser=${Your_mysql_user_here}
dbhost=${Your_mysql_server_here}
mycnf_path=/etc/zabbix/.my.cnf
zabbix_server=${Your_zabbix_server_or_proxy_here}
my_zabbix_hostname=`hostname`

echo_sql() {
cat <<'EOF'
show global status;
show engine innodb status\G
EOF
}

echo_sql | mysql --defaults-extra-file=$mycnf_path -u $dbuser -h $dbhost | awk '
$1=="Bytes_received" { print "Bytes_received", $2 }
$1=="Bytes_sent" { print "Bytes_sent", $2 }
$1=="Com_insert" { print "Com_insert", $2 }
$1=="Com_select" { print "Com_select", $2 }
$1=="Com_update" { print "Com_update", $2 }
$1=="Com_delete" { print "Com_delete", $2 }
$1=="Threads_connected" { print "Threads_connected", $2 }
$1=="Threads_running" { print "Threads_running", $2 }
/^Buffer pool hit rate [0-9]+ \/ [0-9]+/ {
print "Buffer_pool_hit_rate", $5 / $7
}
/^[0-9.]+ inserts\/s, [0-9.]+ updates\/s, [0-9.]+ deletes\/s, [0-9.]+ reads\/s/ {
print "insertsPerSec", $1
print "updatesPerSec", $3
print "deletesPerSec", $5
print "readsPerSec", $7
}
'
| sed 's/^/'$my_zabbix_hostname' mysql./' | \
zabbix_sender -z $zabbix_server -s $my_zabbix_hostname -i - > /dev/null
echo $?


スクリプトの出力はコマンドの終了コードを出すようにしています。

zabbix-agentから起動するためのスクリプトです。


/etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf

UserParameter=mysql.monitor_status,/etc/zabbix/send_mysql_stat_to_zabbix.sh


zabbixの管理画面に適宜アイテムを追加します。

zabbix-agent再起動

/etc/init.d/zabbix-agent restart