服务一挂就手忙脚乱?教你用 Amazon Lambda 打造 0 成本服务监控!

半夜两点,项目挂了,用户爆炸,老板狂打电话,而我还在被窝里做着发财梦。等我早上起来,满群的"为啥服务又挂了",我只能默默截图:

"xx云服务器昨晚 01:12 服务异常,目前已恢复。" 然后附上一句,不关我的事,别cure我~

当然,以上只是一个故事,但这种事故场景确实是真实存在的。有没有办法,不花钱、不中断、无感知地自动监控服务状态?当然有!

于是乎,我用 Amazon Lambda + 企业微信机器人,整了个不睡觉的"云保安",全天候巡逻,一旦服务出事,立马通知!

你问我为什么选 Amazon Lambda?人家永久免费,你说用不用🤣,指路链接

我想解决什么问题?

作为一个经常自己折腾项目的程序员,我有一些部署在云端的服务:

  • 有些是副业项目;
  • 有些是 demo / side project;
  • 还有些......已经没人用了,但我还在维护 🙃

我不想 24 小时盯着日志和监控,也不想为了几个小项目再跑一套复杂的监控系统。

我只想做到一件事:

"如果某个服务挂了,我能第一时间知道。"

所以我想做一个「定时检测 + 宕机报警」的系统,目标是:

  • 每隔 60 秒 ping 一次目标服务;
  • 服务正常就啥也不干;
  • 服务宕了就通过企业微信发个通知;
  • 全自动、无服务器、0 运维、最好不花钱。

为什么是 Amazon Lambda?

如果你不想部署一台服务器全天候 ping 接口,那 Amazon Lambda 是你的最佳选择:

优点 说明
无服务器 不用管部署,写完代码直接丢上去
定时触发 搭配 EventBridge,可轻松设置每分钟定时任务
免费额度 每月有 100 万次调用免费额度,且永久免费,用不完,根本用不完

所以,我的方案就是:Amazon Lambda + 企业微信 Webhook,轻轻松松实现"云保安"。

注册账号

先去 亚马逊云科技官网,点击右上角注册账号,关键流程如下:

  • 手机号、账单信息可以直接用国内资料填写;
  • 选择基础支持计划(无需额外开支);
  • 注册完成后等待身份验证通过,即可开始使用资源。

系统架构

继续回到我们的主线任务,来看看整体流程是怎样的。

plain 复制代码
[EventBridge](定时每分钟触发)
        ↓
[Lambda 函数]
        ↓
向服务发起 HTTP 请求
        ↓
如果状态码异常 or 超时
        ↓
POST 报警消息 → 企业微信群
  • 每分钟巡逻一次(EventBridge 支持最小间隔为 1 分钟)
  • 如果你想做到 30 秒级别,可以设置两个定时规则交错触发,或者在函数内部循环等待执行(建议设置两个,可以减少资源占用)。以此类推,你也可以设置更短的触发频率。

核心代码

我这里用的是比较方便的Python,你也可以用 Node.js、Java、Go 来写这个 Lambda。

python 复制代码
import json
import urllib.request
import logging
import time

# 日志配置
logger = logging.getLogger()
logger.setLevel(logging.INFO)

# 配置项
SERVICE_LIST = [
    "https://example.com/api/health",
    "https://another-api.com/status"
]

WEBHOOK_URL = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=your-key"

# 每个服务失败最多重试几次
MAX_RETRY = 3
RETRY_INTERVAL_SECONDS = 1  # 每次失败后等待时间(秒)

def lambda_handler(event, context):
    logger.info("开始服务健康检查")
    alerts = []

    for url in SERVICE_LIST:
        name = get_service_name(url)

        if not check_with_retry(url, MAX_RETRY):
            alerts.append(f"服务异常:{name}\n地址:{url}")
        else:
            logger.info(f"[{name}] 服务正常")

    for msg in alerts:
        send_alert(WEBHOOK_URL, msg)
        logger.info("报警信息已发送")

    logger.info("服务健康检查完成")
    return {
        'statusCode': 200,
        'body': json.dumps('Health check completed.')
    }

def check_with_retry(url, retries_left):
    try:
        with urllib.request.urlopen(url, timeout=3) as response:
            return 200 <= response.status < 300
    except Exception as e:
        logger.warning(f"[{url}] 检查失败,还剩 {retries_left - 1} 次机会,e:{e}")
        if retries_left > 1:
            time.sleep(RETRY_INTERVAL_SECONDS)
            return check_with_retry(url, retries_left - 1)
        else:
            return False

def send_alert(webhook_url, message):
    payload = {
        "msgtype": "text",
        "text": {"content": message}
    }
    data = json.dumps(payload).encode("utf-8")
    req = urllib.request.Request(
        webhook_url, data=data,
        headers={"Content-Type": "application/json"}
    )
    try:
        with urllib.request.urlopen(req) as res:
            logger.info(f"Webhook 响应状态:{res.status}")
    except Exception as e:
        logger.error(f"发送报警失败:{e}")

def get_service_name(url):
    return url.replace("https://", "").replace("http://", "").split("/")[0]


# 方便本地调试
if __name__ == "__main__":
    lambda_handler({}, {})

这段代码我已经在本地环境调试过了,没啥问题,但是日志我没做配置,只会打印waring级别以上的日志:

部署步骤

  1. 登录亚马逊云科技 → 打开 Lambda 控制台
  2. 创建一个新的 Lambda 函数,选择对应的运行环境,我这里是Python。
  3. 把上面代码贴进去(记得改下配置项),设置超时时间(比如 10 秒)。
  4. 创建一个 Amazon EventBridge 规则 ,设置为 rate(1 minute)
  5. 配置发送提醒的 webhook,我这里用的企微机器人,你也可以改成用邮件发送,这个没啥影响。
  6. 完事!你就等着收报警信息吧!

算算成本

以每分钟检测一次服务为例:

  • 60分钟 * 24小时 * 31 天 = 44640 次调用
  • Amazon Lambda 免费额度是 100 万次/月

免费的就足够了,毫无压力,甚至你可以把检测频率调整到 5 秒一次,那也只需要 89万多次调用,够够的。

最后

这个"Amazon Lambda 监控小助手"部署下来,不花钱,不占资源,不需要维护,关键时刻却能发挥大作用

**副业党、独立开发者、轻量项目用户都挺适用的。**建议赶紧动手试一下,把你的服务监控"托付给云"。

最后,如果你觉得这篇文章对你有帮助,点个赞或者分享给朋友,蟹蟹!

友情提示:如果探索完了之后不再需要使用服务的话,记得要在控制台关闭服务,以防超过免费额度产生扣费

相关推荐
llz_1121 小时前
web-第二次课后作业
前端·后端·web
红尘散仙7 小时前
我把终端小说阅读器接上了 AI Agent:TRNovel 现在能用 skill 生成书源了
人工智能·后端·rust
卷毛的技术笔记8 小时前
告别硬编码!Spring AI Alibaba 实现 AI Agent 智能工具调用(Tool Calling)
java·人工智能·后端·python·spring·ai编程
会编程的土豆9 小时前
Go 语言反射(Reflection)详解
开发语言·后端·golang
喵个咪9 小时前
GoWind Toolkit Go后端代码生成 完整全流程实战
后端·go·orm
basketball6169 小时前
Go 语言从入门到进阶:4. 数组和MAP使用方法总结
开发语言·后端·golang
qq_2518364579 小时前
SpringBoot+Vue 共享电池柜管理系统 完整实现 前后端分离项目实战 完整代码
vue.js·spring boot·后端
zhangxingchao10 小时前
AI 大模型核心六:量化、Workflow 与 Agent、多轮 RAG
前端·人工智能·后端
IT_陈寒11 小时前
Vite打包时遇到的坑,原来问题出在这里
前端·人工智能·后端
ayqy贾杰12 小时前
基层管理的三板斧,在AI时代行不通了
前端·后端·团队管理