基于腾讯云Serverless的HTTP服务探活函数

本文基于 Golang 开发了一款简单易用的 HTTP 拨测云函数,入口函数与腾讯云 Serverless SCF SDK 绑定。与目前腾讯云中默认的拨测函数不同的是, url-tester-func 支持将非 200 响应码作为预期值且通知机制由邮件变更为了 Telegram Bot 。使用者借助腾讯云提供的免费 Serverless 调用配额即可搭建一套简单的 HTTP 接口探活服务。

功能

  • 周期性探测指定 HTTP 地址是否可正常响应,并将非正常的探测结果发送至指定即时通讯工具的对话中以实现近乎实时地异步监控网站状态
  • 支持将 Telegram/Server酱 V1(微信)/Server酱 V2(微信)/Qmsg酱 (QQ,支持单聊及群聊)
  • 可识别的包含 Bot 信息的自定义 User-Agent (url-tester-func BOT)
  • 基于腾讯云 Serverless SCF ,部署简单且用量小时零成本(具体成本见下文费用说明)

项目地址

MrEasonYang/url-tester-func
中文文档

使用

填写函数配置

首先需要根据腾讯云文档创建 Serverless 函数的配置文件, 可参照如下示例配合文档进行配置: serverless.yaml

构建

本地安装 Golang 并构建项目:

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go

本地测试

参考腾讯云文档进行本地测试:腾讯云SCF说明

创建函数

在腾讯云中添加函数

在已注册腾讯云账号后,访问函数管理后台选择「自定义创建」来新建一个函数。配置可参考下图,「环境变量」参数在下文中会有详细描述,图中未展示的其他参数保持默认即可:

函数配置示例

需要注意的是,为了保证可正常访问 Telegram API ,函数的部署地域应选择中国大陆之外的区域。

配置环境变量

程序依赖腾讯云中的全局变量配置来获取目标 URL 集合配置和 Telegram API 配置,在腾讯云的管理平台中按如下格式设置即可:

  • config:
    配置结构:
    1. url: 测试的目标 URL
    2. expectedStatusCode: 期望 URL 返回的 HTTP 响应码,除此之外的相应码均将触发失败消息提醒。
    3. notifyMethod: 通知方式,应设置为 telegram/ftqq_v1/ftqq_v2/qmsg_chat/qmsg_group_chat 中的某一个。

示例:

[
    {
        "url": "<Target URL 1 with Telegram Notifier>",
        "expectedStatusCode": 200,
        "notifyMethod": "telegram"
    },
    {
        "url": "<Target URL 2 with FtqqV1 Notifier>",
        "expectedStatusCode": 403,
        "notifyMethod": "ftqq_v1"
    },
    {
        "url": "<Target URL 3 with FtqqV2 Notifier>",
        "expectedStatusCode": 400,
        "notifyMethod": "ftqq_v2"
    },
    {
        "url": "<Target URL 4 with Qmsg Notifier>",
        "expectedStatusCode": 301,
        "notifyMethod": "qmsg_chat"
    },
    {
        "url": "<Target URL 4 with Qmsg Group Notifier>",
        "expectedStatusCode": 200,
        "notifyMethod": "qmsg_group_chat"
    },
]
  • telegram_token(使用 Telegram 时必填): Telegram 机器人的 API Token ,在创建机器人时 BotFather 会直接以消息形式返回,可参考官方 FAQ 来获取
  • telegram_chat_id(使用 Telegram 时必填): 消息发送的目标聊天(群),必须已经与 Telegram 机器人绑定,可参照 Telegram 文档从其 updates 接口中获取,可参考此文获取
  • qmsg_key(使用 Qmsg酱时必填): Qmsg酱 key
  • ftqq_v1_key(使用 V1 版本 Server酱时必填): Server酱 V1 send key, 由于 Server酱已关闭 V1 key 的获取入口,所以实际上只有已持有 V1 send key 的老用户才能使用本渠道。
  • ftqq_v2_Key(使用 V2 版本 Server酱时必填): Server酱 V2 send key

上传代码

使用上传 ZIP 压缩包(推荐)的方式将包含构建后程序的函数目录完整上传至平台。

添加定时触发器

在函数的「触发管理」中新建一个「定时触发器」,规则可根据需求定制。例如如果你希望探测函数每 5 分钟运行一次,则进行下图的配置:


定时器示例

运行

当目标服务按预期正常响应时程序将在每次执行后返回成功 JSON 结果,否则程序将借由绑定的 Telegram Bot 发送如下格式的消息至目标聊天中,消息内容将包含拨测失败的错误内容:

Failed to test URL https://foo.foo due to error Get "https://foo.foo": dial tcp: lookup foo.foo on 10.10.10.10:53: read udp 10.10.10.10:5180->10.10.10.10:53: i/o timeout

Todo

未来还考虑支持腾讯云之外的 Serverless 平台,包括但不限于:

  • 阿里云 Serverless
  • AWS Lambda
  • Azure Serverless
  • GCP Serverless

贡献代码

欢迎大家通过 PR 的形式来完善本工具或加入新的想法,PR 形式不限,提 PR 前做好 lint 即可。

费用说明

在实际使用中,是否会产生费用其实是与探测的「地址数量」和探测的「频次」是正相关的。

腾讯云 SCF 在公测结束后,对免费额度进行了调整,本工具比较容易触发的费用模式主要是「外网出流量计费」,可以参考官方的文档

由于外网出流量计出不计入,所以探测的逻辑中只有在发起 HTTP 请求时会被计量,接收响应则不会。因此在「地址数量」和「频次」均不高的时候,造成的费用非常低,在账单中会被校准为 0 元。但大规模使用的场景下则会累积较大量的外网出流量,造成事实上的费用,目前的费用标准是 0.8 元/GB 。

那么用量的「高」和「低」该如何判断呢?这里以我个人的使用经验来给大家举例作为参考:

  • 函数量:1 个
  • 监测地址数:5 个
  • 监测频次:每 5 分钟请求一次
  • 发送 TG 量:由于我手下有个站点不太稳定,通常一个月会产生 100+ 的发送量

腾讯云账单如下,即产生 0.06 元费用,校准后实际收费为 0 元:


腾讯云账单

大家可以此为根据,假设流量和示例是线性关系来判断自己的用量是否会产生费用。

协议

MIT

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,602评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,442评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,878评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,306评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,330评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,071评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,382评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,006评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,512评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,965评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,094评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,732评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,283评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,286评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,512评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,536评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,828评论 2 345

推荐阅读更多精彩内容

  • Service酱 直达官网[http://sc.ftqq.com/3.version] (service酱最新支持...
    NIX阅读 3,062评论 0 1
  • 16宿命:用概率思维提高你的胜算 以前的我是风险厌恶者,不喜欢去冒险,但是人生放弃了冒险,也就放弃了无数的可能。 ...
    yichen大刀阅读 6,033评论 0 4
  • 公元:2019年11月28日19时42分农历:二零一九年 十一月 初三日 戌时干支:己亥乙亥己巳甲戌当月节气:立冬...
    石放阅读 6,870评论 0 2