服务一挂就手忙脚乱?教你用 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 监控小助手"部署下来,不花钱,不占资源,不需要维护,关键时刻却能发挥大作用

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

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

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

相关推荐
expect7g11 分钟前
Flink-Checkpoint-1.源码流程
后端·flink
00后程序员17 分钟前
Fiddler中文版如何提升API调试效率:本地化优势与开发者实战体验汇总
后端
用户81221993672243 分钟前
C# .Net Core零基础从入门到精通实战教程全集【190课】
后端
bobz96544 分钟前
FROM scratch: docker 构建方式分析
后端
lzzy_lx_20891 小时前
Spring Boot登录认证实现学习心得:从皮肤信息系统项目中学到的经验
java·spring boot·后端
前端付豪1 小时前
21、用 Python + Pillow 实现「朋友圈海报图生成器」📸(图文合成 + 多模板 + 自动换行)
后端·python
MaxHua2 小时前
以 AI 之力重塑 Java 研发,解锁高效开发新范式
后端
Determined_man2 小时前
多了这个@ResponseBody和没加有什么区别?
后端
八苦2 小时前
VKProxy新增一些功能
后端