利用无服务器架构中提供的定时触发能力,在运维监控场景有很多种用处,例如定时备份、定时拨测、定时统计等。在互联网业务监控运维的场景下,我们通常可以利用定时拨测,检测系统或服务的健康状态,并在系统异常的情况下及时发出告警,避免造成业务中断。

接下来,我们就利用无服务器云

代码准备

测试脚本比较简单,通过单文件就可以完成。我们可以通过将如下代码保存为 index.py 文件,或者直接将代码复制后粘贴到编辑窗口的方式完成函数创建。

# -*- coding: utf8 -*-

import json

import logging

import requests

from email.mime.text import MIMEText

from email.header import Header

import smtplib

import os

logger = logging.getLogger()

logger.setLevel(logging.DEBUG)

#logger.addHandler(logging.StreamHandler())

test_url_list = [

"http://www.baidu.com",

"http://www.qq.com",

"http://cloud.tencent.com",

"http://unkownurl.com"

]

email_server_config = {

"server":"smtp.qq.com",

"port":465,

"user":"3473058547@qq.com",

"pwd":os.getenv("EMAIL_PWD"),

"fromAddr":"3473058547@qq.com"

}

email_notify_list = [

"3473058547@qq.com"

]

def send_mail(toAddrList,subject,content):

logger.info("send mail")

try:

receivers = toAddrList

message = MIMEText(content, 'plain', 'utf-8')

message['From'] = Header("自动拨测", 'utf-8')

message['To'] = Header("异常通知接收", 'utf-8')

message['Subject'] = Header(subject, 'utf-8')

smtpObj = smtplib.SMTP_SSL(email_server_config["server"], email_server_config["port"])

#smtpObj = smtplib.SMTP(email_server_config["server"], email_server_config["port"])

smtpObj.login(email_server_config["user"],email_server_config["pwd"])

smtpObj.sendmail(email_server_config["fromAddr"], receivers, message.as_string())

logger.info("send success")

except Exception as e:

logger.warn(str(e))

logger.warn(type(e))

logger.warn("Error: send fail")

def test_url(url_list):

errorinfo = []

for url in url_list:

resp = None

try:

resp = requests.get(url,timeout=3)

except (requests.exceptions.Timeout, requests.exceptions.ConnectionError, requests.exceptions.ConnectTimeout) as e:

logger.warn("request exceptions:"+str(e))

errorinfo.append("Access "+ url + " timeout")

else:

if resp.status_code >= 400:

logger.warn("response status code fail:"+str(resp.status_code))

errorinfo.append("Access "+ url + " fail, status code:" + str(resp.status_code))

if len(errorinfo) != 0:

send_mail(email_notify_list,"拨测异常通知","\r\n".join(errorinfo))

def main_handler(event, context):

test_url(test_url_list)

if __name__ == '__main__':

main_handler("", "")

在这段代码里,我们需要拨测的地址放置在 test_url_list 列表中,并在拨测时,通过 GET 方法发起调用。在发起调用后,无论是 URL 访问超时,还是返回的 HTTP 状态码错误,均会记录 URL 拨测结果,并通过 Email 发送出来。而 Email 的发送配置,我们存储在 email_server_config 中,并且从环境变量中获取 Email server 的登录密码,避免在代码中暴露密码的泄露风险。同时,通知邮件的接收者,通过 email_notify_list 这个列表保存,向这个列表中添加更多的邮件地址,可以确保更多相关人员在拨测到异常时,接收到告警邮件。

同时,这段代码中的邮件服务器使用的是 QQ 邮箱。QQ 邮箱的 SMTP 邮件发送服务,可以在邮箱的设置-账号中开启,并且在开启 SMTP 服务后,可以通过申请授权码,作为邮箱的登录账号使用。

云函数配置

接下来,我们通过创建函数,配置触发,让拨测可以正常的运行起来。

创建及配置函数

首先我们来创建和配置函数。创建前,我们可以先选择合适的地域来部署函数,甚至可以选择为多地域同时部署,检验多地发起拨测时的联通性。选择好地域后,我们创建函数,输入函数名,选择运行环境为 Python 2。同时,函数的运行超时也需要一定程度的放大,例如设置为 60s,避免因为拨测时 URL 访问超时导致的函数运行超时,无法正常发出邮件。同时在创建函数时,我们也需要配置好函数的环境变量,设置 EMAIL_PWD 环境变量名,并填写通过邮箱配置获得的登录授权码,或登录密码。

在函数代码界面,可以通过把本地已经存储的 index.py 文件夹打包成 zip 包,然后上传的方式提交代码,也可以通过直接在代码编辑窗口粘贴如上代码的方式,完成代码提交和保存。

在配置触发器时,我们可以先跳过这个步骤,完成函数运行测试后再配置定时触发器启动函数。

测试及启动函数

完成函数创建后,我们可以通过 "测试" 案例触发函数,查看运行情况。拨测函数未处理函数入参,因此任何测试入参,或者无入参都可以触发函数。通过测试时的输出日志,我们可以查看拨测结果,邮件发送情况。

通过日志确认函数运行正确后,我们就可以根据需求配置上触发器,开始函数的定时拨测运行。最简单的可以通过选择每 5 分钟运行一次来进行拨测,如果有特殊的定时运行需求,也可以通过自行填写 cron 格式来选择合适的运行触发时间或周期。

总结

通过本节内容,我们实现了一个简单的 URL 拨测及邮件告警的定时运行脚本。本节内容的实现方式很简单,例如拨测的 URL 、邮件告警发送方,都是直接保存在代码中;URL 仅能通过 GET 方法进行拨测;仅支持通过 Email 发送告警等。此内容更多的是为大家提供使用 Serverless 架构或者使用云函数的一种思路,基于此思路,我们可以进行更多的扩展,例如增加非 HTTP 的拨测、增加短信告警能力、增加外部配置能力等。基于此思路,欢迎大家继续扩展并分享在运维过程中使用云函数的经验。

注明:本文来自投稿,不代表服务器文档网立场,如若转载,请注明出处:https://www.fwqwd.com/12868.html

服务器http协议拨测状态告警,使用 SCF 无服务器云函数定时拨测站点并邮件告警...相关推荐

  1. 【笔记】《由浅入深SCF无服务器云函数实践》

    <由浅入深SCF无服务器云函数实践> 学习笔记 来源:DockOne技术交流群分享 主办方:dockone.io 地点:DockOne技术交流群 时间:2017年12月26日晚8:30 分 ...

  2. http拨测是什么意思_腾讯云拨测使用常见问题汇总

    常见问题 1.站点监控都支持哪些协议,其适用场景是什么? 答:站点监控目前支持HTTP(S),TCP,PING,UDP,SMTP和FTP7种协议. HTTP(S):监控Web站点的服务质量 TCP:监 ...

  3. 客户端请求服务器的协议,电骡协议规范-第二章-客户端和服务器TCP通讯

    每个客户端用 TCP 连接到具体的服务器.服务器给客户端分配一个 ID ,这个 ID 用来标示其后与服务器的会话中该客户端(高 ID 客户端总是按照它的 IP 地址来分配).电骡 GUI 客户端为了运 ...

  4. B站服务器数据协议,阴阳师手游数据互通 B站服务器合服公告一览

    阴阳师手游数据互通 B站服务器合服公告一览,阴阳师手游B站服务器合服公告内容带给大家,包括了亲密无间.情深谊长.情意相投.两心无间这四个服务器进行数据互通,下面是补偿奖励和注意事项. 为提升部分服务器 ...

  5. slack通知本地服务器_通过构建自己的Slack App学习无服务器

    slack通知本地服务器 Serverless architecture is the industry's latest buzzword and many of the largest tech ...

  6. aws消息服务器,经验分享:我们如何使用AWS构建无服务器架构 - hypertrack

    我们的客户使用HyperTrack无需服务器即可访问实时位置.他们将我们用作实时位置的托管服务.他们不需要构建和管理服务器来摄取,处理,存储,提供和管理与其应用用户的实时位置相关的任何内容. 而我们自 ...

  7. azure服务器_如何使用Azure Functions和SendGrid构建无服务器报表服务器

    azure服务器 It's 2018 and I just wrote a title that contains the words "Serverless server". L ...

  8. 云拨测助力节卡机器人,全面优化海外网站性能

    简介:[案例分享·云拨测]借助云拨测,节卡机器人有效挖掘性能瓶颈,经过优化,提升网站打开速度 50% 以上,提高了运营推广活动的 ROI,帮助节卡为全球用户提供更加优质的服务! 作者|白玙​ 作为国际 ...

  9. android 拨测软件,通信网络性能管理系统中电话自动拨测技术的实现

    摘要: 当今世界,无线通信技术已经非常普遍,通信网络的覆盖区域越来越广,无线通讯技术的飞速发展为我们的生活带来了极大的便利.通信网络结构趋于复杂,伴随着通信网络使用的设备也趋于复杂,所以如何进行有效地 ...

最新文章

  1. Java使用JAX-WS来写webservice时 Unable to create JAXBContext
  2. Lesson 14.1 数据归一化与Batch Normalization理论基础
  3. python帝国cms_Python的类
  4. c语言for要分号错误,c语言for语句
  5. Codeforces Round #721 (Div. 2)
  6. kafka java编程demo_Kafka简单客户端编程实例
  7. 初学者是学习 C 语言还是 C++ 好?各有何利弊?
  8. python gevent asyncio_python用from gevent import monkey; monkey.patch_all()之后报ssl等错误
  9. 【Luogu1182】数列分段Section II(二分)
  10. 用mysql做宠物商店项目_使用Java实现数据库编程 项目(宠物商店)
  11. PAT简介和2019年秋季浙大PAT考试报名流程
  12. JS时间的计算,剩余时间的计算
  13. EA游戏Battlefield 2(战地风云2) 单机地图简介
  14. C# Winform控件贴透明png图片遇到的问题
  15. |app自动化测试之Appium问题分析及定位
  16. 编程会像手机拍照一样傻瓜
  17. 实时全局光照RSM-Reflective Shadow Maps(RSM)
  18. MATLAB算法实战应用案例精讲-【回归算法】偏最小二乘回归(PLS)(附MATLAB、R语言和Python代码)
  19. OV7620摄像头使用
  20. Debian的BIND9的配置

热门文章

  1. 区块链:权益证明与错误的工程思维
  2. Ubuntu18.04用Zed结合yolo进行目标检测
  3. css层叠样式表盒子模型,CSS层叠样式表-盒子模型
  4. c++ perror() 函数
  5. NLP实践(新闻文本分类)-数据读取与数据分析
  6. 基于matlab的脑瘤mr图像处理_MRI图像的脑肿瘤分割方法研究
  7. FATE联邦学习框架之KubeFATE部署(基于K8S)最详细过程
  8. 升讯威微信营销系统开发实践:(1)功能概要与架构设计( 完整开源于 Github)...
  9. 基于51单片机空气质量检测超限报警Proteus仿真
  10. 集合运算法则与运算律