Алерты при сбоях парсинга: зачем и когда?
Парсер упал ночью — утром данные устарели, и никто не знает почему. Мы сталкивались с этим в 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+ успешных внедрений гарантируют, что алерты не пропустят критический сбой. Закажите внедрение системы алертов — и всегда будете в курсе состояния парсинга.







