Спостережуваність: логи, метрики та здоров’я моноліту Laravel і мікросервісів
«У мене працює» — не стратегія моніторингу. У проді ламається системно: диск, черги, таймаути залежностей, відставання реплік. Якісна спостережуваність відповідає: що змінилося, для кого, на якому кроці — без SSH на кожен хост. Логіка однакова для моноліту Laravel і для кількох сервісів; при розділенні зростають проводка та кардинальність сигналів.
Пов’язані матеріали: Пул з’єднань до БД для PHP · БД під навантаженням · API gateway · Sail: troubleshooting
Зміст
- Три опори: логи, метрики, трейси
- Різні середовища
- Моноліт Laravel
- Мікросервіси: кореляція та трасування
- Інструменти: від класики до модерну
- Під навантаженням
- Алерти
- Чекліст
Три опори: логи, метрики, трейси
| Опора | Відповідає на | Типові помилки |
|---|---|---|
| Логи | Що сталося крок за кроком? (помилки, аудит, дебаг) | Рядки без структури; секрети в логах; INFO-потік у проді |
| Метрики | Скільки й наскільки швидше/повільніше ніж учора? | Висока кардинальність лейблів (повний URL, user id на кожній серії) |
| Трейси | Який span у ланцюгу гальмує? | Немає пробросу контексту — сервіс B не знає, що це запит A |
Вони доповнюють одна одну: стрибок частки помилок веде до репрезентативних логів і трейсу повільного чекаута. Жодна опора не замінює інші.
Різні середовища
- Local / dev — максимум швидкості розробника:
tail, Telescope, багатослівні логи, брейкпоінти. Не переносьте ту саму болтливість у прод без фільтрів. - Staging / pre-prod — за можливості ті самі приймачі логів і дашборди, що в проді; ловите помилки інтеграції («працює, доки не ввімкну JSON у Loki»).
- Prod — сигнал, вартість зберігання, редакція PII: структура, рівні, семплінг дебаг-шляхів, health із перевіркою реальних залежностей.
Мета не ідентичний стек скрізь, а узгоджені контракти (однакові імена correlation id і метрик), щоб під час інциденту не вчити систему заново.
Моноліт Laravel
Логування
config/logging.php:stack,daily,syslog, JSON у stdout для контейнерів, куди агент забирає логи.- Структурований
contextзамість вільного тексту, який потім не пошукати. - У контекст — request id, за політикою — user id, id джоба в черзі.
Запит
- Middleware: прийняти вхідний
X-Request-Idабо згенерувати; повернути в відповіді; прокинути в HTTP-клієнти і джоби. Log::withContext()(у сучасних версіях) тримає контекст на запит без ручного протягування.
Черги й розклад
- Horizon — глибина черги, failed jobs, throughput; це першокласний моніторинг, не «додаток до Redis».
- Scheduler: лог початок/кінець/тривалість; алерт на пропуск (heartbeat або зовнішній моніторинг cron).
Глибока діагностика (не прод)
- Telescope — сильний на local/staging; у проді вимкнено або з мережею, auth і семплінгом.
- Laravel Pulse — повільні запити, винятки, черги; стежте за семплінгом і ретеншном.
Здоров’я та помилки
/up(Health) у Laravel 11+: розділяйте liveness («процес живий») і readiness («є БД і кеш») для балансувальників і Kubernetes.- Sentry, Flare, Bugsnag — групування стеків, релізи, breadcrumbs; не замінюють метрики насичення.
Мікросервіси: кореляція та трасування
Коли один HTTP перетворюється на gateway → сервіс A → B → брокер → воркер, access log по сервісах окремо не зшивається в історію.
Correlation ID
- Пробрасуйте стабільний id на кожен вихідний виклик (
X-Request-Idабо W3Ctraceparentразом із внутрішнім id). - Логуйте його на вході кожного сервісу; кладіть у payload джоб і заголовки повідомлень.
Розподілена трасування
- OpenTelemetry — зростаючий вендор-незалежний стандарт; колектор відправляє в Jaeger, Tempo, Zipkin або SaaS.
- Зрілість інструментації PHP перевіряйте під ваш HTTP-клієнт, драйвер БД і бібліотеку черг. Часткові трейси краще за відсутність.
Межі сервісів
- Узгодьте таймаути, ретраї та ідемпотентність; інакше в трейсах буде каскад повторів.
Інструменти: від класики до модерну
Від старіших до набувають популярності (усі ще зустрічаються в проді):
| Епоха / тип | Приклади | Примітка |
|---|---|---|
| Хост і мережа | syslog, rsyslog, logrotate | Транспорт і ротація; ще життєздатні |
| Класичний моніторинг хоста | Nagios, Icinga, Zabbix | Диск, ping, прості проби — база інфраструктури |
| Агрегація логів | ELK, Graylog, Splunk | Потужний пошук; плануйте ємність |
| Метрики й дашборди | Prometheus + Grafana, Alertmanager | Дефакто для K8s і багатьох «залізних» інсталяцій |
| Довгий горизонт / HA | VictoriaMetrics, Mimir, Thanos | Навколо протоколу Prometheus |
| Логи «як метрики» | Grafana Loki | Лейбли замість повного індексу кожного поля |
| Хмари | CloudWatch, Cloud Logging, Azure Monitor | Тісна інтеграція з білінгом хмари |
| SaaS all-in-one | Datadog, New Relic, Honeycomb | Швидкий старт; ціна від обсягу й кардинальності |
| PHP / Laravel | Sentry, Scout, Tideways | Помилки, APM, профілювання |
| Стандартизація | OpenTelemetry (OTel) + collector | Один експорт — багато бекендів; зростає частка нових проєктів |
| eBPF / автоінструментація | різні вендори | Спостереження на рівні ядра без змін коду; не замінює бізнес-логи в Laravel |
Під навантаженням
- Обсяг логів росте з трафіком; debug JSON на кожен запит може з’їсти CPU. Рівні логів і семплінг дебаг-шляхів.
- Лейбли Prometheus: не використовуйте необмежені значення (URL з id, email) — вибух серій.
- Семплінг трейсів: 100% на помилки та повільні запити, решта — вибірка.
- Ретеншн: гарячий шар (дні), холодне сховище, окрема політика для аудиту vs дебагу (комплаєнс).
Алерти
Тривожте про видимі користувачу або близькі збої: прогорання SLO, стрибок error rate, p95 черги, диск, закінчення сертифіката.
Уникайте пейджингу на шум без runbook. «CPU > 80%» п’ять хвилин часто не інцидент; «успішність оплати впала на порядок» — так.
Чекліст
- Структуровані логи в stdout або shipper; один correlation id у синхронних і асинхронних шляхах.
- Золоті сигнали на сервіс: затримка, трафік, помилки, насичення + глибина черги для воркерів Laravel.
- Health з перевіркою реальних залежностей; за потреби розділення liveness / readiness.
- Трекер помилок у проді; Telescope-подібні інструменти поза продом або з жорсткими обмеженнями.
- Ревізія вартості й кардинальності до режиму «логуємо все» / «лейблимо все».
Спостережуваність — частина продукту: той самий Laravel має доказово сказати, коли він ось-ось впаде, і куди дивитися першим.