Наблюдаемост: логове, метрики и здраве на Laravel монолит и микросервиси
„При мен работи“ не е стратегия за мониторинг. В продукшън нещата се чупят по шаблони: диск, опашки, таймаути, реплики. Добрата наблюдаемост отговаря какво се промени, за кого и на коя стъпка — без SSH на всеки сървър. Същите принципи важат за Laravel монолит и за много услуги; при разделяне растат тръбопроводът и кардиналността.
Свързани материали: Пул връзки към БД за PHP · Бази под натоварване · API gateway · Sail: troubleshooting
Съдържание
- Три стълба: логове, метрики, траси
- Среди
- Laravel монолит
- Микросервиси
- Инструменти
- Под натоварване
- Аларми
- Чеклист
Три стълба: логове, метрики, траси
| Стълб | Отговаря на | Типични грешки |
|---|---|---|
| Логове | Какво се случи стъпка по стъпка? | Неструктуриран текст; секрети; INFO потоп в прод |
| Метрики | Колко и колко бързо спрямо вчера? | Висока кардиналност на етикети (пълен URL, user id на всяка серия) |
| Траси | Кой span в веригата е бавен? | Липса на propagation — услуга B не знае заявка A |
Те се подсилват взаимно: скок на грешките води до типични логове и траса на бавен checkout. Един стълб не заменя останалите.
Среди
- Local / dev — максимална скорост на разработчика:
tail, Telescope, подробни логове, breakpoints. Не пренасяйте същата болтливост в прод без филтри. - Staging — където е възможно същите приемници на логове и табла като в прод; хващате „работи, докато не пуснем JSON към Loki“.
- Prod — сигнал, цена на съхранение, редакция на лични данни, нива, семплиране на debug пътища, 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 — дълбочина, throughput, failed jobs: мониторинг от първи клас.
- Scheduler: логирайте старт/край/продължителност; аларм за пропуснато изпълнение.
Дълбока диагностика (не прод)
- Telescope — силен за local/staging; в прод изключен или с мрежа, auth и семплиране.
- Laravel Pulse — бавни заявки, изключения, опашки; внимавайте с семплиране и retention.
Здраве и грешки
/up(Health) в Laravel 11+: liveness („процесът тече“) срещу readiness („има връзка с БД и кеш“).- Sentry, Flare, Bugsnag — групирани стекове, релизи; не заменят метриките за насищане.
Микросервиси
Когато един HTTP стане gateway → A → B → брокер → работник, access log по услуги поотделно не сглобява историята.
Correlation ID
- Пробросете стабилен id на всеки изходящ повик (
X-Request-Idили W3Ctraceparentзаедно с вътрешен id). - Логвайте го на вход на всяка услуга; сложете в payload на задачи и заглавия на съобщения.
Разпределена трасация
- OpenTelemetry — нарастващ независим от доставчик стандарт; колекторът праща към Jaeger, Tempo, Zipkin или SaaS.
- Зрялостта на инструментацията за PHP проверете за вашия HTTP клиент, драйвер на БД и опашка. Частични траси са по-добре от нула.
Граници
- Уеднаквете таймаути, повторения и идемпотентност — иначе виждате каскада от retries в траси.
Инструменти
От по-стари към набиращи популярност (всички още се срещат):
| Епоха / тип | Примери | Бележка |
|---|---|---|
| Хост и мрежа | syslog, rsyslog, logrotate | Транспорт и ротация |
| Класически хост мониторинг | Nagios, Icinga, Zabbix | Диск, ping, прости проби |
| Агрегация на логове | ELK, Graylog, Splunk | Мощно търсене; капацитет |
| Метрики | Prometheus + Grafana, Alertmanager | Дефакто за Kubernetes |
| Дълъг хоризонт / HA | VictoriaMetrics, Mimir, Thanos | Около протокола Prometheus |
| Логове „като метрики“ | Grafana Loki | Етикети вместо пълен индекс на всичко |
| Облаци | CloudWatch, Cloud Logging, Azure Monitor | |
| SaaS all-in-one | Datadog, New Relic, Honeycomb | Бърз старт; цена от обем |
| PHP | Sentry, Scout, Tideways | Грешки и APM |
| Стандартизация | OpenTelemetry + collector | Един експорт — много бекенди |
| eBPF / автоинструментация | различни | Ядрено ниво без промени в кода; не замества бизнес логове в Laravel |
Под натоварване
- Обемът на логовете расте с трафика; debug JSON на заявка може да изяде CPU. Нива и семплиран debug на горещи пътища.
- Етикети в Prometheus: без неограничени стойности (URL с id, имейл) — експлозия от серии.
- Семплиране на траси: 100% при грешки и бавни заявки, останалото — извадка.
- Retention: горещ слой, студено съхранение, отделна политика за одит срещу debug.
Аларми
Алармирайте за видимо за потребителя или близък срив: изгаряне на SLO, скок на error rate, p95 на опашката, диск, изтичане на сертификат.
Избягвайте пейджинг за шум без runbook. „CPU > 80%“ пет минути често не е инцидент; „успеваемост на плащане падна десетократно“ — да.
Чеклист
- Структурирани логове към stdout или shipper; един correlation id в sync и async пътища.
- Златни сигнали на услуга: латентност, трафик, грешки, насищане + дълбочина на опашката за Laravel работници.
- Health с проверка на реални зависимости; където трябва — liveness / readiness.
- Тракер на грешки в прод; Telescope-подобни извън прод или с твърди ограничения.
- Преглед на цена и кардиналност преди „логваме всичко“.
Наблюдаемостта е част от продукта: същият Laravel трябва с доказателства да казва кога е на ръба на срив и къде да се гледа първо.