Мониторинг производительности с 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 не приведет к снижению производительности вашего приложения.