为了账号安全,请及时绑定邮箱和手机立即绑定

告警通知平台的邮件短信接口实现思路以及数据统计

标签:
Python


前段时间,芦淞那小子问过我,咋利用微信发送报警通知的调用接口。但是我当时用的是腾讯内部的接口,特别流氓,就算你把通知的微信号拉到黑名单,照样给你推送信息。这个接口没有对外开放的,我也没招的。现在微信公众平台主动推送信息也是有限制的, 所以外部调用是很不靠谱的~

短信的方法是很不错,但是短信是要钱,当然有朋友说飞信可以呀? 我只能说 “呵呵 ”

其实大家心里也明白最靠谱的肯定是短信啦,但是短信的价格确实不便宜,对于中小公司的话,还是舍不得花那些钱的 ~

1000-49999  0.06元/条

50000-99999 0.05元/条

≥100000 0.04元/条

从搜狐的朋友那边,得到了一个挺巧妙的思路,最近也把他实现了~

大半夜了,想睡觉了~  我先简单写写思路~

1.  用户要在我的平台上生成发送邮件的Token key

(这个是针对用户的认证,而不像以前 我们把账号密码也都给暴露了~)

2.  根据提示上的字段和demo,针对业务来进行发邮件告警

(为了更好的统计,以及平台的接口数据展现,要搞出多个字段,比如 token key的,主机的,类型的,信息,是否启用短信接口)

3.  当调用了server端的邮件告警接口后,我这边会给他发一个html的邮件,里面含有一个图片。并让图片名字

(关于html的img便签,大家可以把图片搞成无色的,别让人看见,毕竟不高雅 呵呵)

和事务相对应。然后发出一个后台任务监控这个事务。

(要是用户选择的类型是开启短信的话,那咱们就把扔到后台,监视图片是否被访问。 )

4.  要是2分钟内,这个图片被访问的话,会删掉那个后台任务,并且入库。要是图片没有被访问的话,

后台的接口会自动发送手机信息的。

(监控的话,可以是读取nginx的日志,推荐你自己写,返回图片之前,你就可以把后台的任务给删掉了)

我先简单实现下功能,三个步骤,好让大家这个流程~   截图为证~

第一步:

005936737.jpg

这边是邮件接口的使用

#!/usr/bin/env python

# -*- coding: utf-8 -*-

#导入smtplib和MIMEText

import smtplib

from email.mime.text import MIMEText

#############

#要发给谁,这里发给2个人

mailto_list=["rfyiamcool@163.com"]

#####################

#设置服务器,用户名、口令以及邮箱的后缀

mail_host="smtp.163.com"

mail_user=""

mail_pass=""

mail_postfix="163.com"

######################

def send_mail(to_list,sub,content):

    '''

    to_list:发给谁

    sub:主题

    content:内容

    send_mail("rfyiamcool@163.com","sub","content")

    '''

    me=mail_user+"<"+mail_user+"@"+mail_postfix+">"

    msg = MIMEText(content,_subtype='html',_charset='gb2312')

    msg['Subject'] = sub

    msg['From'] = me

    msg['To'] = ";".join(to_list)

    try:

                       s = smtplib.SMTP()

        s.connect(mail_host)

        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

def nei(filename):

    content='''

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=GB2312" />

<title>Demo: CSS3 Buttons</title>

<style type="text/css">

a {

text-decoration: none;

}

div.twitter {

    font-size: 20px;

        padding: 5px;

    color: #fff;

    background: #2da1ec;

    border-radius: 3px;

}

div.twitter:hover {

    color: #fff;

    background: #2eacff;

}

div.twitter:active {

    top: 1px;

}

  padding: 0px 20.48px;

}

</style>

</head>

</body>

<div>

<img class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="http://baidu.com/%s.jpg" height="200" width="200" />

<div class="twitter" data-tip="twitter">

10.2.20.115 mongodb'process down <br>

</div>

<br>

<br>

<br>

</body>

</html>

'''%filename

    return content

if __name__ == '__main__':

    if send_mail(mailto_list,"subject",content):

        print "发送成功"

    else:

        print "发送失败"

第二步:

010058332.jpg

第三步,我们可以在日志里面看到5.jpg这个页面的访问。

这个日志是我在程序里面打印出来的,也就是当访问5.jpg的时候,我能触发啥任务,或者打印,或者做好已经访问的记录。。。。

010007738.jpg

下面是平台的demo ~ 我想说的是,现在好多公司的告警信息都没有统计,随意的调用smtp发邮件,而不知道发送成功了没有,每个月发送了几次,发送都是啥内容。当然这些东西在nagios zabbix也大体可以看到,但是个人觉得还是综合到一个管理系统下,管理系统更加直观。

也有想这么搞的朋友直接提问题就行,我会第一时间给大家解答~

框架:

nginx  tornado  jquery  

002247107.jpg

002312670.jpg

在 2014-5-9 0:11 ,再次总结下: 图片的方式有时会出问题,最主要的是一些邮件厂商会预先的读取照片,这样咱们就不能很好的判断状态了。

©著作权归作者所有:来自51CTO博客作者rfyiamcool的原创作品,如需转载,请注明出处,否则将追究法律责任


点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消