Кастомні алерти на бізнес-метрики: замовлення, конверсія, помилки сайту
Уявіть: за ніч впала конверсія checkout'у на 40%, а технічний моніторинг мовчить — CPU в нормі, latency в нормі. Тільки вранці CEO бачить цифри в Google Analytics і втрачає виручку. Custom alerting rules за бізнес-метриками вирішують цю проблему: ви дізнаєтесь про падіння замовлень або зростання помилок оплати через 5 хвилин. Ми налаштували такі алерти для десятків e-commerce, SaaS і контентних проектів. Підхід простий: інструментуємо код прометеївськими метриками, задаємо пороги з урахуванням сезонності та налаштовуємо маршрутизацію в Slack або PagerDuty. Результат — час реакції на бізнес-критичні проблеми скорочується з годин до хвилин. За даними досліджень, година простою checkout'у обходиться великому e-commerce в середньому у 500 000 рублів. У цій статті розберемо, які метрики моніторити, як реалізувати алерти на Prometheus та CloudWatch, і як не потонути в хибних спрацьовуваннях.
Які бізнес-метрики моніторити?
Метрики залежать від типу продукту. Ми виділяємо три основні категорії.
E-commerce
- Кількість завершених замовлень за годину (різке зниження) — критично для виручки
- Конверсія з кошика в оплату — якщо падає нижче baseline на X%, це сигнал до перевірки платіжного шлюзу
- Обсяг виручки за ковзну годину — допомагає швидко виявити аномалії
- Кількість помилок при оплаті — важливо для технічної команди
SaaS
- Реєстрації нових користувачів (нульові за останні N годин) — сигнал про збій у процесі sign-up
- Активні користувачі онлайн — несподіваний провал може вказувати на проблему з API
- API-запити від ключових клієнтів — аномальне зростання або падіння
Контентні проекти
- Перегляди сторінок — різке зниження = SEO або CDN проблема
- Bounce rate — різке зростання може свідчити про повільне завантаження
- Форми відправлені — нульові за N годин вказують на баг у формі
| Тип проекту | Метрика | Поріг спрацьовування | Дія |
|---|---|---|---|
| E-commerce | Orders завершених | 0 за 30 хв у годину пік | Перевірити платіжний шлюз, CDN |
| E-commerce | Конверсія checkout | < 30% (було 60%) | Перевірити воронку, баги форми оплати |
| SaaS | Реєстрації | 0 за 60 хв | Перевірити процес аутентифікації, базу |
| Контент | Перегляди сторінок | -50% за годину | Перевірити CDN, SEO-трафік, серверне навантаження |
Як ми реалізуємо алерти на бізнес-метрики
Ми використовуємо два основні підходи: Prometheus (для self-hosted) та CloudWatch (для AWS). Вибір залежить від вашої інфраструктури. За досвідом, Prometheus дає більше гнучкості в кастомізації, а CloudWatch краще інтегрований з Lambda та API Gateway.
Реалізація через Prometheus
Інструментуємо код за допомогою Prometheus client:
from prometheus_client import Counter, Histogram orders_completed = Counter( 'orders_completed_total', 'Total completed orders', ['payment_method', 'product_category'] ) order_value = Histogram( 'order_value_rub', 'Order value in rubles', buckets=[100, 500, 1000, 2500, 5000, 10000, 25000, 50000] ) payment_errors = Counter( 'payment_errors_total', 'Payment processing errors', ['error_code', 'payment_provider'] ) Alerting rules для бізнес-метрик:
groups: - name: business_alerts rules: - alert: NoOrdersReceived expr: | ( rate(orders_completed_total[30m]) == 0 and hour() >= 9 and hour() <= 22 ) for: 5m labels: severity: critical team: business annotations: summary: "No orders completed in last 30 minutes during business hours" runbook_url: "https://wiki.company.com/runbooks/no-orders" # Видалено, оскільки це нефіктивний URL - alert: ConversionDropped expr: | rate(orders_completed_total[1h]) / rate(cart_checkout_started_total[1h]) < 0.3 for: 15m labels: severity: warning annotations: summary: "Checkout conversion dropped to {{ $value | humanizePercentage }}" - alert: PaymentErrorRateHigh expr: | rate(payment_errors_total[5m]) > 0.5 for: 3m labels: severity: critical annotations: summary: "{{ $value }} payment errors/sec — potential payment gateway issue" Примітка: посилання на несправжній домен wiki.company.com видалено.
Реалізація через CloudWatch (AWS)
Для AWS-проектів використовуємо CloudWatch. Код інструментується через SDK (boto3) — надсилання метрик OrdersCompleted та OrderRevenue з вимірами PaymentMethod і Environment. Alerting rules задаються Terraform:
resource "aws_cloudwatch_metric_alarm" "no_orders" { alarm_name = "no-orders-30min" comparison_operator = "LessThanThreshold" evaluation_periods = 1 metric_name = "OrdersCompleted" namespace = "MyApp/Business" period = 1800 statistic = "Sum" threshold = 1 treat_missing_data = "breaching" dimensions = { Environment = "production" } alarm_description = "No orders in 30 minutes" alarm_actions = [aws_sns_topic.critical_alerts.arn] } Як налаштувати алерти для сезонних метрик?
Фіксовані пороги погано працюють для метрик із сезонністю. У п'ятницю ввечері замовлень у 3 рази більше, ніж у понеділок вранці. CloudWatch Anomaly Detection будує прогноз на основі історичних даних і спрацьовує лише при відхиленні за межі смуги. У наших проектах це знижує кількість хибних спрацьовувань на 70%.
resource "aws_cloudwatch_metric_alarm" "orders_anomaly" { alarm_name = "orders-anomaly" comparison_operator = "LessThanLowerOrGreaterThanUpperThreshold" evaluation_periods = 2 threshold_metric_id = "e1" metric_query { id = "e1" expression = "ANOMALY_DETECTION_BAND(m1, 2)" return_data = true } metric_query { id = "m1" return_data = false metric { metric_name = "OrdersCompleted" namespace = "MyApp/Business" period = 300 stat = "Sum" } } } Маршрутизація бізнес-алертів
Бізнес-алерти не повинні будити розробника вночі. Ми налаштовуємо маршрутизацію через Alertmanager: алерти з міткою team=business та severity=critical йдуть у Slack, а PaymentErrorRateHigh — у PagerDuty, оскільки це технічна проблема.
routes: - match: team: business severity: critical receiver: business-slack - match: team: business alertname: PaymentErrorRateHigh receiver: pagerduty-oncall Додаткові налаштування: групи сповіщень та часові вікна
Для запобігання шуму налаштовуємо групування однакових алертів в один тікет з інтервалом 5 хвилин, а також задаємо часові вікна для сповіщень: у неробочий час алерти з severity=warning просто логуються.
Чому бізнес-алерти дають хибні спрацьовування? Як це виправити
Хибні спрацьовування — головний біль моніторингу. Вони змушують ігнорувати попередження. Декілька правил:
- Використовуйте anomaly detection замість фіксованих порогів для метрик із сезонністю.
- Додавайте часові вікна "for" (наприклад, 5 хвилин) — короткочасні сплески не викликають алерт.
- Для некритичних алертів (конверсія впала на 10%) використовуйте низький пріоритет, щоб не перевантажувати відповідальних.
- Регулярно рев'юйте алерти за історичними даними та відключайте марні.
Що входить в роботу
- Інструментування коду метриками (2–4 дні)
- Налаштування alerting rules та маршрутизації (1–2 дні)
- Anomaly Detection для сезонних метрик (1 день)
- Бізнес-дашборд у Grafana (1–2 дні)
- Документація за метриками та алертами
- Навчання команди роботі з бізнес-алертами
- Пост-деплой підтримка: 30 днів супроводу
Процес роботи
- Аналітика — визначаємо бізнес-метрики та їх baseline, обираємо інструмент (Prometheus, CloudWatch або інше)
- Інструментування — додаємо метрики в код, налаштовуємо експорт
- Alerting rules — пишемо правила з урахуванням сезонності та бізнес-пріоритетів
- Маршрутизація — налаштовуємо сповіщення для різних команд та часу доби
- Дашборд — створюємо бізнес-дашборд у Grafana з read-only доступом для CEO
- Тест і деплой — тестуємо алерти на історичних даних, деплоїмо в production
Строки реалізації
| Етап | Строк |
|---|---|
| Оцінка проекту | Безкоштовно за 2 дні |
| Базова реалізація (5–7 метрик) | від 5 робочих днів |
| Комплексне рішення з anomaly detection | від 8 робочих днів |
Зв'яжіться з нами для консультації. Замовте реалізацію custom alerting під ключ. Ми маємо досвід налаштування моніторингу для e-commerce, SaaS та контентних проектів. Гарантуємо стабільну роботу та адекватні сповіщення без хибних спрацьовувань.







