python consul配置中心_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='''

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;

}

主机服务状态

'''

for i in data:

html = html + u"""

%s  %s  %s

"""%(i['Node'],i['Service'],i['Status'])

html+=u"""

"""

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过期时间

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值