一、zabbix自帶MySql模板監控項
Zabbix3.0之后已經有MySql監控模板了,所以我們只要引用ZabbixServer自帶的模板即可。zabbix默認有14個監控項
我們只需獲取監控項需要的值就ok,而這些值大部分可以通過mysqladmin命令獲取
二、編寫腳本獲取mysql性能指標數據
vim chk_mysql.sh

vim chk_mysql.sh # 用戶名 #MYSQL_USER='zabbix' # 密碼 #MYSQL_PWD='zabbix' #在腳本中輸入密碼mysql會提示安全告警信息#Warning: Using a password on the command line interface can be #insecure,需要將帳號密碼等配置添加到mysql配置文件my.cnf中即可,腳本中#不用輸入賬號密碼 # 主機地址/IP MYSQL_HOST='127.0.0.1' # 端口 MYSQL_PORT='3306' # 數據連接 MYSQL_CONN="/usr/bin/mysqladmin -u${MYSQL_USER} -p${MYSQL_PWD} -h${MYSQL_HOST} -P${MYSQL_PORT}" # 參數是否正確 if [ $# -ne "1" ];then echo "arg error!" fi # 獲取數據 case $1 in Uptime) result=`${MYSQL_CONN} status|cut -f2 -d":"|cut -f1 -d"T"` echo $result ;; Com_update) result=`${MYSQL_CONN} extended-status |grep -w "Com_update"|cut -d"|" -f3` echo $result ;; Slow_queries) result=`${MYSQL_CONN} status |cut -f5 -d":"|cut -f1 -d"O"` echo $result ;; Com_select) result=`${MYSQL_CONN} extended-status |grep -w "Com_select"|cut -d"|" -f3` echo $result ;; Com_rollback) result=`${MYSQL_CONN} extended-status |grep -w "Com_rollback"|cut -d"|" -f3` echo $result ;; Questions) result=`${MYSQL_CONN} status|cut -f4 -d":"|cut -f1 -d"S"` echo $result ;; Com_insert) result=`${MYSQL_CONN} extended-status |grep -w "Com_insert"|cut -d"|" -f3` echo $result ;; Com_delete) result=`${MYSQL_CONN} extended-status |grep -w "Com_delete"|cut -d"|" -f3` echo $result ;; Com_commit) result=`${MYSQL_CONN} extended-status |grep -w "Com_commit"|cut -d"|" -f3` echo $result ;; Bytes_sent) result=`${MYSQL_CONN} extended-status |grep -w "Bytes_sent" |cut -d"|" -f3` echo $result ;; Bytes_received) result=`${MYSQL_CONN} extended-status |grep -w "Bytes_received" |cut -d"|" -f3` echo $result ;; Com_begin) result=`${MYSQL_CONN} extended-status |grep -w "Com_begin"|cut -d"|" -f3` 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

以下幾個參數對Myisam 和Innodb 存儲引擎都計數: 1. Com_select 執行select 操作的次數,一次查詢只累加1; 2. Com_insert 執行insert 操作的次數,對於批量插入的insert 操作,只累加一次; 3. Com_update 執行update 操作的次數; 4. Com_delete 執行delete 操作的次數; 以下幾個參數是針對Innodb 存儲引擎計數的: 1. Innodb_rows_read select 查詢返回的行數; 2. Innodb_rows_inserted 執行Insert 操作插入的行數; 3. Innodb_rows_updated 執行update 操作更新的行數; 4. Innodb_rows_deleted 執行delete 操作刪除的行數; 通過以上幾個參數,可以很容易的了解當前數據庫的應用是以插入更新為主還是以查詢操作為主,以及各種類型的SQL 大致的執行比例是多少。對於更新操作的計數,是對執行次數的計數,不論提交還是回滾都會累加。對於事務型的應用,通過Com_commit 和Com_rollback 可以了解事務提交和回滾的情況,對於回滾操作非常頻繁的數據庫,可能應用編寫存在問題。 另外還有幾個參數可以了解數據庫的基本信息: 1. Connections 試圖連接Mysql 服務器的次數 2. Uptime 服務器工作時間 3. Slow_queries 慢查詢的次數
*:在腳本中輸入密碼mysql會提示安全告警信息使zabbix獲取不到正確數據,(Warning: Using a password on the command line interface can be insecure),需要將帳號密碼等配置添加到mysql配置文件my.cnf中即可,腳本中不用輸入賬號密碼
重啟mysql后若配置生效,則運行mysqladmin將不再需要輸入用戶名和密碼,如:
三、為zabbix_agentd添加用戶參數
#vim /usr/local/etc/zabbix_agentd.conf
UnsafeUserParameters=1 UserParameter=mysql.version,mysql -V UserParameter=mysql.status[*],/opt/scripts/chk_mysql.sh $1 #UserParameter=mysql.ping,mysqladmin -P3306 -h127.0.0.1 ping | grep -c alive UserParameter=mysql.ping,sudo netstat -ntpl |grep 3306|grep mysql|wc |awk '{print $1}'
修改/etc/sudoers( chmod +s /bin/netstat也可以,省去了修改/etc/sudoers的麻煩)
#注釋掉此行 Defaults requiretty #在最后加入如下行: zabbix ALL=(ALL) NOPASSWD: /bin/netstat #“NOPASSWD”表示zabbix用戶在執行命令時,無需輸入密碼; # “/bin/netstat”,是zabbix用戶可以root身份執行的命令,如果有多個,請用逗號分隔,這樣的好處是做到權限的精細控制
mysqladmin的缺陷:
當mysql down了的時候,zabbix監控不到。因為默認的MySQL is down 的觸發器的觸發條件是mysql.ping.last(0),mysql.ping的實現方式是UserParameter=mysql.ping,mysqladmin -uzabbix -pys_ipowerlong0418-P3306 -h127.0.0.1 ping | grep -c alive,當mysql服務停止了后,mysqladmin執行報錯是一推錯誤信息返回不了數字0,所以zabbix觸發不了,所以zabbix界面會看到problems但是不會觸發報警動作的,也就意味着你不會第一時間接到email、短信、電話報警了。
所以必須改正不能用mysqladmin這種方式,想到了用telnet mysql端口的方式來判斷,如下所示:UserParameter=mysql.ping,netstat -ntpl |grep 3317 |grep mysql |wc|awk '{print $1}'
3317就是mysql運行的端口號,這樣當mysqlis alive那么返回為1,當mysql is down返回為0,就滿足了zabbix的mysql.ping.last(0)=0的觸發條件了。
*如果不嫌麻煩,也可以將用戶參數寫入單獨的一個文件,再在zabbix_agentd.conf配置文件中include該文件所在目錄。
重啟zabbix_agentd
killall zabbix_agentd /usr/local/sbin/zabbix_agentd -c /usr/local/etc/zabbix_agentd.conf
在server端測試是否能獲取到數據
四、鏈接mysql模板
鏈接完成后在最新數據中可以查看到mysql監控項