惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The Cloudflare Blog
U
Unit 42
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
腾讯CDC
罗磊的独立博客
博客园 - 聂微东
博客园_首页
雷峰网
雷峰网
云风的 BLOG
云风的 BLOG
Jina AI
Jina AI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
D
DataBreaches.Net
The GitHub Blog
The GitHub Blog
人人都是产品经理
人人都是产品经理
Y
Y Combinator Blog
量子位
Microsoft Azure Blog
Microsoft Azure Blog
阮一峰的网络日志
阮一峰的网络日志
小众软件
小众软件
月光博客
月光博客
T
The Exploit Database - CXSecurity.com
Google DeepMind News
Google DeepMind News
H
Help Net Security
O
OpenAI News
Blog — PlanetScale
Blog — PlanetScale
S
Security Affairs
S
Security @ Cisco Blogs
Microsoft Security Blog
Microsoft Security Blog
T
The Blog of Author Tim Ferriss
AI
AI
MongoDB | Blog
MongoDB | Blog
G
Google Developers Blog
MyScale Blog
MyScale Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
D
Docker
Hugging Face - Blog
Hugging Face - Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
S
Schneier on Security
Cloudbric
Cloudbric
H
Heimdal Security Blog
J
Java Code Geeks
N
News and Events Feed by Topic
Hacker News - Newest:
Hacker News - Newest: "LLM"
宝玉的分享
宝玉的分享
有赞技术团队
有赞技术团队
S
SegmentFault 最新的问题
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
爱范儿
爱范儿
I
Intezer
GbyAI
GbyAI

博客园 - 一名程序媛呀

Anki插件开发必知必会:钩子函数与右键菜单定制 httpx 传参总报错?这次把 GET、POST、文件上传到响应处理的坑给你一次填平 从卡顿到丝滑:FastAPI 调用外部 API 的正确姿势(httpx 实战) 还在 XHR、Fetch 和 Axios 之间纠结?我踩过的坑,希望你一个都不用碰到 你的REST接口还在“过度投喂”数据吗?——FastAPI + GraphQL实战避坑指南 Uvicorn、Gunicorn 傻傻分不清?FastAPI 生产部署避坑指南 Termux里的二进制和脚本,到底怎么运行才不踩坑?Termux-service 保活妙招! 刚部署的 LibreTranslate 频频翻车?我掏出了 20 年前的 StarDict 词典,用 FastAPI 搭了个本地词典翻译 API 别再用网页翻译看源码了!你的私人翻译神器LibreTranslate,部署避坑指南来了 掏出手机就能搭个 WebDAV 同步服务器?这操作有点香 别只盯着GitBook了!这个文档神器让你的笔记秒变网站 写爬虫时用了代理还被封?Python 代理的那些隐藏坑,我替你踩明白了 FastAPI 身份验证总踩坑?这份 FastAPI Users “避坑指南”请收好 旧手机别扔!用 Termux 搭个私人云盘,比网盘香多了 你的FastAPI又在服务器上“跑不起来”了?来,今天咱把打包这件事彻底聊透 写页面时别再把 Element Plus 整个搬进来啦!Vue3按需加载的坑我帮你踩平了 前端包管理咋选?我从npm叛逃到pnpm的血泪史(附避坑指南) 聊聊 fetch 使用中我踩过的那些坑和正确打开方式 FastApiAdmin 后端接口开发好了,前端管理界面怎么调用与显示? 给 FastApiAdmin 加个“会议纪要”模块,我把后端二次开发的坑踩了个遍 我用了FastApiAdmin后,连夜把踩过的坑都整理出来了 告别 Typora 后的新欢:我把所有笔记迁移到了 Obsidian 这个“第二大脑” 你的Agent API还在裸奔?从认证到沙箱,我用FastAPI搭了几道防线 让 FastAPI Agent 思考不阻塞:手把手教你实现异步任务与后台处理方案 让FastAPI Agent真正记住你:聊聊会话记忆与持久化存储的落地实践 FastAPI Agent 函数调用实战:我让 AI 学会了“自己动手查天气“ 初探:用 FastAPI 搭建你的第一个 AI Agent 接口 FastAPI 少有人提的实用技巧:把 Depends 依赖提到路由层,代码少写60% FastAPI 生产环境静态文件完全指南:从 /favicon.ico 404 到 HSTS 混合内容,一次全根治 用了loguru我才明白,Python日志还能这么写 FastAPI 后台任务:BackgroundTasks 的使用场景与注意事项 FastAPI配置管理避坑指南:从硬编码到 .env 与 pydantic_settings 类,连路由用法都给你捋清楚 FastAPI 文件上传避坑全指南:分块存盘、类型校验与安全兜底 FastAPI + Pydantic 模型终极实战手册:从能跑就行到固若金汤,这些技巧你一定用得上 FastAPI + SQLAlchemy 2.0 通用CRUD操作手册 —— 从同步到异步,一次讲透 FastAPI订单防超卖实战:从数据库锁到Saga分布式事务,这一篇给你理清了 FastAPI 生产环境避坑指南:用 Alembic 管理数据库迁移,别再手动改表结构了! FastAPI服务半夜又挂了?先别急着重启,查查你的数据库连接池“池子”是不是漏了 FastAPI数据库ORM怎么选?我肝了三个Demo后,终于不再纠结了 Vue 3 组件通信,别只会用 Props 和 Emits 了,这几个狠活儿你得看看 Vue 3 组合式 API 香是香,但从Vue2迁移时你可别像我当初一样踩进这 3 个深坑里 我用fastapi-scaff搭了个项目,两天工期缩到两小时,老板以为我开挂了 FastAPI+Vue:文件分片上传+秒传+断点续传,这坑我帮你踩平了! FastAPI自动生成的API文档太丑?我花了一晚上把它改成了客户愿意付费的样子 告别手写 API 胶水代码:FastAPI 与 Vue 的“契约自动机” OpenAPI 实战 FastAPI + Vue 前后端分离实战:我的项目结构“避坑指南” FastAPI + Celery 实战:异步任务里调用 Redis 和数据库的全解析,及生产级组织方案 FastAPI里玩转Redis和数据库的正确姿势,别让异步任务把你坑哭了! FastAPI + Celery 实战:异步任务的坑与解法,我帮你踩了一遍 FastAPI子应用挂载:别再让root_path坑你一夜 别再数据线了!用FastAPI 5分钟搭个局域网文件+剪贴板神器 FastAPI单元测试实战:别等上线被喷才后悔,TestClient用对了真香! FastAPI状态共享秘籍:别再让中间件、依赖和路由“各自为政”了! FastAPI实战:WebSocket vs Socket.IO,这回真给我整明白了! 从0到1,FastAPI + PostgreSQL + Tortoise ORM 实战避坑指南 FastAPI + PostgreSQL 实战:给应用装上“缓存”和“日志”翅膀 FastAPI + PostgreSQL 实战:从入门到不踩坑,一次讲透
FastAPI项目半夜报警吵醒你?聊聊告警这事儿怎么搞!
一名程序媛呀 · 2026-03-27 · via 博客园 - 一名程序媛呀

你是不是也遇到过这种事儿?周末正嗨皮呢,手机突然跟抽风一样震动,一看,监控系统告警:“服务不可用!”

然后你火急火燎打开电脑,一顿操作猛如虎,最后发现... 呃,只是数据库连接池满了重启了一下?或者更惨,是隔壁老王部署新服务把你端口给占了?

好,咱们今天不聊那些高大上的、复杂的运维平台,就聊聊咱们用FastAPI写的小破站,怎么给它配一个靠谱的“守夜人”,让它出问题能第一时间通知你,而不是让你从用户的骂声中后知后觉。这篇绝对是实战派,我自己踩过的坑,一个不落全抖出来!

🎯 核心摘要:这篇文章能帮你解决什么?

读完这篇文章,你会明白:

1. 为什么你的服务器“死”了,你却是最后一个知道的;

2. 从零到一,给FastAPI项目添加告警的几种“土办法”和“洋办法”;

3. 每种方法的优缺点,以及我这个踩坑专业户的真心推荐。保证你看完就能动手,不用再看那些又臭又长的官方文档。

🤔 第一部分:问题出在哪?为什么需要告警?

咱们写代码的,尤其是全栈,容易陷入一种迷之自信:“我代码写得这么稳,怎么可能崩?”
但现实是,服务器崩的原因千奇百怪,跟你代码关系不大。比如:内存爆了、磁盘满了、网络断了、上游API挂了,甚至机房空调坏了(别笑,这事真有)。

你可能会问:“我盯着日志不行吗?” 行,但你得24小时不眨眼地盯着。所以我们需要的,是一个能自动探测、自动判断、自动喊你起床的系统。

🛠️ 第二部分:核心原理与实现方式

说白了,告警的本质就是“问”和“答”
你的监控系统定期问一下你的服务:“嘿,哥们儿,还活着没?” 你的服务得回答:“活着呢,一切正常。” 如果问了几次都没回应,或者回应说“我快不行了”,监控系统就开始疯狂给你发消息。

方式一:躺平式(日志监控) —— 最原始,但最实用。

- 原理:通过ELK(Elasticsearch, Logstash, Kibana)或类似的日志系统,监控日志里的ERROR级别关键字,一旦出现,就触发告警。

- 优点:全面,不仅能发现服务挂了,还能发现业务异常(比如支付接口频繁报错)。

- 缺点:配置复杂,ELK全家桶部署和维护起来,够你喝一壶的。而且,如果服务直接起不来,连日志都打不出来,它就抓瞎了。

方式二:简单粗暴式(健康检查端点) —— FastAPI的亲儿子。

- 原理:在你的FastAPI应用里,加一个 /health /ping 接口,它只负责返回200状态码和一个简单的JSON,比如 {"status": "ok"}。然后让外部监控系统(比如Uptime Robot,或者云服务商的负载均衡器)每隔一分钟去请求一下这个接口。

- 优点:轻量、简单、极易实现。只需要几行代码。是判断服务“死活”最直接的方式。

- 缺点:只能判断死活,无法判断好坏。比如数据库连不上了,你的/health接口可能还能返回200,因为它没连数据库,但业务已经废了。

方式三:全知全能式(三方APM/监控服务) —— 付费版,省心省力。

- 原理:使用如 Sentry(侧重错误追踪)、New RelicDatadog 这类商业APM工具,它们会直接集成到你的FastAPI代码里,上报性能指标、错误堆栈、甚至数据库查询耗时,并内置了智能告警规则。

- 优点:省事、智能、信息丰富。不仅能告诉你服务挂了,还能告诉你挂的原因,甚至精确到是哪一行代码导致的。

- 缺点:要钱(但通常有免费额度),并且有一定侵入性,需要在代码里加SDK。

💻 第三部分:实战演示!用FastAPI做最简单的健康检查

来,咱们先动手做一个最基础的,也是我个人最喜欢的“轻量级”方案:健康检查端点 + 外部监控。这里千万别学我当初偷懒,直接返回一个纯200就完事了,经验告诉我,得加点料。

from fastapi import FastAPI, status
import psutil
import time

app = FastAPI()

@app.get("/health")
async def health_check():
    # 1. 检查数据库连接(假设你用了数据库)
    try:
        # 执行一个最简单的查询,比如 SELECT 1
        # db.execute("SELECT 1")
        db_status = "ok"
    except Exception as e:
        db_status = f"error: {str(e)}"

    # 2. 检查内存使用率,别等到OOM了才发现
    memory_usage = psutil.virtual_memory().percent
    if memory_usage > 90:
        memory_status = f"critical: {memory_usage}%"
    else:
        memory_status = f"ok: {memory_usage}%"

    # 综合判断
    if db_status == "ok" and memory_usage <= 90:
        return {"status": "healthy", "db": db_status, "memory": memory_status}
    else:
        # 返回503,告诉外部监控,我虽然还活着,但没法好好工作
        return {"status": "unhealthy", "db": db_status, "memory": memory_status}, status.HTTP_503_SERVICE_UNAVAILABLE

看到没?这个 /health 接口就不是简单的“活着”,而是“活得怎么样”。然后你再去 Uptime Robot(一个免费的监控服务,良心推荐)上注册个账号,新建一个监控,填入你的 https://你的域名/health,设置好监控频率和通知方式(比如企业微信、邮件、短信)。完事儿!

⚠️ 第四部分:注意事项与进阶思考

再说个容易翻车的点。告警不是越多越好,是 越准越好。你要是设置个CPU超过10%就告警,那你的手机比振动棒还忙,你会很快“习惯性忽视”告警。所以,阈值要设得合理,比如CPU持续5分钟超过80%再告警。

是不是以为这样就完了?不不不,还有一步。如果你用了Docker或者K8s部署,事情就更微妙了。你的 /health 接口可能返回正常,但容器已经重启了三次了。这时候,你就需要 把容器的存活探针和就绪探针 也配置上。这个工具的选择,好比选螺丝刀,不是最贵的就好,而是适合你的场景。如果是单机部署,健康检查+Uptime Robot够用了;如果是微服务,那还是乖乖上APM工具吧。

最后啰嗦一句,告警系统本身也可能出问题。比如你依赖的监控服务挂了怎么办?所以,多几个“守夜人”总没错,比如云服务商自带的监控和Uptime Robot同时用,互相备份。

好了,今天关于FastAPI告警的分享就到这里。希望我踩过的坑能让你少走点弯路。如果你有更好的“守夜”妙招,或者也遇到过什么奇葩的告警经历,欢迎在评论区唠唠。独乐乐不如众乐乐嘛~ 觉得有用的话,别忘了点赞、收藏、关注三连,让更多小伙伴告别半夜被叫醒的噩梦!😴