天天看點

應用在阿裡雲上發送短信失敗_Zabbix配置騰訊雲短信報警

君子恥其言而過其行 論語

首次開通短信套餐包的騰訊雲每月會贈送100條的免費短信數量,我們可以拿這100條短信進行測試

開通之後需要添加一個應用

應用在阿裡雲上發送短信失敗_Zabbix配置騰訊雲短信報警

進入建立好的應用

這裡需要記住應用的ID還有key,後面接入的時候需要用到

應用在阿裡雲上發送短信失敗_Zabbix配置騰訊雲短信報警

建立應用簽名以及模闆

單擊建立簽名

應用在阿裡雲上發送短信失敗_Zabbix配置騰訊雲短信報警

首先騰訊雲隻支援以下類型的簽名,個人用的話可以使用自己已經備案的網站或者自己注冊一個公衆号,這裡再說一下,阿裡雲的是不支援個人公衆号的隻能是企業号,由于我的網站還沒備案,這裡就隻能使用公衆号來認證了,使用公衆号證明材料隻需要公衆号的背景截圖就可以了,比其他類型的要友善,申請說明要寫公衆号的名字。不然稽核不通過

應用在阿裡雲上發送短信失敗_Zabbix配置騰訊雲短信報警

建立應用模闆

模闆内容使用{}作為變量,建立完模闆之後會生成一個模闆ID,這個後面接入的時候也會用到,由于個人使用者單個模闆變量最大長度不超過12個字元,是以需要多定義幾個變量,最後用正則取出

注意:模闆變量之間使用,分隔的話,那麼在觸發器裡名字就不要包含,了,否則會發生轉義,導緻由于變量太長而發送短信失敗
應用在阿裡雲上發送短信失敗_Zabbix配置騰訊雲短信報警

開始接入騰訊雲短信服務

騰訊雲支援多種語言的SDK和api,使用SDK會更加的友善一點,騰訊雲的python SDK為qcloudsms_py,可以直接使用pip安裝,騰訊雲的SDK文檔位址為:https://cloud.tencent.com/document/product/382/11672 ,是以我選擇了使用api來接入,

由于騰訊的模闆單個變量長度最長不能超過12個字元,且模闆變量之間不能有空字元,是以我們需要在傳入模闆之前進行文本處理

實作思路:

  1. 将擷取到的資訊前五行進行正則比對,因為前五行的内容比較短,友善處理,将”:

    ”與換行符之間的内容進行比對,并添加到清單中

  2. 将擷取到的資訊最後一行也就是事件資訊進行正則比對,由于内容比較長,是以需要将字元串分成五組,每組長度不超過十二個字元,并存放在清單中,将兩個清單進行相加,并作為模闆參數傳給短信服務的api
  3. 将傳入清單中的元素作為參數post請求給api,平台發送短信

代碼如下:

#!/usr/bin/python3#coding=utf-8#author:wangerimport requests,reimport time,sys,json,hashlib,randomrand=random.randint(100000,999999)mobile=sys.argv[1]message=sys.argv[2]message="""%s""" %messagetimes=time.time()times=int(times)tpl_id=225686appkey='f545bc772b396c41df6da4c4442ce085'raw_text="appkey={}&random={}&time={}&mobile={}".format(appkey,rand,times,mobile)sig=hashlib.sha256(raw_text.encode('utf-8')).hexdigest()def rest(message):    #擷取報警内容,友善後續調試    with open('/tmp/message','w',encoding='utf-8') as f:         s=json.dump(message,f,ensure_ascii=False)    res=re.findall(r':(.*)\r\n',message,re.M)    hostname=res[0]    ip1=re.match(r'(\d+\.\d+)\.(.*)',res[1]).group(1)    ip2=re.match(r'(\d+\.\d+)\.(.*)',res[1]).group(2)    date1=re.match(r'(.*)-(.*)',res[2]).group(1)    time1=re.match(r'(.*)-(.*)',res[2]).group(2)    level=res[3]    id1=res[4]    alert=[hostname,ip1,ip2,date1,time1,level,id1]    #擷取處理後的前五行内容,友善調試    with open('tmp/messages','a',encoding='utf-8') as f:         for i in alert:             f.write(i)    return alertdef remes(alert,message):    res=re.search('報警資訊:(.*)$',message).group(1)    event=[]    a,b=0,11    for i in range(5):        s1=res[a:b]        if len(s1)==0:            s1='\r'        event.append(s1)        a,b=a+11,b+11    var=alert+event    #擷取處理後的報警資訊,友善調試    with open('/tmp/messages1','a',encoding='utf-8') as f:        for i in event:                 s=json.dump(i,f,ensure_ascii=False)    return var  #print(sig)def sendsms(remes):    url='https://yun.tim.qq.com/v5/tlssmssvr/sendsms?sdkappid=1400238944&random={}'.format(rand)    header={"Content-Type": "application/json"}    data={        "ext": "123",        "extend": "",        "params": [            remes[0],            remes[1],            remes[2],            remes[3],            remes[4],            remes[5],            remes[6],            remes[7],            remes[8],            remes[9],            remes[10],            remes[11]        ],        "sig": sig,        "sign": "沒有故事的陳師傅",        "tel": {            "mobile": mobile,            "nationcode": "86"        },        "time": times,        "tpl_id": tpl_id    }    request=requests.post(url=url,headers=header,json=data)    return json.loads(request.content)rest=rest(message)remes=remes(rest,message)sendsms(remes)
           

接入zabbix報警

将腳本放到/usr/lib/zabbix/alertscripts/目錄下,并授予腳本操作權限,然後在zabbix頁面進行配置

定義報警媒介類型

應用在阿裡雲上發送短信失敗_Zabbix配置騰訊雲短信報警

配置使用者接收的手機号

應用在阿裡雲上發送短信失敗_Zabbix配置騰訊雲短信報警

添加動作

消息内容的順序不能亂,因為是與短信模闆進行比對的

應用在阿裡雲上發送短信失敗_Zabbix配置騰訊雲短信報警

進行zabbix報警測試

停止zabbix-agent,使其産生報警

systemctl stop zabbix-agent
           

可以看到報警短信已經收到

應用在阿裡雲上發送短信失敗_Zabbix配置騰訊雲短信報警

如果要檢視短信的報錯資訊,可以在騰訊雲短信服務的統計分析中檢視

應用在阿裡雲上發送短信失敗_Zabbix配置騰訊雲短信報警

踩過的坑

  1. 盡量使用python3,python2在Linux環境下比對資料可能會存在問題
  2. 短信模闆中變量的分隔符盡量不要出現在觸發器中,否則會造成轉義
  3. 騰訊雲同一手機号的發送短信頻率為30秒内發送短信條數不超過1條,1小時内發送短信條數不超過5條,1個自然日内發送短信條數不超過10條,是以以後可以試試其他廠商的産品或者進行企業認證
  4. 傳入的模闆變量不能為空字元,可以先将空字元串轉為”\r”,模闆變量之間也不能用空字元分隔

歡迎各位一起交流,對腳本的改進意見可在下方留言

應用在阿裡雲上發送短信失敗_Zabbix配置騰訊雲短信報警