Zabbix 監控觸發器設置


 


簡述

在生產環境中,有一台mysql的備份服務器,上面運行着三個數據庫實例的從庫,也在做日志的同步工作,為了實現對該備份服務器的監控,當出現從庫實例不為3或者日志同步進程不為3的時候,產生告警通知,生產使用的是zabbix監控。就想着自己寫一個監控的item,通過定時取值,然后設置觸發器,當有告警的時候進行通知。

在設計的時候就沒有想到什么比較厲害的方法,只是通過ps查看進程的方式,獲取mysqld_safe的數量,因為運行了三個從庫實例,自己寫的多實例啟動腳本,在腳本中就是通過該命令啟動的數據庫,所以在做的時候就是過濾這個關鍵字。

對於日志的同步,也是用的這種方式進行統計的。

過程

1.編寫監控命令

在設計的時候,選擇使用ps命令,過濾的命令和結果如下:

[root@mysqlbackup opt]# ps -ef|grep mysqld_safe|grep -v grep|wc -l
3
[root@mysqlbackup opt]# ps -ef|grep mysqlbinlog|grep -v grep|wc -l
3

上面就是直接過濾關鍵字,而獲取到值,因為需求很簡單,只有當着兩個值,不為3的時候,就說明出現了mysql的同步異常,這個時候就需要發送告警通知給管理員來進行處理了。所以這兩條命令就可以了。

為了寫的高端一點,選擇的是寫腳本的方式,因為過濾的命令格式都是一樣的,只有關鍵字是不同的,所以寫個腳本case一下。腳本如下:

[root@mysqlbackup opt]# cat instance_count.sh 
#/bin/bash 
# monitor mysql instance and binlog instance 
function instance_count(){
    NAME=$1
    # /bin/ps -ef|grep $NAME|grep -v grep|wc -l
    case $NAME in
    1)
        /bin/ps -ef|grep mysqld_safe|grep -v grep|wc -l
        ;;
    2)
        /bin/ps -ef|grep mysqlbinlog|grep -v grep|wc -l
        ;;
    *)
        echo "Usage $0 {mysql|mysqlbinlog}"
    esac
}

main(){
    instance_count $1
}

main $1

實際上就是通過參數的形式,將要獲取的值傳入,然后返回,可以通過本地執行的方式,獲取這些值。獲取mysql實例數是參數1,獲取mysqlbinlog日志同步的實例數是參數2,輸入其他參數,直接報錯。

2.編寫item_key

基於之前的腳本,在zabbix-agentd.d目錄下,編寫一個conf文件,用來定義key,調用剛才創建的腳本進行傳參。

[root@mysqlbackup opt]# cat /etc/zabbix/zabbix_agentd.d/mysql.conf 
#UserParameter=mysql.MysqlInstanceCount,ps -ef|grep mysqld_safe |grep -v grep|wc -l
#UserParameter=mysql.MysqlbinlogCount,ps -ef|grep mysqlbinlog |grep -v grep|wc -l
UserParameter=instance.count[*],/opt/instance_count.sh $1

腳本編寫完成之后,需要重啟zabbix-agent才能生效。

3.獲取item

在zabbix-server上通過zabbix_get命令。獲取指定的值。

[root@Zabbix-server zabbix]# zabbix_get -s 10.2.86.120 -p 10050 -k instance.count[2]
3
[root@Zabbix-server zabbix]# zabbix_get -s 10.2.86.120 -p 10050 -k instance.count[1]
3

在zabbix-server上能夠通過命令成功獲取這些值,表明該item已經可以使用,下面就可以開始在web頁面上進行配置了。

4.item配置

在這里我選擇的是創建一個模板,然后在模板中創建一個應用application,然后再創建兩個item,name分別為MySQLInstanceCount和MySQLBinlogCount,對應的key值分別為instance.count[1]和instance.count[2],至於取數周期和保留期,可以選擇默認,也可以適當調整。

配置完成后,就可以在最新數據中,獲取這兩個值。

5.觸發器配置trigger

為了實現告警短信的通知,選擇配置兩個觸發器,當出現值不為3的時候,就觸發告警,開始選擇用的是last方法,意思就是獲取該item的最近的一個值。當該值不為3的時候,則產生告警,編輯的表達式如下所示:

{mysql:instance.count[1].last()}<>3

后來考慮到誤報,或者是短時間的異常告警,所以修改了表達式,選擇的是count,當最近的5次采集中,不為3的采集大於2次時,就產生告警。這樣也就減少了告警的頻次。

{mysql:instance.count[1].count(#5,3,ne,0)}>2


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM