Представьте: ваш интернет-магазин теряет заказы, но метрики CPU и памяти в норме. Где искать проблему? Мы столкнулись с таким кейсом: клиент жаловался на медленную загрузку страницы корзины. После внедрения кастомных метрик мы обнаружили, что время ответа от платёжного шлюза превышало 5 секунд при нагрузке. Стандартные метрики этого не показывали. Кастомные метрики — единственный способ увидеть реальное поведение приложения. Без них вы слепы: инцидент может стоить до 10% выручки за час простоя. В этой статье разберём, какие метрики стоит кастомизировать, как их настроить в Prometheus и CloudWatch, и сколько времени занимает интеграция. Более 5 лет опыта в мониторинге и 50+ проектов подтверждают: кастомные метрики экономят миллионы на инцидентах.
Какие метрики кастомизировать в первую очередь?
Бизнес-метрики: количество созданных заказов в минуту, конверсия checkout воронки, активные пользовательские сессии. Технические метрики: размер очереди обработки задач, cache hit rate, время выполнения конкретных операций, количество ошибок по типу. Внешние зависимости: latency к сторонним API, доступность платёжного шлюза, статус интеграций. Например, конверсия упала с 3% до 1% — метрику conversion_rate мы бы отслеживали и били тревогу. Для быстрого выявления проблем мы также мониторим 99-й перцентиль времени ответа и количество ошибок базы данных (N+1 query).
Как настроить кастомные метрики в Prometheus?
Для инструментирования Python (FastAPI) используем библиотеку prometheus_client:
from prometheus_client import Counter, Histogram, Gauge
from prometheus_fastapi_instrumentator import Instrumentator
# Счётчик
order_counter = Counter(
'orders_created_total',
'Total orders created',
['status', 'payment_method']
)
# Гистограмма (для percentile)
checkout_duration = Histogram(
'checkout_duration_seconds',
'Time spent in checkout process',
buckets=[0.1, 0.5, 1.0, 2.0, 5.0, 10.0]
)
# Gauge (текущее значение)
queue_size = Gauge(
'task_queue_size',
'Current size of processing queue'
)
# Использование в коде
async def create_order(order_data: dict):
with checkout_duration.time():
result = await process_order(order_data)
order_counter.labels(
status=result.status,
payment_method=order_data['payment_method']
).inc()
return result
Node.js (prom-client):
const client = require('prom-client')
const httpDuration = new client.Histogram({
name: 'http_request_duration_ms',
help: 'Duration of HTTP requests in ms',
labelNames: ['method', 'route', 'code'],
buckets: [1, 5, 15, 50, 100, 200, 500, 1000, 2000]
})
app.use((req, res, next) => {
const end = httpDuration.startTimer()
res.on('finish', () => {
end({ method: req.method, route: req.route?.path, code: res.statusCode })
})
next()
})
После добавления метрик не забудьте экспортировать их через /metrics endpoint и настроить сбор в prometheus.yml.
Что выбрать: Prometheus или CloudWatch?
| Критерий | Prometheus | CloudWatch |
|---|---|---|
| Частота сбора | до 10 мс | 1 минута (минимум) |
| Хранение | локально (до 15 дней) | до 15 месяцев |
| Сложность настройки | выше (нужен свой сервер) | ниже (встроен в AWS) |
| Стоимость | бесплатно (свой хостинг) | плата за метрики |
| Гибкость алертов | высокая (Alertmanager) | средняя (SNS) |
Prometheus позволяет собирать метрики с частотой до 10 мс, что в 20 раз быстрее, чем CloudWatch. Однако CloudWatch удобнее для AWS-окружений. Для детального изучения обратитесь к документации Prometheus и CloudWatch.
Prometheus Rules: Recording и Alerting
Для быстрых дашбордов и своевременных уведомлений мы настраиваем recording и alerting rules. Recording rules предрассчитывают сложные выражения (например, job:request_errors:rate5m), что ускоряет запросы в Grafana. Alerting rules запускают уведомления при превышении порогов. Пример конфигурации:
groups:
- name: app_slo
interval: 30s
rules:
# Recording rule: предрассчитанная метрика ошибок
- record: job:request_errors:rate5m
expr: rate(http_requests_total{status=~"5.."}[5m])
# Alert: высокая ошибка
- alert: HighErrorRate
expr: job:request_errors:rate5m > 0.05
for: 2m
labels:
severity: critical
annotations:
summary: "Error rate {{ $value | humanizePercentage }}"
Alertmanager затем отправляет оповещения в Slack, Telegram или PagerDuty. Это позволяет реагировать за минуты, а не часы.
Как настроить CloudWatch Custom Metrics?
import boto3
cw = boto3.client('cloudwatch')
def put_metric(name: str, value: float, unit: str = 'Count', dimensions: dict = None):
metric_data = {
'MetricName': name,
'Value': value,
'Unit': unit
}
if dimensions:
metric_data['Dimensions'] = [
{'Name': k, 'Value': v} for k, v in dimensions.items()
]
cw.put_metric_data(
Namespace='MyApp/Business',
MetricData=[metric_data]
)
# Использование
put_metric('OrdersCreated', 1, 'Count', {'Environment': 'production'})
put_metric('CheckoutDuration', 0.85, 'Seconds', {'PaymentMethod': 'card'})
put_metric('QueueDepth', queue.size(), 'Count')
CloudWatch Alarm на кастомной метрике:
resource "aws_cloudwatch_metric_alarm" "queue_depth" {
alarm_name = "high-queue-depth"
comparison_operator = "GreaterThanThreshold"
evaluation_periods = 3
metric_name = "QueueDepth"
namespace = "MyApp/Business"
period = 60
statistic = "Maximum"
threshold = 1000
alarm_description = "Task queue is backed up"
dimensions = {
Environment = "production"
}
alarm_actions = [aws_sns_topic.alerts.arn]
ok_actions = [aws_sns_topic.alerts.arn]
}
Что входит в работу?
| Этап | Результат |
|---|---|
| Аудит текущих метрик | Отчёт с рекомендациями и экономическими оценками |
| Выбор инструмента | Prometheus или CloudWatch с обоснованием |
| Инструментирование кода | Исходный код метрик (Python, Node.js, Go, Java) |
| Настройка алертов | Alertmanager/SNS + каналы оповещения (Slack, Telegram, email) |
| Тестирование | Нагрузочные тесты, верификация метрик, проверка алертов |
| Документация и обучение | Runbook, дашборды (Grafana / CloudWatch Dashboard), доступы |
Как мы настраиваем мониторинг за 3-7 дней?
Мы проходим этапы: аудит текущих метрик, выбор инструмента, написание кода метрик, настройка алертов, тестирование, документация и обучение команды. На выходе вы получаете дашборды Grafana (или CloudWatch Dashboard), оповещения в Slack/Telegram/email и полную документацию. Гарантируем SLA 99.9% на корректную работу метрик. При необходимости интегрируем с существующими системами (PagerDuty, Opsgenie).
Пошаговая инструкция: как добавить первую кастомную метрику
- Установите библиотеку
prometheus_client(Python) илиprom-client(Node.js). - Создайте метрику нужного типа (Counter, Histogram, Gauge).
- Инструментируйте код: добавьте вызовы метрики в ключевые точки.
- Экспортируйте метрики (например, через
/metricsendpoint). - Настройте сбор метрик в Prometheus (добавьте job в
prometheus.yml).
Чек-лист: что нужно для настройки
- Установленный Prometheus или доступ к AWS CloudWatch
- Библиотеки для инструментирования
- Доступ к коду приложения
- Настроенный Alertmanager или SNS топик
Почему кастомные метрики экономят бюджет?
Стандартные метрики (CPU, RAM) не показывают бизнес-показатели. Без кастомных метрик вы тратите часы на поиск несуществующих проблем. Один инцидент, обнаруженный с опозданием на час, может стоить больше, чем год обслуживания мониторинга. Кастомные метрики позволяют сократить среднее время обнаружения (MTTD) с часов до минут, а значит, снизить финансовые потери.
Закажите настройку кастомных метрик — получите полный контроль над производительностью и бизнес-показателями вашего приложения. Свяжитесь с нами для бесплатной консультации — мы оценим ваш проект за 1 день. Более 50 проектов по мониторингу и 5+ лет опыта гарантируют результат.







