實現自定義監控項實例

1.創建主機組 2.創建主機 3.創建監控項 1.到需要監控的主機的agent中添加自定義的監控項目 cd /etc/zabbix/zabbix_agentd.d vi userparameter_mysql.conf UserParameter=監控項目名稱,shell命名 UserParameter=mysql.ping,HOME=/var/lib/zabbix mysqladmin ping | grep -c alive systemctl restart zabbix-agent 2.到zabbix server的主機上進行調試 zabbix_get -s 192.168.11.134 -k mysql.ping [root@node3 ~]# zabbix_get -s 192.168.11.134 -k mysql.ping sh: mysqladmin: 未找到命令 0 由此可以看出可以正常執行命令 同時返回的結果是一個字符串 這個命令執行的結果類型在創建觸發器的時候十分有用
儀表盤配置步驟:
1.創建自定義監控項
信息類型的選擇 需要根據shell命令執行的具體結果來確定 不能隨便填寫
2.根據自定義監控項創建觸發器
表達式就是對獲取對應監控項的值進行一些處理 根據處理后的值來判斷是否進行告警操作
zabbix內置監控模板
zabbix實現腳本發送告警郵件
zabbix-server 服務器系統配置

[root@Zabbix ~]# yum -y install mail #如有mail命令則不用安裝 [root@Zabbix ~]# vim /etc/mail.rc # Display the recipients of messages sent by the user himself in # header summaries. set showto # Automatically check for new messages at each prompt, but avoid polling # of IMAP servers or maildir folders. set newmail=nopoll # If threaded mode is activated, automatically collapse thread. set autocollapse # Hide some header fields which are uninteresting for most human readers. ignore received in-reply-to message-id references ignore mime-version content-transfer-encoding # Only include selected header fields when forwarding messages. fwdretain subject date from to # For Linux and BSD, this should be set. set from=richardcnhm@sina.com #發送的郵件地址 set smtp=smtp.sina.com #外部smtp服務器的地址 set smtp-auth-user=richardcnhm@sina.com #外部smtp服務器認證的用戶名 set smtp-auth-password=123456 #外部smtp服務器認證的用戶密碼(如用163或qq郵箱則為授權碼) set smtp-auth=login #郵件認證的方式 [root@Zabbix ~]# echo "郵件正文"|mail -s "郵件主題" 收件人地址 #發送郵件測試命令 [root@node3 ~]# echo "hello world aaaaa" |mail -s "aaaaa" 2228@163.com [root@node3 ~]# echo "hello world aaaaa" |mail -s "aaaaa" 1272@qq.com 發送郵件的標題為test 被服務器垃圾郵件屏蔽
發送郵件腳本的實現

[root@Zabbix ~]# yum -y install dos2unix [root@Zabbix ~]# vim /usr/lib/zabbix/alertscripts/mail.sh #!/bin/bash # use mailx to send mail # 20141127 carl 1st # PATH file=/tmp/zabbix_mail.txt echo "$3" > $file dos2unix -k $file /bin/mail -s "$2" $1 < $file # echo "$3" | mail -s "$2" $1 #注:使用dos2unix工具是為解決zabbix發送郵件出現亂碼和收到的郵件是*.bin的情況 #$3 是前端定義的郵件內容,$2是前端定義的主題,$1是前端定義的收件人 [root@Zabbix alertscripts]# chmod 777 mail.sh [root@Zabbix alertscripts]# chown zabbix.zabbix mail.sh mail.sh必須存放在/usr/lib/zabbix/alertscripts/目錄下

[root@zabbix alertscripts]# pwd /usr/lib/zabbix/alertscripts [root@zabbix alertscripts]# cat mail_qq.py #!/usr/bin/python #coding:utf-8 import smtplib from email.mime.text import MIMEText import sys mail_user = '111111111@qq.com' mail_pass = 'xxxxxxxxxxx' def send_mail(to_list,subject,content): me = "zabbix 監控告警平台"+"<"+mail_user+">" msg = MIMEText(content, 'plain', 'utf-8') msg['Subject'] = subject msg['From'] = me msg['to'] = to_list try: s = smtplib.SMTP_SSL("smtp.qq.com", 465) s.login(mail_user,mail_pass) s.sendmail(me,to_list,msg.as_string()) s.close() return True except Exception,e: print str(e) return False if __name__ == "__main__": send_mail(sys.argv[1], sys.argv[2], sys.argv[3]) mail_user為郵箱地址,mail_pass為郵箱服務商提供的客戶端授權碼,獲得授權碼的方式也可以參考百度,要說明的是目前網易郵箱客戶端授權碼支持自定義,qq郵箱客戶端授權碼不支持自定義,需要生成、這里也附上使用163郵箱的腳本 [root@zabbix alertscripts]# cat mail_163.py #!/usr/bin/python #coding:utf-8 import smtplib from email.mime.text import MIMEText import sys mail_user = '1232323232@163.com' mail_pass = 'xxxxxxxxxx' def send_mail(to_list,subject,content): me = "zabbix 監控告警平台"+"<"+mail_user+">" msg = MIMEText(content, 'plain', 'utf-8') msg['Subject'] = subject msg['From'] = me msg['to'] = to_list try: s = smtplib.SMTP("smtp.163.com", 25) s.login(mail_user,mail_pass) s.sendmail(me,to_list,msg.as_string()) s.close() return True except Exception,e: print str(e) return False if __name__ == "__main__": send_mail(sys.argv[1], sys.argv[2], sys.argv[3]) 腳本編寫完成之后需要為腳本添加執行權限 [root@zabbix alertscripts]# chmod +x mail_qq.py 3、測試 命令行測試腳本能否成功執行 [root@zabbix alertscripts]# ./mail_qq.py xxx@163.com "測試" 'test' 測試參數為三個,分別為收件人郵箱地址,郵件標題,郵件內容 測試的時候如果出現錯誤提示缺少smtplib,解決方法為使用pip進行安裝:pip install smtplib
zabbix web控制台配置
1.添加報警媒介類型

#!/bin/bash #echo "this is zabbix msg" |mail -s "bbbbbbbbb" 127@qq.com echo $1 > /tmp/user echo $2 > /tmp/zhuti echo $3 > /tmp/neirong file=/tmp/zabbix_mail.txt echo "$3" > $file dos2unix -k $file /bin/mail -s "$2" $1 < $file
向sendmail腳本傳遞三個宏變量參數
1.{ALERT.SENDTO} 表示接收郵件的賬號
2.{ALERT.SUBJECT} 表示發送郵件的標題
3.{ALERT.MESSAGE} 表示發送郵件的內容
2.添加動作
1.添加一個動作的觸發條件
2.添加操作的詳細步驟
zabbix內置的宏變量:
默認標題: 主機 {HOSTNAME} 在 {EVENT.DATE} {EVENT.TIME} 發生故障 {TRIGGER.NAME} {ITEM.VALUE}
告警主機:{HOSTNAME}
告警時間:{EVENT.DATE} {EVENT.TIME}
告警等級:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警項目:{TRIGGER.KEY}
問題詳情:{ITEM.NAME}:{ITEM.VALUE}
當前狀態:{TRIGGER.STATUS}:{ITEM.VALUE}
事件ID:{EVENT.ID}
3.設置用戶Admin的郵箱 用來接收報警信息郵件
4.修改觸發器表達式觸發報警發送郵件
zabbix實現釘釘告警
1.首先創建一個釘釘群 然后再在群里創建一個群機器人 獲取一個web hook地址
2.編寫發送釘釘發送消息腳本
[root@node3 alertscripts]# pwd
/usr/lib/zabbix/alertscripts
[root@node3 alertscripts]# chown -R zabbix:zabbix dingding.py
[root@node3 alertscripts]# chmod +x dinding.py

#!/usr/bin/python import sys import json import requests api_url="https://oapi.dingtalk.com/robot/send?access_token=d4a29054" headers={"Content-Type":"application/json;charset=utf-8"} def msg(text): json_text = { "msgtype":"text", "text": { "content":text }, "at":{ "atMobiles":[ # "13999999", ], "isAtAll":False } } print(requests.post(api_url,json.dumps(json_text),headers=headers).content) if __name__ == "__main__": text=sys.argv[1] msg(text) #調試 [root@node3 alertscripts]# python dingding.py [root@node3 alertscripts]# ./dingding.py ./dingding.py:行1: import: 未找到命令 ./dingding.py:行2: import: 未找到命令 ./dingding.py:行3: import: 未找到命令 import sys import json import requests #!/usr/bin/python import sys import json import requests
3.添加告警媒介類型
4.添加動作
5.添加用戶報警媒介