Реализация дашборда статистики парсинга (успехи, ошибки, скорость)
Дашборд статистики парсинга — инструмент мониторинга здоровья системы сбора данных. Показывает: сколько запросов успешно обработано, где возникают блокировки, насколько быстро работает каждый источник, как меняется эффективность во времени.
Ключевые метрики
| Метрика | Описание |
|---|---|
| Success Rate | % успешных запросов за период |
| Requests/min | Скорость обхода (requests per minute) |
| Items/hour | Скорость сбора данных |
| Error Rate | % запросов с ошибками 4xx/5xx |
| Proxy Health | % рабочих прокси в пуле |
| Queue Depth | Длина очереди URL для обхода |
| Avg Response Time | Среднее время ответа источника |
Хранение метрик
Для временных рядов — специализированные инструменты эффективнее PostgreSQL:
# TimescaleDB (расширение PostgreSQL)
import psycopg2
CREATE TABLE scraper_metrics (
time TIMESTAMPTZ NOT NULL DEFAULT NOW(),
scraper_id INTEGER,
requests_ok INTEGER DEFAULT 0,
requests_fail INTEGER DEFAULT 0,
items_scraped INTEGER DEFAULT 0,
avg_resp_ms FLOAT,
proxy_used TEXT
);
SELECT create_hypertable('scraper_metrics', 'time');
CREATE INDEX ON scraper_metrics (scraper_id, time DESC);
TimescaleDB автоматически партиционирует данные по времени — запросы на недельные/месячные срезы работают быстро даже при миллионах строк.
API для дашборда
@app.get('/api/v1/stats/overview')
async def get_overview(scraper_id: int, period: str = '24h'):
interval = {'1h': '1 hour', '24h': '24 hours', '7d': '7 days'}[period]
rows = await db.fetch(f'''
SELECT
time_bucket('5 minutes', time) AS bucket,
SUM(requests_ok) AS ok,
SUM(requests_fail) AS fail,
SUM(items_scraped) AS items,
AVG(avg_resp_ms) AS avg_ms
FROM scraper_metrics
WHERE scraper_id = $1
AND time > NOW() - INTERVAL '{interval}'
GROUP BY bucket
ORDER BY bucket
''', scraper_id)
return {
'timeline': [dict(r) for r in rows],
'totals': {
'requests': sum(r['ok'] + r['fail'] for r in rows),
'success_rate': sum(r['ok'] for r in rows) / max(sum(r['ok'] + r['fail'] for r in rows), 1),
'items': sum(r['items'] for r in rows),
}
}
Визуализация
import { LineChart, Line, XAxis, YAxis, Tooltip, ResponsiveContainer } from 'recharts';
function MetricsChart({ data }: { data: TimelinePoint[] }) {
return (
<ResponsiveContainer width="100%" height={300}>
<LineChart data={data}>
<XAxis dataKey="bucket" tickFormatter={d => format(new Date(d), 'HH:mm')} />
<YAxis />
<Tooltip />
<Line dataKey="ok" stroke="#22c55e" name="Успешных" strokeWidth={2} dot={false} />
<Line dataKey="fail" stroke="#ef4444" name="Ошибок" strokeWidth={2} dot={false} />
</LineChart>
</ResponsiveContainer>
);
}
Алерты
Порог success rate < 80% — автоматическое уведомление в Telegram с деталями: какой прокси/источник упал.
Сроки
Дашборд с TimescaleDB, REST API и React-визуализацией: 5–8 рабочих дней.







