博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用阿里云Serverless函数计算实现HTTP健康检查+故障短信通知 ...
阅读量:7020 次
发布时间:2019-06-28

本文共 1914 字,大约阅读时间需要 6 分钟。

使用阿里云Serverless函数计算实现HTTP健康检查+故障短信通知

应用场景

定时对网站/API进行请求,根据请求响应判断服务是否可用,网站是否存在宕机,当发生宕机时,发送短信通知管理员.

技术使用

运行平台:阿里云函数计算

开发语言:Python3(小功能,精简,开发快,可在阿里云上在线编辑代码)
其它:阿里云短信接口

为何选用函数计算?

  1. 无需关注运维,仅需要编写核心代码,一个python脚本就够了(阿里云上可在线编辑代码,本地开发环境都无需搭建)
  2. 定时进行检测,只需要选用函数计算的“定时触发器”即可
  3. 根据代码的调用次数和运行时间计费(相对价格应该是非常低的)

结构图

20190423103532

过程

  1. 阿里云上开通函数计算服务
  2. 创建服务:函数计算-创建服务:httpchk
  3. 创建函数:语言Python-空白函数
  4. 创建函数:触发器-定时触发器:httpchk-trigger-时间间隔1分钟
  5. 创建函数:函数名称:httpchk-fc,
  6. 创建函数:代码方式:在线编辑
  7. 创建函数:函数执行内存:128MB(足足够用)

函数代码:

# -*- coding: utf-8 -*-import loggingimport requestsfrom aliyunsdkcore.client import AcsClientfrom aliyunsdkcore.request import CommonRequest# 待检测的网址,仅支持GET请求urls = ["https://www.baidu.com","http://www.mtain.top"]# 接收短信通知的手机号码phone = "180000000"# 阿里云短信接口相关信息accessKeyId = 'xxxx'accessSecret = 'xxxx'signName = 'xxxxx'templateCode = 'SMS_xxxx'logger = logging.getLogger()def handler(event, context):  for url in urls:    do_httpchk(url)def do_httpchk(url):  logger.info('检测网站:{}'.format(url))  try:    req=requests.get(url)    logger.info('网站:{}响应正常,返回数据长度:{}'.format(url,len(req.text)))  except Exception as e:    logger.error('网站:{}服务异常,{}'.format(url,e))    send_sms(url)    def send_sms(url):  client = AcsClient(accessKeyId, accessSecret, 'default')  request = CommonRequest()  request.set_accept_format('json')  request.set_domain('dysmsapi.aliyuncs.com')  request.set_method('POST')  request.set_protocol_type('https') # https | http  request.set_version('2017-05-25')  request.set_action_name('SendSms')      request.add_query_param('PhoneNumbers', phone)  request.add_query_param('SignName', signName)  request.add_query_param('TemplateCode', templateCode)  # 阿里云短信变量 [a-zA-Z0-9] 且 长度小于20  web_name = url.replace('https://','').replace('http://','').replace('.','-')[0:18]  request.add_query_param('TemplateParam', '{"code":"'+web_name+'"}')    response = client.do_action(request)  logger.info('Send SMS Response:'+str(response, encoding = 'utf-8'))

转载地址:http://ladxl.baihongyu.com/

你可能感兴趣的文章
面向过程,面向对象,函数式对同一个问题的思考方式
查看>>
盘点:抵御网络攻击哪国强?世界20强国排名
查看>>
混合“白+黑”名单方法是如何帮助企业加强安全的?
查看>>
中国网速竟不到泰国一半、香港的1/4!名副其实"华囧"
查看>>
4G和5G不配物联网 不过死撑
查看>>
SAP宣布将投资22亿美元发展物联网业务
查看>>
他用10年前的攻击手法感染了17000多名开发者的电脑
查看>>
IBM秀出并行训练肌肉:256个GPU还能有95%的拓展效率,顺便刷新ImageNet-22K记录
查看>>
报告称云计算可能会阻碍IT支出
查看>>
《程序员度量:改善软件团队的分析学》一公平和一致性
查看>>
移动医疗行业6大值得关注的玩家解析
查看>>
Facebook 开源 FAISS;MIT 开发 SDV 系统,将合成数据用于机器学习等 | AI 开发者头条...
查看>>
联合光伏一季度太阳能发电站发电44.45万兆瓦时 同比增长67.8%
查看>>
如何建立一个正确的安全架构去做正确的防御?
查看>>
《程序员度量:改善软件团队的分析学》一可重复的成功
查看>>
《Android应用开发攻略》——3.7 用Log.d和LogCat进行调试
查看>>
微软Windows 10浏览器上个月份额再度下跌
查看>>
互联网上的“罪恶之城”:40多国联合行动才端掉它
查看>>
33MW太阳能厂动工 日本福岛开启复兴之路
查看>>
再过22年,你是否还记得雅虎
查看>>