tornado-电话报警

需求

某些时候邮件,钉钉的报警我们在家里,或者周末是很少去观看的,这时候如果服务器出了问题,运维人员是没法第一时间排查到,所以短信和电话报警就很有必要去做。

已有阿里云的语音短信报警接口,故做了个端口电话报警。

电话报警脚本

[root@aa phone_send]# cat send_model.py

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
# -*- coding:utf-8 -*-
import requests
import tornado.ioloop
import tornado.web

phonenumber = "xxxxxxx,xxxxxxx"
portdic = {
"9876":"服务类型MQ,端口9876",
"2181":"服务类型ZK,端口2181",
"3306":"服务类型数据库,端口3306",
"27017":"服务类型数据库,端口27017",
"1908":"服务类型spada,薛亮应用",
"53":"服务类型dns,端口53",
"9200":"服务类型es,端口9200",
"6379":"服务类型redis,端口6379",
"80":"服务类型nginx,端口80"
}
statusdic = {
"PROBLEM":"服务发生故障",
"OK":"故障恢复"
}

class MainHandler(tornado.web.RequestHandler):
def get(self):
status = self.get_argument('status')
endpoint = self.get_argument('endpoint')
metric = self.get_argument('metric')
tags = self.get_argument('tags')
statusok = statusdic.get(status)
port = tags.split(":")[1]
p_endpoint = endpoint.split(".")
del(p_endpoint[0])
portmes = portdic.get(port)
if portmes == None:
portmes = "端口" + port
# 短信
requests.get("http://域名/send_sms/%s,%s,%s,%s/%s"%(statusok,endpoint,metric,portmes,phonenumber))
# 电话
requests.get("http://域名/send_phone/%s%s%s%s/%s"%(statusok,p_endpoint,metric,portmes,phonenumber))
message = status + endpoint + metric + tags
print(status,endpoint,metric,tags,port)
application = tornado.web.Application([(r"/message", MainHandler), ])
if __name__ == "__main__":
application.listen(8868)
tornado.ioloop.IOLoop.instance().start()

执行

1
python3 send_model.py

callback接口

http://ip:8868/message

openfalcon监控做模板

Donate