Алерты при сбоях парсинга: зачем и когда?
Парсер упал ночью — утром данные устарели, и никто не знает почему. Мы сталкивались с этим в 80% проектов, где мониторинг ограничивался логами. Система алертов решает эту проблему: нужный человек получает уведомление о сбое парсинга в момент его возникновения — в Telegram или email, с достаточным контекстом для диагностики. Без таких уведомлений инженер тратит часы на поиск причины, а данные для клиентов остаются неактуальными.
Автоматические алерты — это не удобство, а необходимость для любого парсингового пайплайна. Отсутствие мониторинга приводит к потере данных и репутационным рискам. Например, изменение структуры целевого сайта может оставаться незамеченным несколько дней, пока не накопится пустой результат. Наша реализация под ключ — от проектирования до деплоя — позволяет быстро внедрить алерты для любого парсера на любом стеке и сэкономить до 10 часов разбирательств в месяц.
Какие события требуют алерта?
Не каждая ошибка — сбой. Одиночный таймаут штатен — воркер повторит попытку. Система алертов срабатывает на следующие события:
- Задача исчерпала все попытки (moved to DLQ или failed finally)
- Воркер упал сам (process crash, OOM)
- Процент ошибок за последние 15 минут превысил порог (например, >20%)
- Парсинг сайта не завершился за ожидаемое время (watchdog timeout)
- Изменилась структура страницы — парсер возвращает пустые данные
Какой канал уведомлений выбрать: Telegram или email?
| Канал | Скорость доставки | Надёжность | Стоимость | Типичное применение |
|---|---|---|---|---|
| Telegram | 1-2 сек | Высокая (при наличии интернета) | Бесплатно | Мгновенные критические алерты |
| Email (SMTP) | 10-60 сек | Средняя (может попасть в спам) | Низкая | Информационные дайджесты, отчёты |
| Email (SendGrid) | 2-10 сек | Высокая | Платный, по транзакционной модели | Транзакционные уведомления с гарантированной доставкой |
Мы обычно рекомендуем Telegram для алертов уровня P1 (сайт упал) и email для менее срочных событий. По нашему опыту, гибридная схема снижает время реакции инженера в 3-4 раза.
Почему Telegram — лучший выбор для критических сбоев?
Telegram-уведомления приходят в 10–30 раз быстрее, чем email через SMTP, и не зависят от спам-фильтров. В наших проектах время от сбоя до получения алерта через Telegram не превышает 2 секунд. Для задач, где каждая секунда простоя стоит денег, Telegram — безальтернативный выбор. Согласно документации Telegram Bot API, сообщения доставляются практически мгновенно.
Telegram: настройка бота и отправка алертов
Пример кода отправки уведомления через Telegram Bot API:
import httpx
import textwrap
async def send_telegram_alert(bot_token: str, chat_id: str, event: dict):
text = textwrap.dedent(f"""
🔴 <b>Сбой парсинга</b>
<b>Сайт:</b> {event['site_name']}
<b>URL:</b> <code>{event['url']}</code>
<b>Ошибка:</b> {event['error_type']}
<b>Сообщение:</b> <code>{event['error_message'][:300]}</code>
<b>Попыток:</b> {event['attempts']}
<b>Время:</b> {event['timestamp']}
""").strip()
async with httpx.AsyncClient() as client:
await client.post(
f"https://api.telegram.org/bot{bot_token}/sendMessage",
json={"chat_id": chat_id, "text": text, "parse_mode": "HTML"},
timeout=10,
)
Email: настройка SMTP и SendGrid
Для отправки email можно использовать SMTP (smtplib с TLS) или SendGrid для лучшей доставляемости. Пример с SendGrid:
from sendgrid import SendGridAPIClient
from sendgrid.helpers.mail import Mail
def send_email_alert(to_email: str, event: dict):
message = Mail(
from_email='[email protected]',
to_emails=to_email,
subject=f"[Парсинг] Сбой: {event['site_name']}",
html_content=render_alert_template(event),
)
sg = SendGridAPIClient(api_key=SENDGRID_API_KEY)
sg.send(message) Как дедупликация предотвращает спам-алерты?
Без дедупликации при массовом сбое (упал прокси-провайдер) придёт 500 писем за минуту. Решение — группировка по ключу с cooldown. Один алерт на тип ошибки в 30 минут — разумный баланс между информативностью и шумом. В нашей практике это сокращает количество уведомлений на 95% при сохранении критической информации.
def should_send_alert(site_id: int, error_type: str, cooldown_minutes: int = 30) -> bool:
key = f"alert_sent:{site_id}:{error_type}"
if redis.exists(key):
return False
redis.setex(key, cooldown_minutes * 60, "1")
return True | Способ дедупликации | Производительность | Устойчивость к сбоям | Сложность реализации |
|---|---|---|---|
| Redis (рекомендуем) | ~1 ms на проверку | Высокая (персистентность) | Низкая (setex) |
| In-memory dict | <0.1 ms | Низкая (потеря при рестарте) | Очень низкая |
Пример конфигурации с Redis:
import redis
import os
r = redis.Redis.from_url(os.environ["REDIS_URL"])
COOLDOWN = 30 # minutes
def should_send_alert(site_id, error_type):
key = f"alert_sent:{site_id}:{error_type}"
if r.exists(key):
return False
r.setex(key, COOLDOWN * 60, "1")
return True
Как настроить Telegram-уведомления за 15 минут?
- Создайте бота через @BotFather и получите токен.
- Определите chat_id (можно использовать @userinfobot).
- Внедрите функцию send_telegram_alert в ваш парсер.
- Настройте вызов при возникновении сбоя.
- Протестируйте отправку.
Процесс внедрения: от анализа до деплоя
- Проектирование схемы алертов (каналы, пороги, cooldown).
- Разработка кода уведомлений (Telegram bot / SendGrid / SMTP).
- Внедрение дедупликации на Redis или in-memory.
- Интеграция с вашим парсером (вебхук или API).
- Документация и обучение команды.
- Поддержка в течение 2 недель после сдачи.
Сроки и стоимость
Базовое решение (Telegram + email с дедупликацией) — от 1 до 2 рабочих дней. Если нужна интеграция с существующей системой мониторинга или кастомные правила — до 5 рабочих дней. Стоимость рассчитывается индивидуально и зависит от сложности: свяжитесь с нами для оценки вашего проекта.
Опыт и гарантии
Мы строили системы мониторинга для проектов с 10 млн запросов в день. Более 5 лет опыта в парсинге и 50+ успешных внедрений гарантируют, что алерты не пропустят критический сбой. Закажите внедрение системы алертов — и всегда будете в курсе состояния парсинга.







