1、這里可以采用zabbix自帶的mysql模版,但是也需要在mysql服務器上准備獲取mysql status的腳本chk_mysql.sh,zabbix通過調用這個腳本來獲取mysql的運行信息。
在配置文件agent 上的 zabbix_agentd.d下面里面添加mysql監控信息:
cat /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
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=/etc/zabbix/ mysqladmin ping | grep -c alive
UserParameter=mysql.version,mysql -V
UserParameter=mysql.status[*],/data/service/script/zabbix/check_mysql.sh $1
2、添加監控mysql用戶密碼
grant usage on *.* to 'read'@'10.5.58.231' identified by '123456';
3、創建check 腳本如下:
cat /data/service/script/zabbix/check_mysql.sh
#!/bin/bash
#Filename:chk_mysql.sh
#Author:zhangjunchao
MYSQL_SOCK="/var/lib/mysql/mysql.sock"
MYSQL_USER='read'
MYSQL_PASSWORD='123456'
MYSQL_HOST='10.5.58.248'
MYSQL_PORT='3306'
MYSQL_Connect="/usr/bin/mysqladmin -u$MYSQL_USER -p$MYSQL_PASSWORD -h$MYSQL_HOST -P$MYSQL_PORT -S$MYSQL_SOCK"
if [ $# -ne 1 ];then
echo "please input one arguement"
fi
case $1 in
Uptime) #查詢當前MySQL本次啟動后的運行統計時間
result=`${MYSQL_Connect} status 2>/dev/null | cut -d ":" -f 2 | cut -d " " -f 2`
echo $result
;;
Slow_queries) #查看當前慢查詢語句的個數
result=`${MYSQL_Connect} extended-status 2>/dev/null | grep -w "Slow_queries" | cut -d "|" -f 3`
echo $result
;;
Com_rollback) #執行回滾的個數
result=`${MYSQL_Connect} extended-status 2>/dev/null | grep -w "Com_rollback" | cut -d "|" -f 3`
echo $result
;;
Questions)
result=`${MYSQL_Connect} extended-status 2>/dev/null | grep -w "Questions" | cut -d "|" -f 3`
echo $result
;;
Com_commit)
result=`${MYSQL_Connect} extended-status 2>/dev/null | grep -w "Com_commit" | cut -d "|" -f 3`
echo $result
;;
Bytes_sent) #發送的字節數
result=`${MYSQL_Connect} extended-status 2>/dev/null | grep -w "Bytes_sent" | cut -d "|" -f 3`
echo $result
;;
Bytes_received) #接受的字節數
result=`${MYSQL_Connect} extended-status 2>/dev/null | grep -w "Bytes_received" | cut -d "|" -f 3`
echo $result
;;
Com_begin)
result=`${MYSQL_Connect} extended-status 2>/dev/null | grep -w "Com_begin" | cut -d "|" -f 3`
echo $result
;;
Open_tables) #查看當前打開的表數量
result=`${MYSQL_Connect} status 2>/dev/null | cut -d ":" -f 5 | cut -d " " -f 2`
echo $result
;;
Threads_connected) #查看當前打開的連接數量
result=`${MYSQL_Connect} extended-status 2>/dev/null | grep -w "Threads_connected" | cut -d "|" -f 3`
echo $result
;;
Threads_cached) #查看線程緩存內的線程數量
result=`${MYSQL_Connect} extended-status 2>/dev/null | grep -w "Threads_cached" | cut -d "|" -f 3`
echo $result
;;
Threads_created) #查看創建用來處理連接的線程數。如果Threads_created較大,可能要增加thread_cache_size值。
result=`${MYSQL_Connect} extended-status 2>/dev/null | grep -w "Threads_created" | cut -d "|" -f 3`
echo $result
;;
Threads_running) #查看激活的(非睡眠狀態)線程數
result=`${MYSQL_Connect} extended-status 2>/dev/null | grep -w "Threads_running" | cut -d "|" -f 3`
echo $result
;;
Slow_launch_threads) #查看創建時間超過slow_launch_time秒的線程數
result=`${MYSQL_Connect} extended-status 2>/dev/null | grep -w "Slow_launch_threads" | cut -d "|" -f 3`
echo $result
;;
Com_select) #查看select語句的執行數
result=`${MYSQL_Connect} extended-status 2>/dev/null | grep -w "Com_select" |cut -d "|" -f 3`
echo $result
;;
Com_insert) #查看insert語句的執行數
result=`${MYSQL_Connect} extended-status 2>/dev/null | grep -w "Com_insert" |cut -d "|" -f 3`
echo $result
;;
Com_update) #查看update語句的執行數
result=`${MYSQL_Connect} extended-status 2>/dev/null | grep -w "Com_update" | cut -d "|" -f 3`
echo $result
;;
Com_delete) #查看delete語句的執行數
result=`${MYSQL_Connect} extended-status 2>/dev/null | grep -w "Com_delete" | cut -d "|" -f 3`
echo $result
;;
Connections) #查看試圖連接到MySQL(不管是否連接成功)的連接數
result=`${MYSQL_Connect} extended-status 2>/dev/null | grep -w "Connections" | cut -d "|" -f 3`
echo $result
;;
Table_locks_immediate) #查看立即獲得的表的鎖的次數
result=`${MYSQL_Connect} extended-status 2>/dev/null | grep -w "Table_locks_immediate" | cut -d "|" -f 3`
echo $result
;;
Table_locks_waited) #查看不能立即獲得的表的鎖的次數。如果該值較高,並且有性能問題,你應首先優化查詢,然后拆分表或使用復制
result=`${MYSQL_Connect} extended-status 2>/dev/null | grep -w "Table_locks_waited" | cut -d "|" -f 3`
echo $result
;;
*)
echo "Usage:$0(Uptime|Com_update|Slow_queries|Com_select|Com_rollback|Questions|Com_insert|Com_delete|Com_commit|Bytes_sent|Bytes_received|Com_begin)"
;;
esac
4、添加權限
chmod 755 /data/service/script/zabbix/check_mysql.sh
5、agent端:
mysqladmin -uread -p'123456' -h10.5.58.227 ping
mysqld is alive
如果MySQL狀態正常,會顯示mysqld is alive,否則會提示連接不上。
對於服務器端,mysqld is alive這樣的句子不好理解,服務器端最好只接收1和0,1表示服務可用,0表示服務不可用。那么再改進一下這個命令,如下
mysqladmin -uread -p'123456' -h10.5.58.227 ping|grep -c alive
用戶名和密碼放在命令中對於以后的維護不好,所以我們在/etc/zabbix/下創建一個包含MySQL用戶名和密碼的配置文件“.my.cnf”,如下:(我這里沒有這么做)
[client] user=read host=10.5.58.227 password=123456
# HOME=/etc/zabbix/ mysqladmin ping | grep -c alive
6、修改
在/etc/zabbix/zabbix_agentd.d/目錄下創建userparameter_mysql.conf文件。在文件中添加如下命令:
# cat userparameter_mysql.conf
UserParameter=mysql.ping,HOME=/etc/zabbix/ mysqladmin ping | grep -c alive
這個命令中”UserParameter”表示這是一個用戶自定義的腳本;“=”號后是腳本的內容;“mysql.ping”是Key,“,”號后的命令會在Zabbix Server向Agent發起獲取“mysql.ping”這個key的請求時被調用,並將返回值返回給Server。
保存並退出后可以使用下面的命令測試是否正常工作。
客戶端:
zabbix_agentd -t mysql.ping -c /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
mysql.ping [t|1]
zabbix_agentd -t mysql.status[Uptime] -c /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
mysql.status[Uptime] [t|773069]
服務端:
zabbix_agentd -t mysql.ping -c /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
mysql.ping [t|1]
zabbix_get -s10.5.58.227 -p 10050 -k mysql.ping
1
如果報錯,提示無法通過localhost 連接,則執行如下語句。
ln -s /data/service/mysql/3306/tmpdir/mysql.sock /var/lib/mysql/mysql.sock
7、測試check_mysql
zabbix_get -s10.5.58.227 -p 10050 -k "mysql.status[Com_update]"
14480
表示成功。
8、添加監控視圖
監控腳本運行正常后,就會在zabbix-server的host下面的graph里面看到mysql的監控性能視圖.可以看到性能監控視圖,zabbix自帶模版默認有2個性能圖,這些圖要等運行一段時間后才能畫出來:
9、添加Myql_Status