zabbix監控mysql的Discovery模板


環境:centos6.6zabbix-2.4.5mysql-5.6.24


    zabbix沒有自帶對mysql的監控模板,網上許多模板也都是固定的監聽某端口,不夠靈活,如果mysql的端口很多記不清楚的話,我們就應該以lld(low level discovery)方式監控mysql。




步驟:

一、客戶端


1、監控內容的json化

在客戶端裏,需要把監控的內容json化展示,然後服務端可以通過正則來過濾出結果。下面在是監控mysql的json展示:

wKiom1XV3yyTX-TJAACeP5dZVV8556.jpg


腳本內容如下:

#Fucation:mysql low-level discovery
#Script_name mysql_low_discovery.sh
mysql() {
            port=($(sudo ss -tnlp | grep mysql | awk -F "[ :]+" '{print $4}'))
            printf '{\n'
            printf '\t"data":[\n'
               for key in ${!port[@]}
                   do
                       if [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]];then
              socket=$(ps aux|grep ${port[${key}]}|grep -v grep|awk -F '=' '{print $8}'|cut -d ' ' -f 1)
                          printf '\t {\n'
                          printf "\t\t\t\"{#MYSQLPORT}\":\"${port[${key}]}\"},\n"
                     else [[ "${key}" -eq "((${#port[@]}-1))" ]]
              socket=$(ps aux|grep ${port[${key}]}|grep -v grep|awk -F '=' '{print $8}'|cut -d ' ' -f 1)
                          printf '\t {\n'
                          printf "\t\t\t\"{#MYSQLPORT}\":\"${port[${key}]}\"}\n"
                       fi
               done
                          printf '\t ]\n'
                          printf '}\n'
}
$1

如果想讓腳本可以用zabbix的身份獲取數據,還要做以下四步操作:

chown zabbix.zabbix mysql_low_discovery.sh
chmod +x mysql_low_discovery.sh
echo "zabbix ALL=(root) NOPASSWD:/usr/sbin/ss" >> /etc/sudoers
sed -i 's/^Defaults.*.requiretty/#Defaults    requiretty/'  /etc/sudoers

最後把腳本放到一個zabbix用戶允許訪問的目錄, 定義UserParameter的時候路徑保持一致就可以了。


2.自定義鍵值

在客戶端修改配置文件zabbix_agentd.conf,添加以下內容:

UserParameter=zabbix_low_discovery[*],/bin/bash /usr/local/zabbix-2.4.5/script/mysql_low_discovery.sh $1
UserParameter=mysql_stats[*],/usr/local/mysql/bin/mysql --login-path=local -P$1 -e "show global status"| grep "\<$2\>"| cut -f2


這裏遇到一個坑要提前說一下,對於mysql5.6以上的版本來講,直接使用mysql -uxxx -pxxx -e "show global status"等直接輸入密碼的命令會有警告:

Warning: Using a password on the command line interface can be insecure.

這條警告會直接導致zabbix服務器端不能識別mysql_stats[*]的值,解決方法是使用mysql自帶的mysql_config_editor 工具:

mysql_config_editor set --login-path=local --host=127.0.0.1 --user=username --password        回車會提示輸入密碼

然後我們在腳本中就可以使用:

mysql --login-path=local  -P$1 -e "statement"

代替

mysql -u username -p password -P$1 -e "statement"


這種填坑方法在實驗環境可行,線上我試了一下,權限問題始終繞不過去,所以我最終採用了另外一種定義鍵值的辦法:

UserParameter=zabbix_low_discovery[*],/bin/bash /usr/local/zabbix/libexec/mysql_low_discovery.sh $1
UserParameter=mysql_stats[*],/usr/local/zabbix/libexec/mysql.sh $1 $2

cat mysql.sh
#!/bin/bash
export MYSQL_PWD=XXX
/usr/local/mysql/bin/mysql -uXXX -h127.0.0.1 -P$1 -N -e "show global status where Variable_name='$2'" |awk '{print $2}'

這種方式也可以屏蔽警告信息,讓zabbix_server端可以獲取正確的數據。


3.Mysql授權查詢功能的賬號

grant select on *.* to USERNAME@'127.0.0.1' identified by "PASSWORD";
flush privleges;


4.重啓zabbix客戶端

killall zabbix_agentd
/usr/local/zabbix/sbin/zabbix_agentd


5.測試

先測試腳本和命令:

wKiom1XV4UPgK_E3AAE_hw00udw978.jpg

再測試客戶端能不能獲取鍵值:

wKioL1XV41KAHQIjAAGYf_sgiX0490.jpg

最後測試服務器端能不能獲取鍵值:

wKiom1XV4USA_UtvAAFXHf1Wy3U171.jpg


注意:無論是python腳本或者shell腳本,zabbix接收的數據格式一定是JSON格式的,而且形式必須爲:

{
    "data":[
     {
            "{#鍵}":"值"}
     ]
}




二、服務端


1.創建模板

wKiom1XV4eqwtfszAANDqtvsnSk710.jpg


2.設置發現規則

wKioL1XV4_qSGS8FAAPtHD34S3I707.jpg


3.設置正則

wKioL1XV4_rSBKDPAAOSWCrXk1Y843.jpg


4.創建發現項

wKiom1XV4evTPX5mAATju_cC-Os390.jpg


5.創建發現項的觸發器

wKioL1XV4_rQw20_AAP9w1OYEW4406.jpg


6.給需要的項繪圖

wKiom1XV4evBd9ubAAVHcoOFmcw565.jpg


7.將模板鏈接到mysql服務器

wKioL1XV4_rAQ-AwAAO7ftDqzGY164.jpg


8.注意事項

(1)發現規則設置更新時長爲1小時

爲什麼設置3600秒?原因是如果設置時間過短,比如你設置60s,一個是服務器的壓力大,一個是如果你檢測的端口突然當掉了,還沒有來的急報警,主機通過json來獲取不到這個信息,就認爲沒有這個端口,模板裏會自動關閉這個監控項的內容(默認保留30天,然後自動刪除),這樣報警功能就基本沒有了,所以還是發現的間隔時間長一些比較好。

(2)設置正則

設置正則是爲了將mysql的監聽端口範圍給固定,免得出現錯誤,也可以不設置正則,這個時候需要在設置發現規則的時候把正則那一項給清空。

wKiom1XV4eyz8gcDAAGyMepJfvk801.jpg


(3)創建發現項(Item prototypes)要注意

Name:要見名知意,不能隨心所欲

Type:設置爲Zabbix agent,意爲主動提交數據

Key:一定是mysql_stats[{#MYSQLPORT},$2],第一個參數是端口,第二個參數是你具體想要查詢的項,我的模板裏有47項,這些項目在mysql -uxxx -pxxx -e "show global status"裏已經列出來了,可以自己查看。




最後:

    附件模板奉上


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章