抓取监控看板 - 爬虫系统实时监控与告警详解
📂 所属阶段:第六阶段 — 运维与监控(工程化篇)
🔗 相关章节:Scrapyd与ScrapydWeb · Docker容器化爬虫 · Scrapy-Redis分布式架构
目录
监控系统概述
如果把一个稳定运行的爬虫系统比作一艘远航的船,那么监控就是船长的「雷达」与「仪表盘」。它通过指标收集、日志聚合、可视化展示、自动化告警,把抽象的系统状态变成直观的数据图表,让你随时掌控爬虫的一举一动。
为什么工程化爬虫必须有监控?
小打小闹的单机脚本确实不需要监控,可是当爬虫走向分布式、长期运行、高可用时,每一分钟的异常都可能意味着:
- 数据丢失:抓取任务悄悄崩溃,几天后才发现数据不全;
- 资源浪费:内存泄漏导致服务器 OOM,或空跑任务占满带宽;
- 排查困难:面对几百 G 原始日志,定位一个问题要花费半天时间。
好的监控能够从根本上解决这些痛点——事前预警、事中定位、事后复盘。
极简可落地的架构
很多教程一上来就推荐 ELK + Prometheus + Grafana 全套全家桶,对中小型爬虫项目来说部署成本过高。这里推荐一套 轻量化三剑客架构,使用免费云服务,不需要自己安装任何服务端组件:
- Grafana Cloud 提供免费额度,自带 Prometheus(指标)、Loki(日志)、Grafana(可视化),注册即用;
- 爬虫端只需集成官方
prometheus_client库,暴露少量核心指标即可对接; - 本地测试时,可用
ngrok等内网穿透工具让云上的 Prometheus 抓到本地指标。
下面我们手把手把这套架子搭起来。
核心组件快速实践
1. 用 Prometheus Client 暴露爬虫指标
Scrapy 本身没有内建监控,我们可以通过一个下载器中间件来实现埋点。下面的中间件会在每个请求/响应/异常的生命周期里更新 Prometheus 计数器、仪表盘和直方图:
然后在 settings.py 里激活中间件,并指定一个端口(如果有多个爬虫进程,每个使用不同端口):
启动爬虫后,访问 http://localhost:8001/metrics 就能看到类似下面的原始数据:
这就是 Prometheus 的采集端点,下一步我们让 Grafana Cloud 来拉取这些数据。
2. 接入 Grafana Cloud 免费托管服务
为什么选 Grafana Cloud?
自带告警、高可用、多租户、永久免费版足够中小团队使用,免去自己搭建和维护的烦恼。
步骤如下:
-
注册账号
访问 Grafana Cloud ,使用 GitHub/Google 快速注册。 -
创建 Prometheus 数据源连接
进入左侧「Connections」→「Add new connection」,搜索Prometheus,选择「Hosted Prometheus metrics」→「Create a Prometheus data source」。
你会得到一个远程写入的 URL 和凭据(用户名/API Key),后续我们会用这些信息让本地的 Prometheus 指标推送到云端。更简单的做法是让云上的 Prometheus 直接拉取本地的/metrics端点。 -
配置远程拉取(需要公网可达的指标端口)
如果是本地开发环境,可以使用ngrok将localhost:8001暴露到公网:执行后会得到一个类似
https://xxxx.ngrok.io的公网地址。
回到 Grafana Cloud,在数据源配置中,将Scrape interval保持默认 30 秒,在Custom HTTP Headers里忽略(因为我们暂时不需要认证),然后将Prometheus scrape target设置为你的 ngrok 地址即可。生产环境中,建议通过内网专线或 VPC Peering 确保安全,切勿将爬虫指标直接暴露在公网上。
-
一键导入看板模板
Grafana 社区提供了大量现成模板。进入「Dashboards」→「New」→「Import」,输入看板模板 ID763(示例),选择刚配置好的 Prometheus 数据源,即可得到好看的实时监控面板。你可以看到:- 总请求数曲线(成功/失败趋势)
- 错误率 面板
- 活跃并发数 实时数值
- 响应时间分位数(P50/P95/P99)
这样,一个零运维、零成本的爬虫监控面板就完成了。
故障排查与诊断
监控面板展示出异常后,我们需要快速定位根因。下面给出一个轻量级的诊断工具箱,可以集成到爬虫项目中,随时执行健康检查。
诊断工具实现
这份报告可以直接发送到企业微信/钉钉告警通道,实现自动化诊断。
常见故障速查表
监控最佳实践
-
安全第一,内网为先
生产环境不要让指标端口暴露到公网。使用 Prometheus 的 remote write 功能将数据推送到云端,或者通过 VPC 私网通道。本地调试用 ngrok 只能作为临时方案。 -
合理的告警规则
- 错误率:连续 5 分钟错误率超过 5% 才告警,避免瞬时波动误报。
- 资源:内存使用率超过 90% 且持续 3 分钟才触发。
- 心跳:每个爬虫应有定期心跳指标(例如每分钟上报一次
up值),若丢失超过 2 分钟则告警。
-
分层监控面板
建议搭建三级看板:- 总览层:面向运维/负责人,展示全平台 QPS、错误率、系统健康。
- 项目层:面向开发具体抓取任务的同事,针对单个蜘蛛的请求量、延迟、数据量等。
- 单任务层:排查问题时使用,包含详细的日志流、最近一次运行参数、依赖服务状态。
-
定期清理数据
Grafana Cloud 免费版有对应的日志和指标保留时间(Prometheus 13个月,Loki 30天)。注意不要无限制往里面灌测试数据,可在 Prometheus 的scrape_config里设置job_name做区分,方便管理。 -
逐步演进
团队从小做起时,上述“轻量三剑客”完全够用。随着爬虫规模变大,可以考虑升级到自建 Prometheus + Grafana,并用 Loki 替代 ELK 统一日志,用 Tempo 补充分布式追踪,平滑过渡,避免过度设计。
监控不是一成不变的摆设,它应该随着业务不断迭代。希望这篇教程能帮你快速搭建起一个实用、低成本的爬虫监控体系,让你的抓取任务从此告别盲飞!

