操做系統 | centos7 | |
zabbix_server | zabbix 4.0.3 | |
python |
3.6.5 | |
短信平臺 | 阿里雲短信 |
1 [root@cp-hb-bj-dev-001 etc]# cat zabbix_server.conf|egrep -v '^$|^#'
2 ListenPort=10051
3 LogFile=/data/logs/zabbix/zabbix_server.log 4 DebugLevel=3
5 PidFile=/data/logs/zabbix/zabbix_server.pid 6 DBHost=********************
7 DBName=dev_zabbix 8 DBUser=mysql_zabbix_w 9 DBPassword=************
10 DBPort=3306
11 Timeout=4
12 AlertScriptsPath=/usr/local/cpgroup/zabbix/share/zabbix/alertscripts #alertscripts 執行腳本存放路徑,在zabbix安裝目錄下 13 LogSlowQueries=3000
登陸阿里雲官網下載sdkpython
申請短信簽名與模板mysql
模板詳情信息,這裏只用了一個參數,並且告警與恢復都用的同一個模板。sql
將下載下來的demo上傳到服務器/usr/local/cpgroup/zabbix/share/zabbix/alertscripts目錄下 json
注:最好在該目錄下建立一個python虛擬環境,很好管理下載下來的依賴包,但我這裏並無使用centos
修改const.py爲你本身的accesskeyapi
賦予demo_sms_send.py爲可執行權限
並執行 python setup.py install 安裝依賴包
修改demo_sms_send.py
#!/usr/bin/env python # -*- coding: utf-8 -*-
import sys from aliyunsdkdysmsapi.request.v20170525 import SendSmsRequest from aliyunsdkdysmsapi.request.v20170525 import QuerySendDetailsRequest from aliyunsdkcore.client import AcsClient import uuid from aliyunsdkcore.profile import region_provider from aliyunsdkcore.http import method_type as MT from aliyunsdkcore.http import format_type as FT import const """ 短信業務調用接口示例,版本號:v20170525 Created on 2017-06-12 """
try: reload(sys) sys.setdefaultencoding('utf8') except NameError: pass
except Exception as err: raise err # 注意:不要更改
REGION = "cn-hangzhou" PRODUCT_NAME = "Dysmsapi" DOMAIN = "dysmsapi.aliyuncs.com" acs_client = AcsClient(const.ACCESS_KEY_ID, const.ACCESS_KEY_SECRET, REGION) region_provider.add_endpoint(PRODUCT_NAME, REGION, DOMAIN) def send_sms(business_id, phone_numbers, sign_name, template_code, template_param=None): smsRequest = SendSmsRequest.SendSmsRequest() # 申請的短信模板編碼,必填
smsRequest.set_TemplateCode(template_code) # 短信模板變量參數
if template_param is not None: smsRequest.set_TemplateParam(template_param) # 設置業務請求流水號,必填。
smsRequest.set_OutId(business_id) # 短信簽名
smsRequest.set_SignName(sign_name) # 數據提交方式
# smsRequest.set_method(MT.POST)
# 數據提交格式
# smsRequest.set_accept_format(FT.JSON)
# 短信發送的號碼列表,必填。
smsRequest.set_PhoneNumbers(phone_numbers) # 調用短信發送接口,返回json
smsResponse = acs_client.do_action_with_exception(smsRequest) # TODO 業務處理
return smsResponse if __name__ == '__main__': __business_id = uuid.uuid1() sendto = str(sys.argv[1]) # zabbix傳過來的第一個參數
message = str(sys.argv[2]) # zabbix傳過來的第二個參數
params = {'message':message} # 對應短信模板裏設置的變量名
print(send_sms(__business_id, sendto, "簽名名稱", "模板code" ,params))
本地測試服務器
python demo_sms_send.py PhoneNumber Message
#返回信息
b'{"Message":"OK","RequestId":"582BC524-2542-4A67-8C96-F7A5522B2331","BizId":"434800850125393357^0","Code":"OK"}'
建立媒介類型並保存ide
ALERT.SENTO對應着python腳本中的第一個參數,ALERT.MESSAGE對應着python腳本中的第二個參數post
綁定用戶測試
建立動做
<!--警告-->
告警主機:{HOSTNAME1}
告警時間:{EVENT.DATE} {EVENT.TIME}
告警等級:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警項目:{TRIGGER.KEY1}
問題詳情:{ITEM.NAME}:{ITEM.VALUE}
當前狀態:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
<!--恢復-->
恢復主機:{HOSTNAME1}
恢復時間:{EVENT.DATE} {EVENT.TIME}
告警等級:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警項目:{TRIGGER.KEY1}
問題詳情:{ITEM.NAME}:{ITEM.VALUE}
當前狀態:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
配置完成後,修改觸發器測試短信是否可用
這個觸發器是判斷當前系統可用內存,默認是20M,能夠看到我這裏爲了測試已經將它修改,因此我這邊直接將其修改回來便可
查看當前動做日誌
將郵件腳本上傳到服務器/usr/local/cpgroup/zabbix/share/zabbix/alertscripts目錄下
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:hc.li
import smtplib from email.mime.text import MIMEText import sys mail_host = 'smtp.163.com' mail_user = 'user@163.com' #修改成本身的郵箱與密碼
mail_pass = 'passwd' mail_postfix = '163.com'
def send_mail(to_list,subject,content): me = "zabbix 監控告警平臺"+"<"+mail_user+"@"+mail_postfix+">" msg = MIMEText(content, 'plain', 'utf-8') msg['Subject'] = subject msg['From'] = me msg['to'] = to_list try: s = smtplib.SMTP_SSL(mail_host,465) #s.connect(mail_host)
s.login(mail_user,mail_pass) s.sendmail(me,to_list,msg.as_string()) s.close() return True except Exception as e: print (str(e)) return False if __name__ == "__main__": send_mail(sys.argv[1], sys.argv[2], sys.argv[3])
建立報警媒介
綁定用戶
配置動做
保存測試便可