Наблюдаемость бэкенда — метрики, логи и аудит
Наблюдаемость — способность понять внутреннее состояние системы по внешним сигналам. Для бэкенда критично не смешивать три разных потока данных.
Развёрнутая инфраструктурная сторона: мониторинг и логирование. Поиск по каталогу и тексту в продукте: полнотекстовый поиск.
Три слоя
| Слой | Вопрос | Примеры | Не путать с |
|---|---|---|---|
| Метрики | «Сколько и как быстро?» | RPS, latency p99, error rate, CPU | Текстом описывать каждый запрос |
| Логи | «Что случилось в коде?» | stack trace, timeout к БД, order_id=… | Персональные данные без маскировки |
| Аудит | «Кто изменил что?» | user_id сменил роль, экспорт CSV | Debug-логи уровня TRACE |
Метрики (Prometheus-стиль)
Типы:
| Тип | Смысл | Пример |
|---|---|---|
| Counter | Только растёт | http_requests_total{status="500"} |
| Gauge | Текущее значение | db_connections_active |
| Histogram | Распределение | длительность запроса в корзинах |
| Summary | Квантили (реже) | p95 latency на клиенте |
Правила для разработчика:
- метки (labels) — низкая кардинальность (
route,method), неuser_id; - считайте золотые сигналы: latency, traffic, errors, saturation;
- алерт на симптом (рост 5xx), не на «CPU 80%» без контекста.
Запросы в духе rate(http_errors[5m]) — зона SRE; разработчику достаточно экспортировать метрики и знать, где дашборд.
Логи
Структурированные логи (JSON) упрощают поиск:
{
"level": "error",
"msg": "payment failed",
"request_id": "7f3a…",
"order_id": "ord_42",
"duration_ms": 1203
}
Уровни:
- ERROR — требует внимания, влияет на пользователя;
- WARN — деградация, retry;
- INFO — бизнес-значимые вехи (старт, останов);
- DEBUG — только на staging или кратковременно в проде.
Корреляция: один request_id / trace_id через API Gateway → сервисы → БД. Без этого микросервисы неотлаживаемы.
Middleware (идея на Python/FastAPI или Flask):
import uuid
from flask import Flask, g, request
app = Flask(__name__)
@app.before_request
def assign_request_id():
g.request_id = request.headers.get("X-Request-Id") or str(uuid.uuid4())
@app.after_request
def echo_request_id(response):
response.headers["X-Request-Id"] = g.request_id
return response
В логах всегда передавайте тот же request_id в поле JSON — тогда строки из разных сервисов склеиваются в одну цепочку.
Не логируйте: пароли, полные PAN карт, токены, тела запросов с PII по умолчанию.
Аудит
Аудит — юридически и организационно значимый журнал:
- неизменяемость или WORM-хранение;
- долгий retention;
- поля: кто, когда, откуда (IP), что изменил (до/после).
Отдельная таблица или поток Kafka → холодное хранилище. Не смешивайте с console.log при отладке скидок.
Трассировка (четвёртый столп)
Distributed tracing (OpenTelemetry) связывает spans между сервисами. Дополняет логи: видно, на каком hop потерялись 800 ms.
Минимум для старта: propagate заголовок trace context из входящего HTTP в исходящие вызовы.
Health check и smoke
| Проверка | Уровень | Назначение |
|---|---|---|
| Liveness | Процесс жив | Перезапуск пода |
| Readiness | Готов принимать трафик | Исключение из LB при недоступной БД |
| Smoke test | После деплоя | «Логин + один критичный сценарий» проходит |
Readiness не должен дергать тяжёлые отчёты — только зависимости, без которых сервис бессмысленен.
Антипаттерны
- Логировать всё на INFO в проде → дорого и бесполезно.
- Метрика с label
url=/users/123→ взрыв кардинальности. - Искать причину только по среднему времени ответа — смотрите p95/p99.
- Хранить аудит в той же БД без политики удаления → риск подмены.
Связанные темы
См. также
Другие статьи этого же раздела в боковом меню (как на странице «О разделе»). Клиентская часть приложения: HTML, CSS, JavaScript, фреймворки, работа с API. Node.js используется как среда сборки (Vite, Webpack), но не является частью клиентской логики в браузере. ★ Серверная часть (Backend) — невидимый для пользователя слой приложения, отвечающий за бизнес-логику, хранение и обработку данных, а также взаимодействие с внешними системами. Метрики веб-приложений: QPS, TPS, latency, перцентили, трассировка и примеры инструментирования для объективной оценки производительности. Матрица навыков серверной разработки веб-приложений по уровням junior → middle → middle+ с привязкой к материалам энциклопедии. Большинство бэкендов в продакшене работают на Linux (или совместимых системах). Пользователь жалуется: «сайт тормозит». Часть причин — не в SQL и не в алгоритме, а в пути пакета от клиента до сервера и обратно. Регистрация, сброс пароля, счета, уведомления — email остаётся надёжным каналом, когда push и мессенджеры недоступны. Один и тот же бизнес можно вывести в интернет разными способами. От выбора зависят: формат API, кэширование, SEO, сложность деплоя и то, что именно пишет бэкенд-разработчик. Краткие итоги раздела «Фронтенд и бэкенд». Чек-лист раздела Фронтенд и бэкенд — вопросы для самопроверки в энциклопедии Вселенная IT.Фронтенд
Бэкенд
Метрики производительности веб-приложений
Компетенции бэкенд-разработчика
Linux для бэкенд-разработчика
Сеть для диагностики бэкенда
Исходящая почта на бэкенде
Типы веб-приложений и роль бэкенда
Итоги
Чек-лист самопроверки