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
[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
#!/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から起動するためのスクリプトです。
UserParameter=mysql.monitor_status,/etc/zabbix/send_mysql_stat_to_zabbix.sh
zabbixの管理画面に適宜アイテムを追加します。
zabbix-agent再起動
/etc/init.d/zabbix-agent restart