天天看點

zabbix3.4監控mysql伺服器性能

  1. 背景:由于zabbix3.4裡面的mysql監控模闆沒有監控mysql的key,是以需要自己重新定義需要監控的key。

  2. Zabbix Server與Agent之間監控資料的采集主要是通過Zabbix Server主動向Agent詢問某個Key的值,

  3. Agent會根據Key去調用相應的函數去擷取這個值并傳回給Server端。

  4. 監控需求:

  5. 1、監控MySQL的狀态,當狀态發生異常,發出報警;

  6. 2、監控MySQL的操作,并用圖表展現;

  7. 3、使用自定義腳本監控擴充Agent。

  8. 一、授權mysql登入使用者(agentd端操作)

  1. MariaDB [(none)]> grant usage on *.* to 'read'@'47.98.97.124' identified by '123456';

  2. Query OK, 0 rows affected (0.00 sec)

  3. MariaDB [(none)]> flush privileges;

  4. Query OK, 0 rows affected (0.00 sec)

二、編輯userparameter_mysql.conf檔案
           
  1. [[email protected] ~]# cp /root/zabbix-3.4.2/conf/zabbix_agentd/userparameter_mysql.conf /usr/local/zabbix/etc/zabbix_agentd.conf.d/

  2. [[email protected] ~]# vi /usr/local/zabbix/etc/zabbix_agentd.conf.d/userparameter_mysql.conf

  3. UserParameter=mysql.version,mysql -V

  4. UserParameter=mysql.status[*],/usr/local/zabbix/scripts/chk_mysql.sh $1

  5. [[email protected] ~]# mkdir /usr/local/zabbix/scripts

  6. [[email protected] ~]# chmod +x /usr/local/zabbix/scripts/chk_mysql.sh

  7. [[email protected] ~]# vi /usr/local/zabbix/etc/zabbix_agentd.conf

  8. Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/*.conf #開啟

三、mysql伺服器性能監控腳本
           
  1. #!/bin/bash

  2. #Filename:chk_mysql.sh

  3. #Author:zhangjunchao

  4. MYSQL_SOCK="/var/lib/mysql/mysql.sock"

  5. MYSQL_USER='read'

  6. MYSQL_PASSWORD='123456'

  7. MYSQL_HOST='47.98.97.124'

  8. MYSQL_PORT='3306'

  9. MYSQL_Connect="/usr/bin/mysqladmin -u$MYSQL_USER -p$MYSQL_PASSWORD -h$MYSQL_HOST -P$MYSQL_PORT -S$MYSQL_SOCK"

  10. if [ $# -ne 1 ];then

  11. echo "please input one arguement"

  12. fi

  13. case $1 in

  14. Uptime) #查詢目前MySQL本次啟動後的運作統計時間

  15. result=`${MYSQL_Connect} status | cut -d ":" -f 2 | cut -d " " -f 2`

  16. echo $result

  17. ;;

  18. Slow_queries) #檢視目前慢查詢語句的個數

  19. result=`${MYSQL_Connect} extended-status | grep -w "Slow_queries" | cut -d "|" -f 3`

  20. echo $result

  21. ;;

  22. Com_rollback) #執行復原的個數

  23. result=`${MYSQL_Connect} extended-status | grep -w "Com_rollback" | cut -d "|" -f 3`

  24. echo $result

  25. ;;

  26. Questions)

  27. result=`${MYSQL_Connect} extended-status | grep -w "Questions" | cut -d "|" -f 3`

  28. echo $result

  29. ;;

  30. Com_commit)

  31. result=`${MYSQL_Connect} extended-status | grep -w "Com_commit" | cut -d "|" -f 3`

  32. echo $result

  33. ;;

  34. Bytes_sent) #發送的位元組數

  35. result=`${MYSQL_Connect} extended-status | grep -w "Bytes_sent" | cut -d "|" -f 3`

  36. echo $result

  37. ;;

  38. Bytes_received) #接受的位元組數

  39. result=`${MYSQL_Connect} extended-status | grep -w "Bytes_received" | cut -d "|" -f 3`

  40. echo $result

  41. ;;

  42. Com_begin)

  43. result=`${MYSQL_Connect} extended-status | grep -w "Com_begin" | cut -d "|" -f 3`

  44. echo $result

  45. ;;

  46. Open_tables) #檢視目前打開的表數量

  47. result=`${MYSQL_Connect} status | cut -d ":" -f 5 | cut -d " " -f 2`

  48. echo $result

  49. ;;

  50. Threads_connected) #檢視目前打開的連接配接數量

  51. result=`${MYSQL_Connect} extended-status | grep -w "Threads_connected" | cut -d "|" -f 3`

  52. echo $result

  53. ;;

  54. Threads_cached) #檢視線程緩存内的線程數量

  55. result=`${MYSQL_Connect} extended-status | grep -w "Threads_cached" | cut -d "|" -f 3`

  56. echo $result

  57. ;;

  58. Threads_created) #檢視建立用來處理連接配接的線程數。如果Threads_created較大,可能要增加thread_cache_size值。

  59. result=`${MYSQL_Connect} extended-status | grep -w "Threads_created" | cut -d "|" -f 3`

  60. echo $result

  61. ;;

  62. Threads_running) #檢視激活的(非睡眠狀态)線程數

  63. result=`${MYSQL_Connect} extended-status | grep -w "Threads_running" | cut -d "|" -f 3`

  64. echo $result

  65. ;;

  66. Slow_launch_threads) #檢視建立時間超過slow_launch_time秒的線程數

  67. result=`${MYSQL_Connect} extended-status | grep -w "Slow_launch_threads" | cut -d "|" -f 3`

  68. echo $result

  69. ;;

  70. Com_select) #檢視select語句的執行數

  71. result=`${MYSQL_Connect} extended-status | grep -w "Com_select" |cut -d "|" -f 3`

  72. echo $result

  73. ;;

  74. Com_insert) #檢視insert語句的執行數

  75. result=`${MYSQL_Connect} extended-status | grep -w "Com_insert" |cut -d "|" -f 3`

  76. echo $result

  77. ;;

  78. Com_update) #檢視update語句的執行數

  79. result=`${MYSQL_Connect} extended-status | grep -w "Com_update" | cut -d "|" -f 3`

  80. echo $result

  81. ;;

  82. Com_delete) #檢視delete語句的執行數

  83. result=`${MYSQL_Connect} extended-status | grep -w "Com_delete" | cut -d "|" -f 3`

  84. echo $result

  85. ;;

  86. Connections) #檢視試圖連接配接到MySQL(不管是否連接配接成功)的連接配接數

  87. result=`${MYSQL_Connect} extended-status | grep -w "Connections" | cut -d "|" -f 3`

  88. echo $result

  89. ;;

  90. Table_locks_immediate) #檢視立即獲得的表的鎖的次數

  91. result=`${MYSQL_Connect} extended-status | grep -w "Table_locks_immediate" | cut -d "|" -f 3`

  92. echo $result

  93. ;;

  94. Table_locks_waited) #檢視不能立即獲得的表的鎖的次數。如果該值較高,并且有性能問題,你應首先優化查詢,然後拆分表或使用複制

  95. result=`${MYSQL_Connect} extended-status | grep -w "Table_locks_waited" | cut -d "|" -f 3`

  96. echo $result

  97. ;;

  98. *)

  99. 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)"

  100. ;;

  101. esac

四、測試資料
           
  1. server端測試:

  2. [[email protected] ~]# /usr/local/zabbix/bin/zabbix_get -s 47.98.97.124 -p 10050 -k mysql.status[Connections]

  3. 11232

  4. [[email protected] ~]# /usr/local/zabbix/bin/zabbix_get -s 47.98.97.124 -p 10050 -k mysql.status[Uptime]

  5. 83228

  6. agentd端測試:

  7. [[email protected] ~]# /usr/local/zabbix/sbin/zabbix_agentd -t mysql.status[Uptime] -c /usr/local/zabbix/etc/zabbix_agentd.conf.d/userparameter_mysql.conf

  8. mysql.status[Uptime] [t|83321]

  9. [[email protected] ~]# /usr/local/zabbix/sbin/zabbix_agentd -t mysql.status[Connections] -c /usr/local/zabbix/etc/zabbix_agentd.conf.d/userparameter_mysql.conf

  10. mysql.status[Connections] [t|11263]

五、登入zabbix,添加mysql監控模闆
           
zabbix3.4監控mysql伺服器性能
zabbix3.4監控mysql伺服器性能
  1. 當然,mysql監控模闆的key隻要那麼預設的幾個,要想監控到chk_mysql.sh腳本中的資料,就需要手動建立item啦,

  2. 當然,如果需要報警通知的話,就需要先手動建立trigger了,

  3. 當然,如果想圖形刷看到資料的話,就需要手動建立graph了。

版權聲明:本文為CSDN部落客「weixin_34198762」的原創文章,遵循CC 4.0 BY-SA版權協定,轉載請附上原文出處連結及本聲明。

原文連結:https://blog.csdn.net/weixin_34198762/article/details/92384539