Урок 04

Laravel Pulse: метрики приложения

Что такое Pulse

Laravel Pulse — дашборд метрик приложения от создателей Laravel.

Что даёт:

  • Slow requests.
  • Slow queries.
  • Slow jobs.
  • Exceptions.
  • Queue sizes.
  • User activity.
  • Cache hit rate.
  • Server metrics.

Правило: первый инструмент для Laravel-приложения.

Установка

composer require laravel/pulse
php artisan pulse:install
php artisan migrate

Что создаёт:

  • Таблицы для метрик.
  • Конфиг config/pulse.php.
  • Провайдер PulseServiceProvider.
  • Дашборд на /pulse.

Доступ

По умолчанию — только local.

Открыть в проде:

app/Providers/PulseServiceProvider.php:

protected function gate(): void
{
    Gate::define('viewPulse', function (User $user) {
        return $user->is_admin;
    });
}

Правило: только для админов.

Дашборд

URL: /pulse.

Что видно:

  • Сводка по метрикам.
  • Графики за период.
  • Фильтр по времени.
  • Детали при клике.

Slow Requests

Что показывает:

  • Самые медленные HTTP-запросы.
  • Time — сколько занимают.
  • Path.
  • Count — сколько раз.

Что смотреть:

  • Топ-10 по времени.
  • Топ-10 по частоте.

Что делать:

  • Клик → посмотреть детали.
  • Найти причину.
  • Оптимизировать.

Slow Queries

Что показывает:

  • Самые медленные SQL-запросы.
  • Query — текст.
  • Time.
  • Count.

Что искать:

  • Без индексов.
  • N+1.
  • Тяжёлые JOIN.

Правило: каждая медленная query — кандидат на оптимизацию.

Slow Jobs

Что показывает:

  • Медленные задачи в очереди.
  • Job — класс.
  • Time.
  • Queue.

Что делать:

  • Разбить на части.
  • Оптимизировать логику.
  • Проверить внешние вызовы.

Exceptions

Что показывает:

  • Все исключения.
  • Тип.
  • Сообщение.
  • Count.

Что делать:

  • Проверить логи.
  • Исправить причину.
  • Убедиться, что не спам.

Queue Sizes

Что показывает:

  • Размер очередей.
  • Сколько ждёт.
  • Растёт / падает.

Что смотреть:

  • Рост — проблема.
  • Большой размер — добавить воркеров.

User Activity

Что показывает:

  • Активные пользователи.
  • Запросы по времени.
  • Пиковые часы.

Что даёт: понимание нагрузки.

Cache Metrics

Что показывает:

  • Hit rate — % попаданий.
  • Miss rate.
  • Общее число запросов.

Цель: hit rate > 90%.

Что делать:

  • Увеличить TTL.
  • Правильные ключи.
  • Добавить кеш.

Server Metrics

Что показывает:

  • CPU.
  • RAM.
  • Disk.
  • Network.

Требует: настройки.

Правило: полезно, но не заменяет Prometheus.

Custom Metrics

Свои метрики:

use Laravel\Pulse\Facades\Pulse;
use Laravel\Pulse\Recordables\Value;

Pulse::record('order.created', Value::sum($total));

Что даёт: бизнес-метрики в дашборде.

Record Types

Что можно:

  • Value — сумма, среднее, max.
  • Trend — тренд.
  • Aggregate — агрегат.

Свои карточки

Класс:

namespace App\Livewire;

use Laravel\Pulse\Livewire\Card;

class Orders extends Card
{
    public function render()
    {
        return view('livewire.orders', [
            'orders' => Order::count(),
        ]);
    }
}

Регистрация:

// config/pulse.php
'dashboard' => [
    'cards' => [
        'orders' => [
            'enabled' => true,
        ],
    ],
],

Retention

Что важно: хранить не вечно.

config/pulse.php:

'storage' => [
    'trim' => [
        'keep' => env('PULSE_TRIM_KEEP', '7 days'),
    ],
],

Что даёт: автоочистка старых.

Alerts

На основе Pulse:

if (Pulse::values('slow_queries')->count() > 100) {
    Notification::route('slack', 'webhook')->notify(new SlowQueriesAlert());
}

Что даёт: оповещение при аномалии.

Сравнение с Telescope

PulseTelescope
НазначениеПрод-метрикиDev-отладка
ПроизводительностьЛёгкийТяжёлый
ДанныеАгрегатыДетали
ПродДаТолько dev

Правило: Pulse в проде, Telescope в dev.

Практика

1. Установите Pulse.

2. Настройте доступ через Gate.**

3. Откройте /pulse.**

4. Найдите топ-10 slow requests.

5. Найдите топ-10 slow queries.

6. Проверьте queue sizes.

7. Проверьте cache hit rate.

8. Добавьте 1 custom metric.

9. Настройте retention.

Частые ошибки

1. Публичный доступ:

Все видят метрики

Решение: Gate.

2. Без retention:

БД растёт

Решение: keep.

3. Ignore slow queries:

Не оптимизировать

Решение: разбирать.

4. Не смотреть cache hit rate:

Низкий процент

Решение: регулярно.

5. Puse в dev:

Тяжелее, чем нужно

Решение: Telescope в dev.

6. Без custom metrics:

Не видеть бизнес

Решение: добавить.

7. Игнорировать exceptions:

Ошибки копятся

Решение: Sentry + Pulse.

8. Разово:

Деградация

Решение: мониторинг.

Итог

  • Pulse — метрики прода.
  • Slow requests — топ.
  • Slow queries — оптимизация.
  • Slow jobs — очереди.
  • Cache hit rate — > 90%.
  • Queue sizes — следить.
  • Custom metrics — бизнес.
  • Gate — доступ.
  • Retention — 7 дней.
  • Pulse + Telescope — вместе.

Дальше — Laravel Telescope: отладка в dev.