爬虫监控告警:结合企业微信或钉钉,打造 7×24 小时实时预警系统

在爬虫常态化运行的今天,无人值守、故障秒级触达已经成为刚需。相比邮件告警的延迟、短信告警的成本,企业微信与钉钉凭借免费、即时、可 @成员、支持富文本展示等优势,成为爬虫监控告警的首选渠道。

本文将从监控场景、机器人配置、代码实现、最佳实践四个维度,手把手教你搭建一套可直接落地的爬虫告警体系。


一、为什么爬虫必须接入企微 / 钉钉告警

传统爬虫运维依赖人工盯日志、定时巡检,很容易出现故障发现不及时、数据漏采、服务器宕机等问题。接入 IM 告警后,能实现:

  1. 实时推送:异常触发后 1 秒内推送到群,支持手机弹窗提醒
  2. 信息完整:可展示错误类型、爬虫名、时间、节点 IP、异常堆栈
  3. 协作高效:直接 @负责人,快速定位问题,无需额外沟通
  4. 零成本:群机器人免费使用,无额外费用,接入门槛极低

二、核心监控场景(覆盖爬虫全生命周期)

你可以在以下节点埋入告警逻辑,实现全流程守护:

  • 启动 / 停止告警:爬虫意外退出、手动启停通知
  • 异常捕获:请求失败、解析报错、数据库连接异常
  • 反爬触发:403/521 状态码、验证码、IP 封禁
  • 性能阈值:CPU / 内存过高、爬取速度骤降、超时无响应
  • 数据质量:当日采集量为 0、字段缺失率超标

三、企业微信机器人配置 + 代码实现

1. 创建机器人(5 步搞定)

  1. 打开企业微信群 → 右上角 "..." → 群机器人
  2. 添加机器人 → 自定义 → 命名(如:爬虫监控机器人)
  3. 复制Webhook 地址(关键凭证,妥善保管)
  4. 可选:设置关键词、IP 白名单提升安全

2. Python 告警代码(可直接复制)

python

运行

复制代码
import requests
import json
import datetime

def send_wecom_alert(title, content, mentioned_list=None):
    """
    企业微信爬虫告警函数
    :param title: 告警标题
    :param content: 告警详情
    :param mentioned_list: @成员列表,["user1", "@all"]
    """
    webhook = "替换为你的Webhook地址"
    msg = {
        "msgtype": "markdown",
        "markdown": {
            "content": f"## ⚠️ {title}\n"
                       f"**发生时间**:{datetime.datetime.now()}\n"
                       f"**异常信息**:{content}\n"
                       f"**处理建议**:检查爬虫状态/网络/目标站点"
        },
        "mentioned_list": mentioned_list or []
    }
    resp = requests.post(webhook, json=msg)
    return resp.json()

# 调用示例
if __name__ == '__main__':
    send_wecom_alert("商品爬虫异常", "请求403,疑似IP被封禁", ["@all"])

四、钉钉机器人配置 + 代码实现

1. 创建机器人(注意安全设置)

  1. 钉钉群 → 群设置 → 智能群助手 → 添加机器人 → 自定义
  2. 开启加签 (推荐),复制Webhook密钥
  3. 记住:消息必须包含安全关键词,否则会被拦截

2. Python 告警代码(带签名)

python

运行

复制代码
import requests
import json
import time
import hmac
import hashlib
import base64
import urllib.parse

def send_ding_alert(title, content):
    # 替换为你的配置
    webhook = "你的钉钉Webhook"
    secret = "你的加签密钥"
    keyword = "告警"  # 安全关键词

    # 签名计算
    timestamp = str(round(time.time() * 1000))
    secret_enc = secret.encode("utf-8")
    string_to_sign = "{}\n{}".format(timestamp, secret)
    string_to_sign_enc = string_to_sign.encode("utf-8")
    hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
    sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))

    url = f"{webhook}&timestamp={timestamp}&sign={sign}"
    msg = {
        "msgtype": "markdown",
        "markdown": {
            "title": f"{keyword}{title}",
            "text": f"### ⚠️ {title}\n"
                    f"**时间**:{time.ctime()}\n"
                    f"**详情**:{content}\n"
                    f"**@所有人**"
        },
        "at": {"isAtAll": True}
    }
    resp = requests.post(url, json=msg)
    return resp.json()

# 调用
if __name__ == '__main__':
    send_ding_alert("爬虫宕机告警", "核心数据爬虫已停止运行,请立即重启")

五、通用集成方案(适配所有爬虫框架)

无论你用Requests、Scrapy、Playwright、Selenium,都可以这样接入:

  1. 异常捕获:try-except 包裹核心逻辑,异常时调用告警函数
  2. 中间件 / 扩展:Scrapy 自定义 DownloaderMiddleware,统一拦截错误
  3. 定时巡检:用 schedule/APScheduler 定时检查进程与日志
  4. 进程守护:结合 supervisor,进程退出自动触发告警

六、最佳实践(企业级稳定运行建议)

  1. 分级告警:严重故障(宕机、封禁)@所有人,一般错误仅日志记录
  2. 防轰炸:同一错误 10 分钟内只告警 1 次,避免刷屏
  3. 安全规范:Webhook 不要硬编码,放入环境变量 / 配置文件
  4. 消息结构化:统一用 Markdown,方便快速阅读与排查
  5. 闭环管理:告警 + 日志 + 重启脚本联动,实现自动恢复

七、总结

爬虫监控的核心是早发现、快响应、少损失。企业微信与钉钉告警,用最低成本解决了最痛的运维问题。

按照本文代码,你可以在10 分钟内完成接入,让爬虫从 "黑盒运行" 变成 "透明可控"。

相关推荐
懷淰メ2 小时前
python3GUI--socket+PyQt5开发局域网微信(含功能、详细介绍、分享)
python·学习·gui·大学生·pyqt5·微信界面
risc1234562 小时前
channel.read(dest, channelPosition) 的读取大小限制
开发语言·python
xixixi777772 小时前
拥抱AI大模型时代:开发者如何利用智能编程工具提升效率
人工智能·python·ai·大模型·aigc·代码
李昊哲小课2 小时前
Python 高级数据结构
开发语言·数据结构·python
gameboy0312 小时前
网络爬虫学习:应用selenium获取Edge浏览器版本号,自动下载对应版本msedgedriver,确保Edge浏览器顺利打开。
爬虫·学习·selenium
小蜗牛~向前冲2 小时前
大模型学习系列-Embedding与向量数据库
人工智能·python·神经网络·学习·机器学习·embedding
MediaTea2 小时前
Python:词频统计流程及综合示例
开发语言·python
鲜于言悠9053 小时前
博客系统测试报告
python·功能测试·selenium·jmeter·测试用例·集成测试·pytest
全栈凯哥3 小时前
13.Python中while循环完全指南
python