Мониторинг производительности с Laravel Pulse

Laravel Pulse — это мощный инструмент, предназначенный для предоставления подробной информации о производительности и использовании вашего приложения. С помощью Pulse вы можете легко отслеживать узкие места, выявлять медленные задания и конечные точки, а также получать ценную информацию о взаимодействии с пользователями. Это подробное руководство проведет вас через установку, настройку и настройку Laravel Pulse.

Установка

  • Установите пакет Pulse с помощью Composer:
composer require laravel/pulse
  • Запустите команду миграции, чтобы создать необходимые таблицы для хранения данных Pulse:
php artisan migrate
  • Войдите в панель управления Pulse по маршруту /pulse.

Примечание. Если вы используете ядро ​​базы данных, отличное от MySQL, вам может потребоваться отдельная база данных MySQL для данных Pulse. Настройте файл composer.json, чтобы разрешить выпуск бета-пакетов на этапе бета-тестирования.

"minimum-stability": "beta",
"prefer-stable": true

Конфигурация

Параметры конфигурации Pulse можно контролировать с помощью переменных среды. Чтобы изучить доступные параметры, зарегистрировать новые рекордеры или настроить дополнительные параметры, опубликуйте файл конфигурации config/pulse.php:

php artisan vendor:publish --tag=pulse-config

Авторизация на панели управления

Настройте авторизацию для доступа к панели управления Pulse в производственных средах, настроив шлюз авторизации viewPulse. Отредактируйте файл AuthServiceProvider.php:

Ларавел Пульс

use App\Models\User;
use Illuminate\Support\Facades\Gate;

Gate::define('viewPulse', function (User $user) {
    return $user->isAdmin();
});

Кастомизация

Карточки и макет информационной панели Pulse можно настроить, опубликовав вид информационной панели:

php artisan vendor:publish --tag=pulse-dashboard

Настройте панель мониторинга с помощью компонентов Livewire без необходимости перестраивать ресурсы JavaScript.

<x-pulse full-width>
    <!-- ... -->
</x-pulse>

Cards

1. Servers Card

  • Компонент: <livewire:pulse.servers />
  • Описание: Отображает использование системных ресурсов для всех серверов, на которых выполняется команда pulse:check.
  • Использование: отслеживает использование ЦП, памяти и хранилища серверами, на которых работает ваше приложение.
  • Дополнительные примечания: Требуется, чтобы команда pulse:check была запущена на каждом сервере, который вы хотите отслеживать. Каждый сервер отчетов должен иметь уникальное имя.

2. Использование Card приложения

  • Компонент: <livewire:pulse.usage />
  • Описание: Отображает пользователей, которые чаще всего отправляют запросы к вашему приложению, отправляют задания и сталкиваются с медленными запросами.
  • Использование: Предоставляет информацию о взаимодействии пользователей, активных пользователях и показателях производительности.
  • Настройка: позволяет настраивать разрешение и отображение пользователя путем вызова метода Pulse::users.

3. Exceptions Card

  • Компонент: <livewire:pulse.exceptions />
  • Описание: Показывает частоту и давность исключений, возникающих в вашем приложении.
  • Применение: Помогает выявлять и отслеживать исключения в зависимости от класса и места, где они произошли.
  • Конфигурация: позволяет регулировать частоту дискретизации, игнорировать шаблоны исключений и фиксировать местоположение исключений.

4. Queues Card

  • Компонент: <livewire:pulse.queues />
  • Описание: Отображает пропускную способность очередей вашего приложения, включая количество заданий, поставленных в очередь, обработанных, обработанных, выпущенных и неудачных.
  • Использование: Отслеживает производительность и состояние очередей вашего приложения.
  • Конфигурация: Дополнительные настройки частоты выборки и игнорируемых шаблонов заданий.

5. Slow Requests Card

  • Компонент: <livewire:pulse.slow-requests />
  • Описание: Показывает входящие запросы к вашему приложению, превышающие настроенный порог.
  • Применение: Выявляет и устраняет медленно выполняющиеся запросы.
  • Конфигурация: регулирует порог медленного запроса, частоту дискретизации и игнорируемые пути.

6. Slow Jobs Card

  • Компонент: <livewire:pulse.slow-jobs />
  • Описание: Отображает задания в очереди вашего приложения, которые превышают настроенный порог.
  • Применение: Выявляет и устраняет медленно выполняемые задания.
  • Конфигурация: регулирует порог медленного задания, частоту выборки и шаблоны игнорируемых заданий.

7. Slow Queries Card

  • Компонент: <livewire:pulse.slow-queries />
  • Описание: Показывает запросы к базе данных вашего приложения, которые превышают настроенный порог.
  • Применение: Выявляет и устраняет медленно выполняющиеся запросы к базе данных.
  • Конфигурация: настраивает порог медленного запроса, частоту выборки и шаблоны игнорируемых запросов.

8. Slow Outgoing Requests Card

  • Компонент: <livewire:pulse.slow-outgoing-requests />
  • Описание: Показывает исходящие запросы, сделанные с помощью HTTP-клиента Laravel, которые превышают настроенный порог.
  • Использование: Отслеживает медленно выполняющиеся исходящие запросы.
  • Конфигурация: регулирует порог медленного исходящего запроса, частоту выборки и игнорируемые шаблоны URL-адресов.

9. Cache Card

  • Компонент: <livewire:pulse.cache />
  • Описание: Показывает статистику попаданий и промахов кеша для вашего приложения как глобально, так и для отдельных ключей.
  • Использование: Отслеживает взаимодействие с кэшем и производительность.
  • Конфигурация: настраивает группировку записей кэша по ключу и необязательную нормализацию ключей с использованием регулярных выражений.

Захват записей

Сбор записей в Laravel Pulse — это процесс сбора и записи данных из вашего приложения для хранения в базе данных Pulse. Pulse фиксирует различные события и действия, чтобы получить представление о производительности и использовании вашего приложения. Вот подробности о захвате записей:

1. Обзор

Pulse использует устройства записи для записи записей из вашего приложения. Эти регистраторы отвечают за сбор информации о конкретных событиях или действиях, таких как взаимодействие с кэшем, исключения, очереди, медленные запросы и многое другое. Собранные данные затем сохраняются в базе данных Pulse для последующего анализа и визуализации.

2. Регистраторы (Recorders)

Pulse поддерживает несколько устройств записи, каждое из которых предназначено для записи определенных типов записей. Вот некоторые ключевые регистраторы и их функции:

Регистратор взаимодействий с кэшем

  • Сорт: Recorders\CacheInteractions::class
  • Описание: Собирает информацию о попаданиях и неудачах в кэше, происходящих в вашем приложении.
  • Конфигурация:Регулировка частоты дискретизации.
  • Игнорируются ключевые шаблоны.
  • Группировка ключей с использованием регулярных выражений.

Регистратор исключений

  • Сорт: Recorders\Exceptions::class
  • Описание: Собирает информацию о отчетных исключениях, возникающих в вашем приложении.
  • Конфигурация:Регулировка частоты дискретизации.
  • Игнорируемые шаблоны исключений.
  • Возможность зафиксировать местоположение, из которого возникло исключение.


Регистратор очередей

  • Сорт: Recorders\Queues::class
  • Описание: Собирает информацию об очередях вашего приложения.
  • Конфигурация:Регулировка частоты дискретизации.
  • Игнорирование шаблонов работы.


Регистратор медленных заданий

  • Сорт: Recorders\SlowJobs::class
  • Описание: Собирает информацию о медленных заданиях, происходящих в вашем приложении.
  • Конфигурация:Медленная регулировка порога задания.
  • Регулировка частоты дискретизации.
  • Игнорирование шаблонов работы.

Регистратор медленных исходящих запросов

  • Сорт: Recorders\OutgoingRequests::class
  • Описание: Собирает информацию об исходящих HTTP-запросах, выполненных с помощью HTTP-клиента Laravel, которые превышают настроенный порог.
  • Конфигурация:Регулировка порога медленного исходящего запроса.
  • Регулировка частоты дискретизации.
  • Игнорируемые шаблоны URL.
  • Группировка URL-адресов с использованием регулярных выражений.


Регистратор медленных запросов к бд

  • Сорт: Recorders\SlowQueries::class
  • Описание: Фиксирует все запросы к базе данных вашего приложения, которые превышают настроенный порог.
  • Конфигурация:Медленная настройка порога запроса.
  • Регулировка частоты дискретизации.
  • Игнорируются шаблоны запросов.
  • Возможность захвата местоположения запроса.


Регистратор медленных http запросов

  • Сорт: Recorders\Requests::class
  • Описание: Собирает информацию о запросах к вашему приложению, которые превышают настроенный порог.
  • Конфигурация:Регулировка порога медленного маршрута.
  • Регулировка частоты дискретизации.
  • Игнорируемые шаблоны путей.


Регистратор серверов

  • Сорт: Recorders\Servers::class
  • Описание: Регистрирует использование ЦП, памяти и хранилища серверами, на которых работает ваше приложение.
  • Конфигурация:Настройка контролируемых каталогов.


Регистратор заданий пользователя

  • Сорт: Recorders\UserJobs::class
  • Описание: Собирает информацию о пользователях, отправляющих задания в вашем приложении.
  • Конфигурация:Регулировка частоты дискретизации.
  • Игнорирование шаблонов работы.


Регистратор запросов пользователей

  • Сорт: Recorders\UserRequests::class
  • Описание: Собирает информацию о пользователях, делающих запросы к вашему приложению.
  • Конфигурация:Регулировка частоты дискретизации.
  • Игнорирование шаблонов работы.

3. Процесс сбора записей

Большинство устройств записи Pulse автоматически записывают записи на основе событий платформы Laravel. Однако некоторые устройства записи, такие как серверные устройства записи и некоторые карты сторонних производителей, требуют регулярного опроса информации.

Чтобы использовать эти карты, вам необходимо запустить демон pulse:check на всех ваших серверах приложений:

php artisan pulse:check

Чтобы процесс pulse:check постоянно работал в фоновом режиме, рассмотрите возможность использования монитора процессов, например Supervisor.

4. Обработка Pulse исключений

Если при сборе данных Pulse возникает исключение (например, проблемы с подключением к базе данных хранилища), Pulse автоматически не сможет повлиять на ваше приложение. Вы можете настроить обработку этих исключений, предоставив замыкание метода handleExceptionsUsing:

use \Laravel\Pulse\Facades\Pulse;
use \Illuminate\Support\Facades\Log;

Pulse::handleExceptionsUsing(function ($e) {
    Log::debug('An exception happened in Pulse', [
        'message' => $e->getMessage(),
        'stack' => $e->getTraceAsString(),
    ]);
});

Оптимизация производительности

Оптимизация производительности вашего приложения Laravel имеет решающее значение для обеспечения гибкого и эффективного взаимодействия с пользователем. Laravel Pulse предоставляет функции и рекомендации, которые помогут вам управлять производительностью вашего приложения. Ниже приведен обзор аспектов, связанных с производительностью, в Laravel Pulse:

1. Обзор:

Laravel Pulse был разработан для полной интеграции с существующими приложениями без необходимости дополнительной инфраструктуры. Однако для приложений с высоким трафиком или сценариев, где производительность имеет решающее значение, можно использовать несколько соображений и стратегий.

2. Использование другой базы данных:

Для приложений с высоким трафиком вы можете предпочесть использовать выделенное соединение с базой данных для Pulse, чтобы не влиять на основную базу данных вашего приложения. Вы можете настроить подключение к базе данных, используемое Pulse, задав переменную среды PULSE_DB_CONNECTION:

PULSE_DB_CONNECTION=pulse

3. Прием Redis:

Pulse предоставляет функцию загрузки Redis, требующую Redis 6.2 или более поздней версии, а также библиотеку phpredis или predis в качестве настроенного клиентского драйвера Redis приложения.

По умолчанию Pulse сохраняет записи непосредственно в настроенном соединении с базой данных. Однако вместо этого вы можете использовать драйвер приема Redis от Pulse для отправки записей в поток Redis. Включите это, настроив переменную среды PULSE_INGEST_DRIVER:

PULSE_INGEST_DRIVER=redis

При использовании загрузки Redis вам необходимо запустить команду pulse:work для мониторинга потока и перемещения записей из Redis в таблицы базы данных Pulse:

php artisan pulse:work

4. Выборка:

По умолчанию Pulse фиксирует все важные события, происходящие в вашем приложении. Однако в приложениях с высоким трафиком запись всех событий может привести к агрегированию миллионов строк базы данных, особенно для более длительных периодов времени. Вы можете включить «выборку» на некоторых устройствах записи данных Pulse.

Например, установка частоты дискретизации 0,1 в регистраторе пользовательских запросов означает, что записывается только примерно 10 % запросов к вашему приложению. На информационной панели значения будут увеличены и снабжены префиксом ~, чтобы указать, что они являются приблизительными.

5. Обрезка:

Pulse автоматически обрезает сохраненные записи, как только они выходят за пределы окна информационной панели. Обрезка происходит при приеме данных с использованием лотерейной системы, которую можно настроить в файле конфигурации Pulse.

6. Обработка Impulse исключений:

Если при сборе данных Pulse возникает исключение (например, невозможность подключения к базе данных хранилища), Pulse автоматически не сможет повлиять на ваше приложение. Если вы хотите настроить обработку этих исключений, вы можете предоставить замыкание для метода handleExceptionsUsing:

use \Laravel\Pulse\Facades\Pulse;
use \Illuminate\Support\Facades\Log;

Pulse::handleExceptionsUsing(function ($e) {
    Log::debug('An exception happened in Pulse', [
        'message' => $e->getMessage(),
        'stack' => $e->getTraceAsString(),
    ]);
});

Настройка обработки исключений позволяет регистрировать или обрабатывать исключения в соответствии с потребностями вашего приложения, не нарушая работу пользователя.

Таким образом, оптимизация производительности вашего приложения Laravel с помощью Pulse включает в себя такие соображения, как использование выделенного подключения к базе данных, использование приема Redis для эффективной обработки данных, реализация выборки для управления сценариями с высоким трафиком и корректная обработка исключений.

Эти стратегии помогают гарантировать, что мониторинг с помощью Pulse не приведет к снижению производительности вашего приложения.