面向 Python 爬虫的通用监控 SDK,支持请求监控、数据血缘、Kafka 输出、断网缓存和平台上报
Project description
Spider Monitor
spidermoon 是一个面向 Python 爬虫的通用监控 SDK。它可以安装到 Scrapy、Requests、aiohttp、Selenium 或自研爬虫项目中,统一采集爬虫运行指标、数据产物、文件下载、代码来源、数据质量、上报状态和爬虫运行维度。
后续爬虫监控平台的数据应全部来自该 SDK 的本地指标端点或主动上报协议。
核心能力
- 请求监控:请求数、成功率、失败率、响应时间、QPS。
- 本地指标:
/metrics、/health。 - 主动上报:Reporter 定时 POST 到监控平台。
- 数据血缘:记录 item、文件、输出目标、来源 URL、代码位置。
- 数据质量:记录校验失败、重复、丢弃、解析失败。
- 上报诊断:Reporter 状态、端点测试、手动 flush。
- 爬虫运行维度:任务队列、任务重试、代理失败、封禁、限流、验证码、资源、日志、断点续爬。
- 框架接入:装饰器、上下文管理器、Requests、Scrapy、aiohttp、Selenium 适配器。
安装
基础安装:
pip install spidermoon
按技术栈安装:
pip install "spidermoon[requests]"
pip install "spidermoon[scrapy]"
pip install "spidermoon[aiohttp]"
pip install "spidermoon[selenium]"
pip install "spidermoon[kafka]"
pip install "spidermoon[yaml]"
pip install "spidermoon[all]"
当前版本已实现核心能力和 Requests/Scrapy/aiohttp/Selenium 接入;对应 extra 用于安装可选第三方依赖。
安装即用
常规生产爬虫只需要配置爬虫名、平台上报地址和维护人信息:
export MONITOR_NAME=product_spider
export MONITOR_REPORT_URL=https://monitor.company.com/api/v1/spidermoon/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。高吞吐爬虫仍然可以用环境变量或构造函数覆盖这些默认值。
生成完整生产模板:
spidermoon sample-config
对已有脚本做最小改动时,可以用命令行注入:
spidermoon run \
--name product_spider \
--report-url https://monitor.company.com/api/v1/spidermoon/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/spidermoon/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/spidermoon/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))
命令行注入:
spidermoon 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/spidermoon/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()
文档
- 开发与系统接入文档:SDK 架构、公共 API、上报协议、平台接入、测试、打包和验收标准。
- 使用教程:安装、接入、上报平台、各类爬虫示例、生产建议和常见问题。
- 协议 JSON Schema:平台接收 envelope 的基础结构。
MVP 范围
首版建议稳定实现:
SpiderMonitorauto_monitor()record_request()、record_error()、record_page()record_item()、record_file()trace_context()get_stats()、get_reporter_status()flush()、reset()、shutdown()/metrics、/healthmonitor_request()、monitor_request_async()、monitor_context()MonitoredSessionSpiderMonitorExtensionmonitored_client()MonitoredWebDriverMonitoredKafkaProducerspidermoon run- 基础
operation事件:队列大小、任务重试、代理失败、封禁、限流、验证码、资源快照、日志、断点续爬 - JSON/YAML 配置文件:
config_file或MONITOR_CONFIG_FILE - 运行批次:
run_id、run_type、start_run()、finish_run() - 标准 Python 包打包:wheel、sdist、optional extras
平台接入
监控平台建议提供:
POST /api/v1/spidermoon/reports
SDK 通过 report_endpoint 上报:
monitor = SpiderMonitor(
name="product_spider",
report_endpoint="https://monitor.company.com/api/v1/spidermoon/reports",
)
协议详见 开发与系统接入文档 的“上报协议”章节。
多服务器、多爬虫会自动按 client_id = <spider_name>@<hostname>:<pid> 区分实例,平台按 name、client_id、owner 和 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file spidermoon-0.1.1.tar.gz.
File metadata
- Download URL: spidermoon-0.1.1.tar.gz
- Upload date:
- Size: 79.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f83ec53b3fda1a9725afb1a5750cb4d26c8900e7bfa85b548f5251bf7abefbb4
|
|
| MD5 |
863aeac0dd88b28f7bbc409c00f157f5
|
|
| BLAKE2b-256 |
d2b098bf292490c01c0fe4072e146bf188d10f7e7d1a8c369c4fb1b856ed7fb2
|
File details
Details for the file spidermoon-0.1.1-py3-none-any.whl.
File metadata
- Download URL: spidermoon-0.1.1-py3-none-any.whl
- Upload date:
- Size: 38.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
060d6b151f46273bdfba4115cb4aaca5a5723aa5fb9afec84d1c71c97d281513
|
|
| MD5 |
717417828d9429d8963a8e730fb05add
|
|
| BLAKE2b-256 |
1c76895d92d32bc6f24e08d0537ac1291d423001400296293345c3ddc9449d2b
|