爬虫监控告警:结合企业微信或钉钉,打造 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 分钟内完成接入,让爬虫从 "黑盒运行" 变成 "透明可控"。

相关推荐
曦月逸霜1 天前
啥是RAG 它能干什么?
人工智能·python·机器学习
2301_769340671 天前
如何在 Vuetify 中可靠捕获 Chip 关闭事件(包括键盘触发).txt
jvm·数据库·python
南 阳1 天前
Python从入门到精通day66
开发语言·python
m0_596749091 天前
JavaScript中手动实现一个new操作符的底层逻辑
jvm·数据库·python
DTAS尺寸公差分析软件1 天前
DTAS3D v13.0 三维尺寸公差分析软件可申请试用
python·尺寸公差分析·三维公差分析·公差仿真软件·尺寸链计算
DTAS尺寸公差分析软件1 天前
DTAS 3D公差分析软件最新版本介绍
python·3d·尺寸公差分析·尺寸链计算·尺寸工程·尺寸链校核软件·公差仿真分析
PieroPc1 天前
CAMWATCH — 局域网摄像头监控系统 Fastapi + html
前端·python·html·fastapi·监控
feasibility.1 天前
反爬十层妖塔:现代爬虫攻防的立体战争
爬虫·python·科技·scrapy·rust·go·硬件
十八旬1 天前
快速安装ClaudeCode完整指南
开发语言·windows·python·claude
dFObBIMmai1 天前
如何在 CSS 中实现元素的绝对定位,使其不受窗口尺寸变化影响
jvm·数据库·python