游客发表

python监控系统

发帖时间:2026-10-17 04:55:49

用Python写监控系统,监控最怕的系统就是把它搞成一个“万能工具箱”。我见过不少团队,监控一开始雄心勃勃要监控CPU、系统内存、监控磁盘、系统网络、监控进程、系统日志,监控结果代码写到三千行,系统连一个报警都没发出去。监控问题出在贪多。系统监控的监控本质是“及时发现问题”,不是系统“收集所有数据”。

拿我自己的监控经历说。去年帮一个朋友的小公司搭监控,他们只有三台服务器,跑着几个Flask应用和PostgreSQL。我一开始用psutil写了个采集脚本,每5秒把CPU、内存、磁盘IO全抓一遍,存进SQLite。跑了两天,数据库涨到200MB,查个历史数据慢得要命。后来我砍掉了磁盘IO和网络流量,只保留CPU使用率、内存占用、磁盘剩余空间这三个指标。采集间隔改成10秒。数据量直接降了70%,查询秒回。

代码其实很短。核心就一个循环:

import psutil, time, sqlite3 def collect(): cpu = psutil.cpu_percent(interval=1) mem = psutil.virtual_memory().percent disk = psutil.disk_usage('/').percent return cpu, mem, disk while True: c, m, d = collect() conn = sqlite3.connect('monitor.db') conn.execute('INSERT INTO metrics VALUES (?,?,?,?)', (int(time.time()), c, m, d)) conn.commit() conn.close() time.sleep(10) 

但光采集没用。监控系统缺了报警,就是个摆设。我见过有人用Python写监控,采集了一堆数据,然后每天手动看图表。这跟没监控有什么区别?报警逻辑要简单粗暴:CPU连续3次超过90%,发邮件;磁盘剩余低于10%,发短信。别搞什么动态阈值、机器学习预测,小团队根本用不上。

用smtplib发邮件,二十行代码搞定。短信可以用Twilio或者阿里云短信API,但说实话,邮件足够。我朋友那套系统跑了半年,只触发过两次报警:一次是PostgreSQL连接数爆了,一次是磁盘被日志写满。两次都是邮件先到,他手动处理,没出大事。

有个细节值得说:报警要带上下文。别只发“CPU高”,要发“CPU 95%,持续5分钟,当前进程列表前五是……”。psutil可以抓进程信息,加进去不费事。这样收到报警的人不用登录服务器就能判断严重程度。

另外,别用Python写Web界面。Flask或者FastAPI搭个仪表盘,看起来很美,但维护成本高。我推荐直接用Grafana,Python只负责往InfluxDB或者Prometheus里写数据。Grafana的图表、告警、分享功能,比你自己写的前端强十倍。你只需要保证数据格式对,剩下的交给专业工具。

最后说个坑:时间同步。有次报警时间比实际晚了8小时,查了半天发现服务器时区是UTC,而脚本里用了本地时间。所有监控数据必须用UTC时间戳存储,展示时再转时区。这个错误很隐蔽,但一旦发生,排查故障时会让你抓狂。

监控系统不需要复杂。采集三个指标,存数据库,超阈值发邮件,用Grafana展示。这套组合拳打下来,代码不超过200行,足够管十台服务器。别想着一步到位,先跑起来,遇到问题再加功能。我见过太多“完美设计”的监控系统,最后都死在没上线。

    热门排行

    友情链接