python 實現監測consul服務狀態,發送郵件短信

# -*-coding:utf-8-*-
import redis
import urllib2
import json
import smtplib
import time
from qcloudsms_py import SmsMultiSender
from qcloudsms_py.httpclient import HTTPError
from email.mime.text import MIMEText
from email.header import Header

#consul 配置
Url='http://127.0.0.1:8500/v1/health/state/any'

#騰訊短信配置
appid = xxx
appkey = "xxx"
phone_numbers = ["xxx", "xxx"]
template_id = xxx

#mail配置
mail_user='xx'
mail_passwd='xx'
mail_host='xx'
mail_port=xx

#redis配置
redis_host='127.0.0.1'
redis_port=6379
redis_db=1
redis_sms_key='96ca8302-7b68-11e8-bc4a-1e00b000003e'
redis_email_key='7203896e-7b69-11e8-abd0-1e00b000003e'

#收件人列表
to_list=["xxx","xxx","xxx"]
#郵件主題
title="%s  Consul異常通知"%(time.strftime('%Y-%m-%d', time.localtime(time.time())))

#初始化短信
ssender = SmsMultiSender(appid, appkey)
#初始化redis
redis_connect = redis.Redis(host=redis_host, port=redis_port,db=redis_db)
#連接consul api
req = urllib2.Request(Url)
resp = urllib2.urlopen(req)

def send_mail(to_list,subject,content):
    me = mail_user
    msg = MIMEText(content,'html',_charset='utf-8')
    msg['Subject'] = Header(subject, 'utf-8')
    msg['From'] = me
    msg['to'] = to_list
    try:
        s = smtplib.SMTP_SSL(mail_host, mail_port)
        s = smtplib.SMTP()
        s.connect(mail_host)
        s.login(mail_user,mail_passwd)
        s.sendmail(me,to_list,msg.as_string())
        s.close()
        return True
    except Exception,e:
        print str(e)
        return False

data=[]
for server in json.loads(resp.read()):
    if server['Name'] != 'Serf Health Status'  and server['Status'] != 'passing':
        data.append({"Node":server['Node'],"Service":server['Name'].replace('Service \'','').replace('\' check',''),"Status":server['Status']})


html='''
<style type="text/css">
table.gridtable {
    font-family: verdana,arial,sans-serif;
    font-size:15px;
    color:#333333;
    border-width: 1px;
    border-color: #666666;
    border-collapse: collapse;
}
table.gridtable th {
    border-width: 1px;
    padding: 12px;
    border-style: solid;
    border-color: #666666;
    background-color: #dedede;
}
table.gridtable td {
    border-width: 1px;
    padding: 12px;
    border-style: solid;
    border-color: #666666;
    background-color: #ffffff;
}
</style>
<div>
<table class="gridtable">
<tr><th>主機</th>  <th>服務</th> <th>狀態</th>
<tr>

'''

for i in data:
    html = html + u"""
        <tr>
        <td>%s</td>  <td>%s</td>  <td>%s</td>
    </tr>
        """%(i['Node'],i['Service'],i['Status'])

html+=u"""
</table>
</div>
"""


if len(data) >=1:

    if redis_connect.get(redis_sms_key) is None:
        result = ssender.send_with_param(86, phone_numbers,template_id, [])
        redis_connect.set(redis_sms_key,"")
        redis_connect.expire(redis_sms_key,60*60*24)

    if redis_connect.get(redis_email_key) is None:
        redis_connect.set(redis_email_key,"")
        redis_connect.expire(redis_email_key,60*60)
        for i in to_list:
            send_mail(i,title,html)

添加計劃任務

*/1 * * * * /usr/bin/python /data/bin/consul.py


短信間隔24小時發一次,郵件間隔1小時發送一次,如需修改更改Key過期時間

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