前段时间,芦淞那小子问过我,咋利用微信发送报警通知的调用接口。但是我当时用的是腾讯内部的接口,特别流氓,就算你把通知的微信号拉到黑名单,照样给你推送信息。这个接口没有对外开放的,我也没招的。现在微信公众平台主动推送信息也是有限制的, 所以外部调用是很不靠谱的~
短信的方法是很不错,但是短信是要钱,当然有朋友说飞信可以呀? 我只能说 “呵呵 ”
其实大家心里也明白最靠谱的肯定是短信啦,但是短信的价格确实不便宜,对于中小公司的话,还是舍不得花那些钱的 ~
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的日志,推荐你自己写,返回图片之前,你就可以把后台的任务给删掉了)
我先简单实现下功能,三个步骤,好让大家这个流程~ 截图为证~
第一步:
这边是邮件接口的使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
#!/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 src="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
"发送失败"
|
第二步:
第三步,我们可以在日志里面看到5.jpg这个页面的访问。
这个日志是我在程序里面打印出来的,也就是当访问5.jpg的时候,我能触发啥任务,或者打印,或者做好已经访问的记录。。。。
下面是平台的demo ~ 我想说的是,现在好多公司的告警信息都没有统计,随意的调用smtp发邮件,而不知道发送成功了没有,每个月发送了几次,发送都是啥内容。当然这些东西在nagios zabbix也大体可以看到,但是个人觉得还是综合到一个管理系统下,管理系统更加直观。
也有想这么搞的朋友直接提问题就行,我会第一时间给大家解答~
框架:
nginx tornado jquery
在 2014-5-9 0:11 ,再次总结下: 图片的方式有时会出问题,最主要的是一些邮件厂商会预先的读取照片,这样咱们就不能很好的判断状态了。
本文转自 rfyiamcool 51CTO博客,原文链接:http://blog.51cto.com/rfyiamcool/1332160,如需转载请自行联系原作者