本篇文章給大家介紹一下使用zabbix監控mysql的解決方法。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有所幫助。
相關推薦:《mysql教程》
zabbix 監控 mysql
1、監控規劃
在創建監控項之前要盡量考慮清楚要監控什么,怎么監控,監控數據如何存儲,監控數據如何展現,如何處理報警等。要進行監控的系統規劃需要對Zabbix很了解,這里只是提出監控的需求。
需求一:監控MySQL的狀態,當狀態發生異常,發出報警;
需求二:監控MySQL的操作,并用圖表展現;
2、自定義腳本監控擴展Agent
Zabbix Server與Agent之間監控數據的采集主要是通過Zabbix Server主動向Agent詢問某個Key的值,Agent會根據Key去調用相應的函數去獲取這個值并返回給Server端。Zabbix 2.4.7的Agent本并沒有內置MySQL的監控功能(但是Server端提供了相應的Template配置),所以我們需要使用Zabbix的User Parameters功能,為MySQL添加監控腳本。
3、授權mysql登錄用戶(agent端)
mysql>?grant?usage?on?*.*?to?zabbix@127.0.0.1?identified?by?'123456'; mysql>?flush?privileges;
4、agent端配置
存活檢測
利用UserParameter參數自定義Agent Key。
對于需求一 ,我們采用mysqladmin這個工具來實現,命令如下:
#?mysqladmin?-h?127.0.0.1?-u?zabbix?-p123456?ping? mysqld?is?alive
如果MySQL狀態正常,會顯示mysqld is alive,否則會提示連接不上。對于服務器端,mysqld is alive這樣的句子不好理解,服務器端最好只接收1和0,1表示服務可用,0表示服務不可用。那么再改進一下這個命令,如下:
#?mysqladmin?-h?127.0.0.1?-u?zabbix?-p123456?ping?|grep?-c?alive 1
用戶名和密碼放在命令中對于以后的維護不好,所以我們在/var/lib/zabbix/下創建一個包含MySQL用戶名和密碼的配置文件“.my.cnf”,如下:
user=zabbix host=127.0.0.1 password='123456'
有了這個文件后的命令變更為
HOME=/var/lib/zabbix/?mysqladmin?ping?|grep?-c?alive 1
做完這一步后需要做的就是,將這個監控命令添加到Zabbix Agent中,并與一個Key對應,這樣Zabbox Server就能通過這個Key獲取MySQL的狀態了。我們使用mysql.ping作為MySQL狀態的Key。
首先在去除/etc/zabbix/zabbix_agentd.conf中
“include=/etc/zabbix_agentd.d/” 這一行的注釋符。
其次,在/etc/zabbix/zabbix_agentd.d/目錄下創建userparameter_mysql.conf文件。在文件中添加如下命令:
UserParameter=mysql.ping,HOME=/var/lib/zabbix?mysqladmin?ping?|?grep?-c?alive
使用下面的命令測試是否正常工作。
#?/usr/sbin/zabbix_agentd?-t?mysql.ping mysql.ping????????????????????????????????????[t|1]
其他性能指標
1.添加userparameter_mysql
vim?/etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf ####監控mysql性能的腳本 UserParameter=mysql.status[*],/etc/zabbix/zabbix_agentd.d/check_mysql.sh?$1 #####mysql版本 UserParameter=mysql.version,mysql?-V
2.check_mysql.sh
#!/bin/bash #?------------------------------------------------------------------------------- #?FileName:?check_mysql.sh #?Revision:?1.0 #?------------------------------------------------------------------------------- #?Copyright: #?License:?GPL #?用戶名 MYSQL_USER='zabbix' #?密碼 MYSQL_PWD='zabbix@123' #?主機地址/IP MYSQL_HOST='ip' #?端口 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?2>/dev/null?|cut?-f2?-d":"|cut?-f1?-d"T"` echo?$result ;; Com_update) result=`${MYSQL_CONN}?extended-status???2>/dev/null??|grep?-w?"Com_update"|cut?-d"|"?-f3` echo?$result ;; Slow_queries) result=`${MYSQL_CONN}?status??2>/dev/null??|cut?-f5?-d":"|cut?-f1?-d"O"` echo?$result ;; Com_select) result=`${MYSQL_CONN}?extended-status??2>/dev/null??|grep?-w?"Com_select"|cut?-d"|"?-f3` echo?$result ;; Com_rollback) result=`${MYSQL_CONN}?extended-status??2>/dev/null???|grep?-w?"Com_rollback"|cut?-d"|"?-f3` echo?$result ;; Questions) result=`${MYSQL_CONN}?status???2>/dev/null?|cut?-f4?-d":"|cut?-f1?-d"S"` echo?$result ;; Com_insert) result=`${MYSQL_CONN}?extended-status???2>/dev/null??|grep?-w?"Com_insert"|cut?-d"|"?-f3` echo?$result ;; Com_delete) result=`${MYSQL_CONN}?extended-status???2>/dev/null??|grep?-w?"Com_delete"|cut?-d"|"?-f3` echo?$result ;; Com_commit) result=`${MYSQL_CONN}?extended-status???2>/dev/null??|grep?-w?"Com_commit"|cut?-d"|"?-f3` echo?$result ;; Bytes_sent) result=`${MYSQL_CONN}?extended-status??2>/dev/null??|grep?-w?"Bytes_sent"?|cut?-d"|"?-f3` echo?$result ;; Bytes_received) result=`${MYSQL_CONN}?extended-status??2>/dev/null??|grep?-w?"Bytes_received"?|cut?-d"|"?-f3` echo?$result ;; Com_begin) result=`${MYSQL_CONN}?extended-status??2>/dev/null??|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
3.授權:
chmod?+x??/etc/zabbix/zabbix_agentd.d/check_mysql.sh Chown?zabbix.zabbix??/etc/zabbix/zabbix_agentd.d/check_mysql.sh
4. zabbix_agent上測試:
zabbix_agentd -t mysql.ping
5.Zabbix_server測試
zabbix_get -s ip -P 端口 -k mysql.ping
5、在web端進行配置
**創建主機 **
關聯模板
創建監控項
創建圖形
查看監控圖像
其他監控項以此配置完成
6、zabbix自帶mysql監控項
version:數據庫版本 key_buffer_size:myisam的索引buffer大小 sort_buffer_size:會話的排序空間(每個線程會申請一個) join_buffer_size:這是為鏈接操作分配的最小緩存大小,這些連接使用普通索引掃描、范圍掃描、或者連接不適用索引 max_connections:最大允許同時連接的數量 max_connect_errors:允許一個主機最多的錯誤鏈接次數,如果超過了就會拒絕之后鏈接(默認100)。可以使用flush?hosts命令去解除拒絕 open_files_limits:操作系統允許mysql打開的文件數量,可以通過opened_tables狀態確定是否需要增大table_open_cache,如果opened_tables比較大且一直還在增大說明需要增大table_open_cache max-heap_tables_size:建立的內存表的最大大小(默認16M)這個參數和tmp_table_size一起限制內部臨時表的最大值(取這兩個參數的小的一個),如果超過限制,則表會變為innodb或myisam引擎,(5.7.5之前是默認是myisam,5.7.6開始是innodb,可以通過internal_tmp_disk_storage_engine參數調整)。 max_allowed_packet:一個包的最大大小 ##########GET?INNODB?INFO #INNODB?variables innodb_version: innodb_buffer_pool_instances:將innodb緩沖池分為指定的多個(默認為1) innodb_buffer_pool_size:innodb緩沖池大小、5.7.5引入了innodb_buffer_pool_chunk_size, innodb_doublewrite:是否開啟doublewrite(默認開啟) innodb_read_io_threads:IO讀線程的數量 innodb_write_io_threads:IO寫線程的數量 ########innodb?status innodb_buffer_pool_pages_total:innodb緩沖池頁的數量、大小等于innodb_buffer_pool_size/(16*1024) innodb_buffer_pool_pages_data:innodb緩沖池中包含數據的頁的數量 ##########?GET?MYSQL?HITRATE 1、查詢緩存命中率 如果Qcache_hits+Com_select0則為?Qcache_hits/(Qcache_hits+Com_select),否則為0 2、線程緩存命中率 如果Connections0,則為1-Threads_created/Connections,否則為0 3、myisam鍵緩存命中率 如果Key_read_requests0,則為1-Key_reads/Key_read_requests,否則為0 4、myisam鍵緩存寫命中率 如果Key_write_requests0,則為1-Key_writes/Key_write_requests,否則為0 5、鍵塊使用率 如果Key_blocks_used+Key_blocks_unused0,則Key_blocks_used/(Key_blocks_used+Key_blocks_unused),否則為0 6、創建磁盤存儲的臨時表比率 如果Created_tmp_disk_tables+Created_tmp_tables0,則Created_tmp_disk_tables/(Created_tmp_disk_tables+Created_tmp_tables),否則為0 7、連接使用率 如果max_connections0,則threads_connected/max_connections,否則為0 8、打開文件比率 如果open_files_limit0,則open_files/open_files_limit,否則為0 9、表緩存使用率 如果table_open_cache0,則open_tables/table_open_cache,否則為0