Skip to main content

面向 Python 爬虫的通用监控 SDK,支持请求监控、数据血缘、Kafka 输出、断网缓存和平台上报

Project description

Spider Monitor

spider-monitor 是一个面向 Python 爬虫的通用监控 SDK。它可以安装到 Scrapy、Requests、aiohttp、Selenium 或自研爬虫项目中,统一采集爬虫运行指标、数据产物、文件下载、代码来源、数据质量、上报状态和爬虫运行维度。

后续爬虫监控平台的数据应全部来自该 SDK 的本地指标端点或主动上报协议。

核心能力

  • 请求监控:请求数、成功率、失败率、响应时间、QPS。
  • 本地指标:/metrics/health
  • 主动上报:Reporter 定时 POST 到监控平台。
  • 数据血缘:记录 item、文件、输出目标、来源 URL、代码位置。
  • 数据质量:记录校验失败、重复、丢弃、解析失败。
  • 上报诊断:Reporter 状态、端点测试、手动 flush。
  • 爬虫运行维度:任务队列、任务重试、代理失败、封禁、限流、验证码、资源、日志、断点续爬。
  • 框架接入:装饰器、上下文管理器、Requests、Scrapy、aiohttp、Selenium 适配器。

安装

基础安装:

pip install spider-monitor

按技术栈安装:

pip install "spider-monitor[requests]"
pip install "spider-monitor[scrapy]"
pip install "spider-monitor[aiohttp]"
pip install "spider-monitor[selenium]"
pip install "spider-monitor[kafka]"
pip install "spider-monitor[yaml]"
pip install "spider-monitor[all]"

当前版本已实现核心能力和 Requests/Scrapy/aiohttp/Selenium 接入;对应 extra 用于安装可选第三方依赖。

安装即用

常规生产爬虫只需要配置爬虫名、平台上报地址和维护人信息:

export MONITOR_NAME=product_spider
export MONITOR_REPORT_URL=https://monitor.company.com/api/v1/spider-monitor/reports
export MONITOR_REPORT_TOKEN=your-platform-token
export MONITOR_OWNER=zhangsan
export MONITOR_OWNER_TEAM=crawler-team
export MONITOR_LABEL_ENV=prod
export MONITOR_LABEL_PROJECT=catalog
python spider.py

设置 MONITOR_REPORT_URL 后,SDK 会自动进入生产 profile:关闭本地 HTTP 服务、使用 SQLite 断网缓存、开启更大的批量上报、给上报周期增加 jitter、降低产物采样率、使用轻量代码来源采集,并关闭文件 hash。高吞吐爬虫仍然可以用环境变量或构造函数覆盖这些默认值。

生成完整生产模板:

spider-monitor sample-config

对已有脚本做最小改动时,可以用命令行注入:

spider-monitor run \
  --name product_spider \
  --report-url https://monitor.company.com/api/v1/spider-monitor/reports \
  --owner zhangsan \
  --owner-team crawler-team \
  --label env=prod \
  -- python spider.py

最小示例

推荐一键接入:

from spider_monitor import auto_monitor

monitor = auto_monitor(
    name="product_spider",
    report_endpoint="https://monitor.company.com/api/v1/spider-monitor/reports",
    owner="zhangsan",
    owner_email="zhangsan@company.com",
    owner_team="crawler-team",
    run_type="daemon",
)

配置文件接入:

{
  "name": "product_spider",
  "report_endpoint": "https://monitor.company.com/api/v1/spider-monitor/reports",
  "owner": "zhangsan",
  "owner_email": "zhangsan@company.com",
  "owner_team": "crawler-team",
  "labels": {"env": "prod", "project": "catalog"},
  "resource_interval": 30
}
MONITOR_CONFIG_FILE=monitor.json python spider.py

资源和日志可直接进入同一条上报链路:

import logging
from spider_monitor import SpiderMonitorLogHandler, auto_monitor

monitor = auto_monitor(name="product_spider")
monitor.start_resource_collection()

logger = logging.getLogger("product_spider")
logger.addHandler(SpiderMonitorLogHandler(monitor))

命令行注入:

spider-monitor run --name product_spider -- python spider.py

需要手动控制时再使用完整 API:

from spider_monitor import SpiderMonitor

monitor = SpiderMonitor(
    name="product_spider",
    labels={"env": "prod", "project": "catalog"},
    report_endpoint="https://monitor.company.com/api/v1/spider-monitor/reports",
    owner="zhangsan",
    owner_email="zhangsan@company.com",
    owner_phone="13800000000",
    owner_team="crawler-team",
    run_type="manual",
    trigger_source="developer",
)

monitor.record_request(success=True, response_time=0.25)
monitor.record_item(
    item_type="product",
    item_id="100",
    source_url="https://example.com/products/100",
    fields={"id": "100", "name": "Keyboard", "price": 199.0},
)

print(monitor.get_stats())
monitor.flush()
monitor.finish_run(status="success", exit_code=0)
monitor.shutdown()

文档

MVP 范围

首版建议稳定实现:

  • SpiderMonitor
  • auto_monitor()
  • record_request()record_error()record_page()
  • record_item()record_file()
  • trace_context()
  • get_stats()get_reporter_status()
  • flush()reset()shutdown()
  • /metrics/health
  • monitor_request()monitor_request_async()monitor_context()
  • MonitoredSession
  • SpiderMonitorExtension
  • monitored_client()
  • MonitoredWebDriver
  • MonitoredKafkaProducer
  • spider-monitor run
  • 基础 operation 事件:队列大小、任务重试、代理失败、封禁、限流、验证码、资源快照、日志、断点续爬
  • JSON/YAML 配置文件:config_fileMONITOR_CONFIG_FILE
  • 运行批次:run_idrun_typestart_run()finish_run()
  • 标准 Python 包打包:wheel、sdist、optional extras

平台接入

监控平台建议提供:

POST /api/v1/spider-monitor/reports

SDK 通过 report_endpoint 上报:

monitor = SpiderMonitor(
    name="product_spider",
    report_endpoint="https://monitor.company.com/api/v1/spider-monitor/reports",
)

协议详见 开发与系统接入文档 的“上报协议”章节。

多服务器、多爬虫会自动按 client_id = <spider_name>@<hostname>:<pid> 区分实例,平台按 nameclient_idowner 和 labels 聚合展示。

建议生产环境必须配置维护人信息,便于告警时直接定位到人:

export MONITOR_OWNER=zhangsan
export MONITOR_OWNER_EMAIL=zhangsan@company.com
export MONITOR_OWNER_PHONE=13800000000
export MONITOR_OWNER_TEAM=crawler-team

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

spider_monitor-0.2.2.tar.gz (80.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

spider_monitor-0.2.2-py3-none-any.whl (39.4 kB view details)

Uploaded Python 3

File details

Details for the file spider_monitor-0.2.2.tar.gz.

File metadata

  • Download URL: spider_monitor-0.2.2.tar.gz
  • Upload date:
  • Size: 80.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for spider_monitor-0.2.2.tar.gz
Algorithm Hash digest
SHA256 956dd8f481b57b55c928117404bd2b52870eced6c041a3543006fe92e6079236
MD5 142642ef9345074a9151e52792e6a444
BLAKE2b-256 accb17fd88745aa4a22130d0e37630df4952eefab874217a2523fc289ec0cbd1

See more details on using hashes here.

File details

Details for the file spider_monitor-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: spider_monitor-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 39.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for spider_monitor-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 dfbcf43b8a524c9dfed555dd6a87ed6cb9e6c9f74e2746a55b3c76da4ccb7b82
MD5 2180350ce04900461ab38140253e9e16
BLAKE2b-256 6cbed57d898ae16c00c1fea7e69380939aa4de652ff1a26e94ed086c57e85958

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page