您现在的位置是:系统运维 >>正文
服务一挂就手忙脚乱?教你用 Amazon Lambda 打造 0 成本服务监控!
系统运维445人已围观
简介半夜两点,项目挂了,用户爆炸,老板狂打电话,而我还在被窝里做着发财梦。等我早上起来,满群的“为啥服务又挂了”,我只能默默截图:“xx云服务器昨晚 01:12 服务异常,目前已恢复。”然后附上一句,不关 ...
半夜两点,服务项目挂了,挂手用户爆炸,忙脚老板狂打电话,乱教而我还在被窝里做着发财梦。造成等我早上起来,本服满群的服务“为啥服务又挂了”,我只能默默截图 :
“xx云服务器昨晚 01:12 服务异常 ,挂手目前已恢复 。忙脚” 然后附上一句,乱教不关我的造成事 ,别cure我~
当然,本服以上只是服务一个故事,但这种事故场景确实是高防服务器挂手真实存在的。有没有办法,忙脚不花钱 、不中断 、无感知地自动监控服务状态 ?当然有 !
于是乎,我用 Amazon Lambda + 企业微信机器人 ,整了个不睡觉的“云保安” ,全天候巡逻 ,一旦服务出事,立马通知 !
你问我为什么选 Amazon Lambda?人家永久免费,你说用不用🤣,服务器租用指路链接(https://aws.amazon.com/cn/free?trk=1d5b0612-9214-4807-ab63-5a7c55dc9f0f&sc_channel=sm)
我想解决什么问题?
作为一个经常自己折腾项目的程序员 ,我有一些部署在云端的服务 :
有些是副业项目;有些是 demo / side project;还有些……已经没人用了 ,但我还在维护 🙃我不想 24 小时盯着日志和监控 ,也不想为了几个小项目再跑一套复杂的监控系统。
我只想做到一件事:
“如果某个服务挂了,我能第一时间知道。”
所以我想做一个「定时检测 + 宕机报警」的系统 ,目标是:
每隔 60 秒 ping 一次目标服务;服务正常就啥也不干;服务宕了就通过企业微信发个通知;全自动、无服务器 、云计算0 运维 、最好不花钱。为什么是 Amazon Lambda?
如果你不想部署一台服务器全天候 ping 接口,那 Amazon Lambda 是你的最佳选择:
优点
说明
无服务器
不用管部署,写完代码直接丢上去
定时触发
搭配 EventBridge ,可轻松设置每分钟定时任务
免费额度
每月有 100 万次调用免费额度 ,且永久免费 ,用不完 ,根本用不完
所以,我的方案就是 :Amazon Lambda + 企业微信 Webhook,轻轻松松实现“云保安” 。源码库
图片
先去 亚马逊云科技官网(https://aws.amazon.com/cn/free?trk=1d5b0612-9214-4807-ab63-5a7c55dc9f0f&sc_channel=sm),点击右上角注册账号,关键流程如下:
手机号 、账单信息可以直接用国内资料填写;选择基础支持计划(无需额外开支);注册完成后等待身份验证通过,即可开始使用资源。
图片
系统架构
继续回到我们的主线任务 ,来看看整体流程是怎样的 。
复制[EventBridge](定时每分钟触发) ↓ [Lambda 函数] ↓ 向服务发起 HTTP 请求 ↓ 如果状态码异常 or 超时 ↓ POST 报警消息 → 企业微信群1.2.3.4.5.6.7.8.9. 每分钟巡逻一次(EventBridge 支持最小间隔为 1 分钟)如果你想做到 30 秒级别,可以设置两个定时规则交错触发 ,或者在函数内部循环等待执行(建议设置两个 ,可以减少资源占用) 。以此类推 ,你也可以设置更短的源码下载触发频率。核心代码
我这里用的是比较方便的Python ,你也可以用 Node.js 、Java、Go 来写这个 Lambda。
复制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) ifnot 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: return200 <= 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: returnFalse 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({ }, { })1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.55.56.57.58.59.60.61.62.63.64.65.66.67.68.69.70.71.72.73.74.75.76.77.78.这段代码我已经在本地环境调试过了,没啥问题 ,但是日志我没做配置,只会打印waring级别以上的日志:
图片
部署步骤
登录亚马逊云科技 → 打开 Lambda 控制台(https://console.aws.amazon.com/lambda)。免费模板创建一个新的 Lambda 函数,选择对应的运行环境,我这里是Python 。把上面代码贴进去(记得改下配置项) ,设置超时时间(比如 10 秒)。创建一个 Amazon EventBridge 规则,设置为 rate(1 minute)。配置发送提醒的 webhook ,我这里用的企微机器人,你也可以改成用邮件发送,这个没啥影响 。完事 !你就等着收报警信息吧 !
图片
算算成本
以每分钟检测一次服务为例 :
60分钟 * 24小时 * 31 天 = 44640 次调用Amazon Lambda 免费额度是 100 万次/月免费的就足够了,毫无压力 ,甚至你可以把检测频率调整到 5 秒一次 ,那也只需要 89万多次调用 ,够够的。
最后
这个“Amazon Lambda 监控小助手”部署下来,不花钱,不占资源 ,不需要维护 ,关键时刻却能发挥大作用。
副业党 、独立开发者 、轻量项目用户都挺适用的。建议赶紧动手试一下,把你的服务监控“托付给云”。
Tags:
转载:欢迎各位朋友分享到网络,但转载请说明文章出处“信息技术视野”。http://www.bziz.cn/html/162b399834.html
相关文章
为什么要备份 GitHub、GitLab 或 Bitbucket——数据丢失的风险
系统运维如果您的组织使用 GitHub、GitLab 和 Bitbucket 等版本控制系统,您可能会意识到作为知识产权的代码是您公司内部最宝贵的资产——您和您的团队花费了数千小时(和金 ...
【系统运维】
阅读更多《2023年全球云威胁报告》:90%的安全供应链实则并不安全
系统运维近日,云安全公司Sysdig发布了《2023年全球云威胁报告》,研究了瞄准垂直行业的针对性云攻击,结果发现云攻击者正在通过利用云服务和常见的错误配置,以复杂的方式发展他们的技术和工具包。更重要的是,云 ...
【系统运维】
阅读更多公司应该知道的勒索软件攻击趋势和恢复策略
系统运维网络犯罪分子经常以网络安全措施薄弱、软件过时或员工在识别和防止网络钓鱼攻击方面培训不足的公司为目标。在本文中,你将找到我们在2023年涵盖的勒索软件攻击调查的摘录。使用这些数据,你的安全团队将获得有助 ...
【系统运维】
阅读更多
热门文章
最新文章
友情链接
- SKG抽油烟机质量评测(全面分析SKG抽油烟机的性能与可靠性)
- 探索SonyVaioVPCEA28EC的功能与性能(一款值得关注的笔记本电脑选择)
- 揭秘苹果耳机6s音质的绝佳表现(聆听细节世界,感受耳边的音乐奇迹)
- 康佳P2如何打造智能生活新体验(品质、智能与创新的完美结合)
- 数据中心电源的五大趋势
- 尼康D700(探索尼康D700的出色性能和多功能特点)
- 体验XboxOneX的卓越性能与极致画质(探索一台引领游戏娱乐新纪元的游戏机)
- 昇腾AI异构计算架构CANN 6.0全新开放升级,全面释放AI生产力
- 温莎资本(揭秘温莎资本的成功秘诀与发展战略)
- 宏基573安装Win7系统教程(详细步骤教您如何在宏基573上安装Windows7) 网站建设香港物理机源码库企业服务器亿华云云服务器b2b信息平台