QA Interview Hub · База знань · Тести
Логи й observability
Observability: логи, метрики, трейси
Логи, метрики й трейси: три сигнали
Моніторинг відповідає на питання, які ми передбачили («CPU > 90%?»). Observability — це здатність пояснити стан системи за її зовнішніми сигналами, зокрема на питання, яких не передбачали («чому лише в користувачів із Safari у Франкфурті повільний checkout?»). Основні сигнали:
- Логи — окремі події з контекстом. Відповідають на «що саме сталося в цьому запиті». Дорогі за обсягом, найдетальніші.
- Метрики — числові ряди в часі (запитів/с, частка помилок, p95 затримки, використання пам’яті). Дешеві, добре агрегуються, показують що і наскільки, але не чому. Основа дашбордів і алертів.
- Трейси — шлях одного запиту через сервіси, розбитий на spans із тривалістю. Відповідають на «де саме загубився час або виникла помилка».
Типовий сценарій розслідування: алерт за метрикою (виросла частка 5xx) → трейс показує, що повільний/помилковий виклик у сервісі оплат → логи цього спана за trace id пояснюють причину (таймаут шлюзу).
Корисні набори метрик: RED для сервісів (Rate, Errors, Duration) і USE для ресурсів (Utilization, Saturation, Errors). Також є golden signals: latency, traffic, errors, saturation.
Для QA: окрім функціональної перевірки відповіді, тест чи ручна перевірка після релізу дивиться на помилки й затримки в метриках; синтетичні тести (synthetic monitoring) регулярно проходять ключові сценарії на проді.
Розподілені трейси, trace id і OpenTelemetry
У мікросервісах один клік користувача породжує ланцюжок викликів. Distributed tracing зв’язує їх в один trace: корінь — це весь запит, а span — окрема операція (HTTP-виклик, запит до БД) з початком, тривалістю, атрибутами й посиланням на батьківський span.
Щоб сервіси знали, що вони частина одного trace, контекст передається в заголовках. Стандарт — W3C Trace Context, заголовок traceparent:
traceparent: 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01
версія-trace id (32 hex)-parent span id (16 hex)-прапорці
Прапорець 01 означає «sampled» (трейс записується). Додатковий заголовок tracestate несе дані вендорів. Старіші системи використовують власні X-Request-Id, X-Correlation-Id чи B3; у логах цей ідентифікатор потрібен у кожному записі — тоді за одним id знаходяться і трейс, і всі пов’язані логи.
OpenTelemetry (OTel) — відкритий, нейтральний до вендорів стандарт і набір SDK для логів, метрик і трейсів:
- API/SDK для мов (інструментування вручну й автоматичне — бібліотеки HTTP, БД, фреймворки);
- OTLP — протокол передачі даних;
- Collector — проміжний сервіс, що приймає, обробляє (фільтр, маскування, семплінг) і розсилає дані в бекенд (Jaeger, Tempo, Datadog тощо).
Семплінг: писати кожен трейс дорого. Head sampling вирішує на початку (наприклад, 5% запитів), tail sampling — після завершення, і тому може лишати всі помилкові й повільні трейси.
Що це дає QA: тест чи ручна перевірка може взяти trace id з відповіді (або згенерувати traceparent сам), після падіння за ним відкрити повний шлях запиту й побачити, який сервіс зламався. Це особливо цінно для e2e, де UI показує лише «щось пішло не так».
Дашборди, алерти, SLI/SLO для QA
Дашборд показує стан системи на одному екрані: частка помилок, p95 затримки, трафік, черги. Хороший дашборд відповідає на «усе гаразд?» за кілька секунд і веде до деталей (drill-down). Алерт — автоматичне сповіщення, коли метрика порушує умову.
Принципи алертів:
- алертити на симптоми для користувача (частка помилок, затримка), а не на кожну внутрішню дрібницю;
- кожен алерт має бути діючим: хтось знає, що робити (runbook); шумні алерти ігнорують («alert fatigue»);
- усереднення ховає проблеми — дивляться на перцентилі (p95/p99), а не лише на середнє.
SLI / SLO / SLA коротко:
- SLI (indicator) — вимірюваний показник якості, наприклад частка успішних запитів або частка відповідей швидше 300 мс;
- SLO (objective) — ціль для SLI за період: «99,9% запитів успішні за 30 днів»;
- SLA — зовнішня договірна обіцянка з наслідками за порушення;
- Error budget — допустима частка невдач (100% − SLO; для 99,9% це 0,1%). Поки бюджет не вичерпано, команда може випускати зміни швидко; якщо вичерпано, пріоритет — надійність.
Де тут QA: перевіряє, що ключові сценарії покриті метриками й алертами (наприклад, алерт справді спрацьовує при інʼєкції помилки в тестовому оточенні); використовує SLO як критерій релізу (канарковий реліз, відкат за метриками); додає синтетичні тести; аналізує, чи інцидент було б упіймано тестом, і додає його.