← 返回 Day 141 正文

Day 141 · 图解

Day 141 — 爬虫监控与告警 · 图解

1. 监控告警整体架构(Mermaid)

graph TD A[爬虫主进程] -->|每30s写心跳| B[(Redis / heartbeat 文件)] A -->|运行统计| C[(数据库 / 日志)] B --> D[监控进程 · 独立部署] C --> D D -->|心跳超时| E[告警网关 · 分级+抑制] D -->|数据量骤降| E D -->|错误率飙升| E E --> F[钉钉机器人 · 加签] E --> G[企微机器人] E --> H[邮件 / 短信]
graph TD
    A[爬虫主进程] -->|每30s写心跳| B[(Redis / heartbeat 文件)]
    A -->|运行统计| C[(数据库 / 日志)]
    B --> D[监控进程 · 独立部署]
    C --> D
    D -->|心跳超时| E[告警网关 · 分级+抑制]
    D -->|数据量骤降| E
    D -->|错误率飙升| E
    E --> F[钉钉机器人 · 加签]
    E --> G[企微机器人]
    E --> H[邮件 / 短信]

2. 指数退避 + 抖动(ASCII)

失败 ──等1~1.5s──▶ 重试#1 失败 ──等2~3s──▶ 重试#2 失败
      ──等4~6s──▶ 重试#3 失败 ──等8~12s──▶ 重试#4 ──▶ 成功 or 死信队列

单爬虫:  ▁▄▁▁▄▁▁▄▁        (间隔指数拉长,给服务喘息时间)
多爬虫:  ▂▁▃▁▂▁▄▁▃▁▂      (jitter 抖散,避免惊群)

3. 异常捕获分层(ASCII)

┌────────────────────────────────────┐
│ 进程层  sys.excepthook → 崩溃告警    │
│ ┌────────────────────────────────┐ │
│ │ 业务层  数据量断言 → 静默失败告警  │ │
│ │ ┌────────────────────────────┐ │ │
│ │ │ 解析层  字段级 try → 失败计数 │ │ │
│ │ │ ┌────────────────────────┐ │ │ │
│ │ │ │ 请求层  重试装饰器 → 自动重试│ │ │ │
│ │ │ └────────────────────────┘ │ │ │
│ │ └────────────────────────────┘ │ │
│ └────────────────────────────────┘ │
└────────────────────────────────────┘

4. 心跳超时判定时间线

爬虫:   ●────●────●────●────✕(崩溃)
        0s   30s  60s  90s  120s
监控:      ▲检查 ▲检查 ▲检查 ▲检查→ 距上次心跳30s+超阈值 → 🚨告警