Python中如何实现报警监控,特别是在小组没有运维的情况下?
如果开发人员资源也很紧张呢?
Python中如何实现报警监控,特别是在小组没有运维的情况下?
用 prometheus+granfa ,最近在做,很方便, grafana 4.0 新增了报警功能,可以对一个 panel 设置 alert ,状态改变就会发送通知
对于没有运维团队的小组,用Python实现报警监控的核心是:自己搭建轻量级的监控脚本+通知机制。我常用的方案是结合psutil进行资源监控,用requests检测服务端口,再通过smtplib或第三方API(如钉钉、企业微信)发送告警。
下面是一个可直接运行的示例,监控CPU/内存和指定端口,异常时发送邮件告警:
import psutil
import smtplib
import socket
from email.mime.text import MIMEText
from datetime import datetime
def check_system(threshold_cpu=80, threshold_mem=85):
"""检查CPU和内存使用率"""
alerts = []
cpu_percent = psutil.cpu_percent(interval=1)
if cpu_percent > threshold_cpu:
alerts.append(f"CPU使用率过高: {cpu_percent}%")
mem = psutil.virtual_memory()
if mem.percent > threshold_mem:
alerts.append(f"内存使用率过高: {mem.percent}%")
return alerts
def check_port(host='localhost', port=8080):
"""检查指定端口是否可连接"""
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(3)
result = sock.connect_ex((host, port))
sock.close()
return result == 0
except:
return False
def send_alert(subject, content, to_emails):
"""发送邮件告警"""
smtp_server = "smtp.your-email.com"
smtp_port = 587
from_email = "monitor@your-company.com"
password = "your-password"
msg = MIMEText(content)
msg['Subject'] = f"[系统告警] {subject}"
msg['From'] = from_email
msg['To'] = ", ".join(to_emails)
try:
server = smtplib.SMTP(smtp_server, smtp_port)
server.starttls()
server.login(from_email, password)
server.send_message(msg)
server.quit()
print(f"{datetime.now()} 告警发送成功: {subject}")
except Exception as e:
print(f"发送告警失败: {e}")
def main():
# 监控配置
monitor_config = {
'cpu_threshold': 80,
'mem_threshold': 85,
'ports_to_check': [8080, 3306, 6379], # 需要监控的端口
'alert_emails': ['team@your-company.com']
}
alerts = []
# 系统资源检查
alerts.extend(check_system(
threshold_cpu=monitor_config['cpu_threshold'],
threshold_mem=monitor_config['mem_threshold']
))
# 端口检查
for port in monitor_config['ports_to_check']:
if not check_port(port=port):
alerts.append(f"端口 {port} 无法连接")
# 发送告警
if alerts:
subject = f"检测到 {len(alerts)} 个问题"
content = "\n".join([f"• {alert}" for alert in alerts])
send_alert(subject, content, monitor_config['alert_emails'])
if __name__ == "__main__":
main()
把这个脚本放到crontab里定时运行(比如每5分钟一次):
*/5 * * * * /usr/bin/python3 /path/to/monitor.py
几个关键点:
- psutil:跨平台的系统监控库,能获取CPU、内存、磁盘、网络等信息
- 多通知渠道:除了邮件,可以集成钉钉/企业微信的webhook,用requests.post发JSON
- 日志记录:建议添加logging模块,把每次检查结果记到文件里
- 进程监控:用
psutil.process_iter()检查关键进程是否存活
对于更复杂的监控需求,可以考虑Prometheus+Alertmanager的方案,但上面这个脚本对于小团队的基础监控已经够用了。
总结:自己写监控脚本重点抓核心指标,用cron定时跑,通知到人就行。
如果追踪代码错误的话可以用 sentry
没有人运维的情况下,直接写数据库,定时轮刷表最实在,通知可以注册一个企业号接微信的推送接口很方便。
报警监控做一套架构出来可以玩出花来,但是一旦要改造或者硬件条件不够就要死了。
还在用 3.0 , prometheus 自身也有报警功能的。
没有运维用现成的服务最好。
InfluxDB + Grafana ,效果还不错
在用 prometheus
riemann + influxdb + grafana
我知道本身那个,但是感觉配置 grafana 报警比较方便
suXiong
什么现有服务?是指 360 云报警这种吗
详细说明需求啊?你要监控网站运行? mysql 还是啥?
cloudinsight.oneapm.com 40s 安装探针就可以用了,支持几十种基础组件监控
赞一下
datadog + slack…
用 ceilometer 啊
xabcloud.com 可以解决你们继续的 基础运维,互联网跳板机,机器权限管理,应用集群监控,基础软件环境一键部署,支持异地多网络(机房)管理,信息通知,实时报警 联通 微信,企业工单
一个管理员账号 [email protected] 密码 123456
datadog + pagerduty
nagios 邮件报警,可以自己写监控脚本
那就招人呗。。。。
prometheus+granfa 为什么要用两个?
持续关注 最近就是这个烦恼
自己写一套,可随时添加自己想要的功能
peometheus 负责收集, grafana 展示
zabbix + 1
如果开发人员资源也很紧张呢?
没人的话,只能用钱来填了。买各种软件,运维服务啥的。就是买买买。。。
目前,我们给客户的项目做的服务器的管理主要是 阿里云全家桶,包括服务器的监控与报警:内存, cpu ,出入带宽;站点的监控, 200 以上报警。 通过设置参数,服务器或站点达到一定阈值后会邮件短信通知。 当然,网站的统计是 ga 。
我们给客户做的是微信公众号的业务,由于采用 meteor ,对内存消耗比较大,所以会额外注意内存的指标,当然,出入带宽也是比较在意的。
阿里云全家桶,免费。
如果你要是给服务器监控报警的话,建议你遍个小程序,设置最高优先级,备份日志里面的程序,如果和日志的不同,那么就删除他,如果是防火墙的话你自己感觉就好,编辑程序里面可以编辑你的邮箱,达到你的需要。
本人小白,不喜勿喷,不是引站
有可能不是你的需要,答非所问,抱歉
icinga2
能花钱解决的就不要花人了,听云, oneapm 好像都有监控,不行就上阿里云
装了一下,的确很好,也对手机做了适配。
就是网页做了移动端的适配
目前是使用 Zabbix+Grafana,效果倒是确实不错的,楼主可以百度一下看看 DEMO
请问哪里有部署 prometheus 清楚点的文档不,除了官网,网上大多只是最简单的安装
官网那个教程有哪里看不懂吗?我是看官网的
哈哈哈,官网看的吃力了点,所以看有没有好点的中文文档,那我还是老老实实跟着官网来,多谢解答
不客气,它的概念其实很简单,就是一个配置文件,在里面可以配置目标,它会定时去目标上访问 /metrics 收集数据,这样就算完成了
大佬 grafana telegram 规则设置了,收不到消息
不是大佬,很久没用 grafana 了,因为公司在用 datadog 了。

