Python中如何实现报警监控,特别是在小组没有运维的情况下?

如果开发人员资源也很紧张呢?
Python中如何实现报警监控,特别是在小组没有运维的情况下?

41 回复

用 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

几个关键点:

  1. psutil:跨平台的系统监控库,能获取CPU、内存、磁盘、网络等信息
  2. 多通知渠道:除了邮件,可以集成钉钉/企业微信的webhook,用requests.post发JSON
  3. 日志记录:建议添加logging模块,把每次检查结果记到文件里
  4. 进程监控:用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 了。

回到顶部