Python数据监控脚本的核心是稳、准、快:稳指长期运行不崩,准指异常真实捕获,快指告警延迟秒级;需明确监控目标、选择轻量采集方式、设计健壮运行与告警机制、增加自监控。

用Python写数据监控脚本,核心不是堆功能,而是稳、准、快——稳在能长期运行不崩,准在异常能被真实捕获,快在告警延迟控制在秒级。下面从四个关键环节讲清楚怎么落地。
明确监控目标:先想清楚“盯什么”
别一上来就写代码。先列清楚你要监控的具体指标,比如:
- 数据库表行数突降50%(可能ETL失败)
- API响应时间连续3次超2秒(服务变慢)
- 日志中“ERROR”关键词1分钟内出现10次以上(批量报错)
- 某个CSV文件10分钟没更新(上游停摆)
每个指标要定义清楚采集方式、阈值、检查频率和恢复条件。模糊的“监控数据质量”没法编码,但“监控user_order表昨日新增订单数是否低于3000”就可以直接写判断逻辑。
选择轻量可靠的采集方式
避免引入复杂框架,优先用原生或标准库能搞定的方式:
立即学习“Python免费学习笔记(深入)”;
Python v2.4版chm格式的中文手册,内容丰富全面,不但是一本手册,你完全可以把她作为一本Python的入门教程,教你如何使用Python解释器、流程控制、数据结构、模板、输入和输出、错误和异常、类和标准库详解等方面的知识技巧。同时后附的手册可以方便你的查询。
- 查数据库:用pymysql或psycopg2直连,执行SELECT COUNT(*) FROM ... WHERE create_time > DATE_SUB(NOW(), INTERVAL 1 DAY)
- 读文件状态:用os.path.getmtime()比对修改时间,或pandas.read_csv().shape[0]统计行数
- 调用接口:用requests.get()加timeout=(3, 5)防卡死,检查response.status_code和response.elapsed.total_seconds()
- 解析日志:用open().readlines()[-100:]读尾部,配合re.findall("ERROR", line)
设计健壮的运行与告警机制
监控脚本不是跑一次就完,得让它自己“活”下去:
- 用while True: + time.sleep(60)实现轮询,别用cron依赖外部调度(容易漏检)
- 所有IO操作必须包在try/except里,记录错误到本地日志文件,但不中断主循环
- 告警只发一次:用变量或临时文件记录“已告警”,直到指标恢复正常才重置,避免刷屏
- 发微信/钉钉最简单:用requests.post()调用Webhook,传JSON消息体;邮件可用smtplib,无需额外服务
加一层“自监控”,让脚本可运维
监控脚本自己挂了,你却不知道——这是最大风险。加三件事:
- 每次成功检查后,往本地写一个带时间戳的last_success.log文件
- 另起一个极简脚本,每5分钟读这个文件,如果时间距现在超10分钟,就触发“监控失联”告警
- 在主脚本开头打印启动日志,包含PID和当前配置,方便排查多实例冲突
基本上就这些。不复杂但容易忽略的是:别追求“全量监控”,先保1–2个最关键链路;别把告警发到没人看的群,优先发给能立刻响应的人。脚本越简单,越活得久。









