Наблюдаемост: логове, метрики и здраве на Laravel монолит и микросервиси

„При мен работи“ не е стратегия за мониторинг. В продукшън нещата се чупят по шаблони: диск, опашки, таймаути, реплики. Добрата наблюдаемост отговаря какво се промени, за кого и на коя стъпка — без SSH на всеки сървър. Същите принципи важат за Laravel монолит и за много услуги; при разделяне растат тръбопроводът и кардиналността.

Свързани материали: Пул връзки към БД за PHP · Бази под натоварване · API gateway · Sail: troubleshooting

Съдържание


Три стълба: логове, метрики, траси

Стълб Отговаря на Типични грешки
Логове Какво се случи стъпка по стъпка? Неструктуриран текст; секрети; 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 или W3C traceparent заедно с вътрешен 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%“ пет минути често не е инцидент; „успеваемост на плащане падна десетократно“ — да.


Чеклист

  1. Структурирани логове към stdout или shipper; един correlation id в sync и async пътища.
  2. Златни сигнали на услуга: латентност, трафик, грешки, насищане + дълбочина на опашката за Laravel работници.
  3. Health с проверка на реални зависимости; където трябва — liveness / readiness.
  4. Тракер на грешки в прод; Telescope-подобни извън прод или с твърди ограничения.
  5. Преглед на цена и кардиналност преди „логваме всичко“.

Наблюдаемостта е част от продукта: същият Laravel трябва с доказателства да казва кога е на ръба на срив и къде да се гледа първо.