В современной разработке критически важно отслеживать состояние всех компонентов приложения. Особенно это актуально для production-окружений, где каждая минута простоя может стоить денег и репутации. Сегодня я хочу рассказать о пакете Laravel Pulse — инструменте для комплексного мониторинга здоровья Laravel-приложений.
Laravel Pulse — это пакет для Laravel, который позволяет отслеживать состояние различных компонентов вашего приложения: базы данных, Redis, файловых хранилищ, Horizon, Node.js окружения и даже проверять безопасность зависимостей через Security Checker.
Пакет предоставляет:
✅ Команды Artisan для проверки всех компонентов
✅ REST API для получения данных о состоянии системы
✅ Возможность сохранения результатов в базу данных
✅ Интеграцию с системами мониторинга (Zabbix, Nagios и т.д.)
Установка и настройка
Установка через Composer
composer require adb/laravel-pulse
Публикация конфигурации
php artisan vendor:publish --tag=pulse
После публикации в проекте появится файл config/pulse.php со следующей структурой:
<?php
use Adb\LaravelPulse\Enums\PulseEnum;
return [
'config' => [
PulseEnum::PROJECT => true, // PHP и Laravel версии
PulseEnum::DB => true, // Подключения к БД
PulseEnum::REDIS => true, // Redis соединения
PulseEnum::NODE => false, // Node.js и npm
PulseEnum::HORIZON => true, // Laravel Horizon
PulseEnum::STORAGES => false, // Файловые хранилища
PulseEnum::SECURITY => false, // Проверка безопасности пакетов
],
'api_token' => env('API_TOKEN'),
'routes' => [
'prefix' => 'api/pulse',
'middleware' => ['api', 'pulse.auth.api'],
'as' => 'api.pulse.',
],
'connections_db' => [
'mongodb'
],
'connections_redis' => [
'default'
],
'discs' => array_filter(explode(',', env('DISCS_FOR_PULSE', '')), function($disk) {
return !empty(trim($disk));
}),
'save_to_db' => false,
];
Настройка окружения
В файле .env добавьте:
# Токен для API доступа API_TOKEN=your-secret-token-here # Список дисков для проверки (через запятую) DISCS_FOR_PULSE=local,input1,archive
Использование
Команда Artisan
Основной способ использования пакета — через команду pulse:info:
# Проверка всех включенных компонентов php artisan pulse:info # Проверка конкретного компонента php artisan pulse:info project php artisan pulse:info db php artisan pulse:info redis php artisan pulse:info horizon php artisan pulse:info storages php artisan pulse:info security php artisan pulse:info node
Пример вывода
{ "project": { "php": "8.3.30", "laravel": "10.48.0" }, "db": { "mongodb": { "driver": "mongodb", "host": "localhost", "name": "mongodb", "db": "my_database", "success": true } }, "redis": { "default": { "redis_name": "default", "redis_version": "7.4.2", "os": "Linux 6.10.14-linuxkit aarch64", "port": "6379", "host": "redis", "success": true } }, "horizon": { "success": true } }
Интеграция с системами мониторинга
Сохранение в файл для Zabbix
php artisan pulse:info > /tmp/pulse.json
Автоматизация через Task Scheduler
В файле app/Console/Kernel.php:
protected function schedule(Schedule $schedule) { $schedule->command('pulse:info') ->everyThirtyMinutes() ->sendOutputTo('/tmp/pulse.json'); }
Или для более частых проверок:
$schedule->command('pulse:info') ->everyFiveMinutes() ->sendOutputTo('/tmp/pulse.json') ->emailOutputOnFailure('admin@example.com');
REST API
Пакет предоставляет REST API для получения последних данных о состоянии системы.
Настройка сохранения в БД
Для активации API необходимо включить сохранение результатов в базу данных:
// config/pulse.php 'save_to_db' => true,
Использование API
Endpoint: POST /api/pulse/pulse
Авторизация: Bearer Token
Заголовки:
Authorization: Bearer your-api-token-from-env Content-Type: application/json
Пример запроса:
curl -X POST https://your-domain.com/api/pulse/pulse \ -H "Authorization: Bearer your-api-token" \ -H "Content-Type: application/json"
Ответ:
{ "project": { "php": "8.3.30", "laravel": "10.48.0" }, "db": { "mongodb": { "driver": "mongodb", "host": "localhost", "db": "my_database", "success": true } }, "redis": { "default": { "redis_version": "7.4.2", "success": true } }, "horizon": { "success": true }, "created_at": "2025-02-04T14:27:56.000000Z", "updated_at": "2025-02-04T14:27:56.000000Z" }
Компоненты мониторинга
1. Project (Проект)
Проверяет версии PHP и Laravel:
{ "project": { "php": "8.3.30", "laravel": "10.48.0" } }
2. Database (База данных)
Проверяет доступность и конфигурацию подключений к БД. Поддерживает любые драйверы Laravel (MySQL, PostgreSQL, MongoDB и т.д.):
{ "db": { "mongodb": { "driver": "mongodb", "host": "localhost", "db": "database", "success": true }, "mysql": { "driver": "mysql", "host": "127.0.0.1", "database": "laravel", "success": true } } }
3. Redis
Проверяет подключения к Redis и получает информацию о версии:
{ "redis": { "default": { "redis_name": "default", "redis_version": "7.4.2", "os": "Linux 6.10.14-linuxkit aarch64", "port": "6379", "host": "redis", "success": true } } }
4. Horizon
Проверяет статус Laravel Horizon:
{ "horizon": { "success": true } }
5. Storages (Файловые хранилища)
Проверяет доступность настроенных дисков из config/filesystems.php:
{ "storages": { "local": true, "input": true, "archive": true } }
6. Node.js
Проверяет наличие и версии Node.js и npm:
{ "node": { "node": { "version": "v20.11.0", "success": true }, "npm": { "version": "10.2.4", "success": true } } }
7. Security (Безопасность)
Проверяет уязвимости в зависимостях через Enlightn Security Checker:
{ "security": { "erusev/parsedown": { "version": "1.7.1", "time": "2018-03-08T01:11:30+00:00", "advisories": [ { "title": "Class-Name Injection", "link": "https://github.com/erusev/parsedown/issues/699", "cve": "CVE-2019-10905" } ] } } }
Архитектура пакета
Пакет построен на принципах SOLID и использует:
Dependency Injection — все зависимости инжектируются через конструкторы
Interface Segregation — используется
PulseInterfaceдля абстракцииService Layer — бизнес-логика вынесена в сервисы
Enum для констант — все константы вынесены в
PulseEnum
Структура классов
Adb\LaravelPulse\ ├── Console\Commands\PulseCommand # Artisan команда ├── Enums\PulseEnum # Константы компонентов ├── Exceptions\ApiException # Кастомные исключения ├── Http\ │ ├── Controllers\Api\PulseController # API контроллер │ └── Middleware\ApiAuth # Middleware для авторизации ├── Models\LaravelPulse # Модель для хранения данных ├── Providers\ServiceProvider # Service Provider └── Services\ ├── Pulse # Реализация проверок ├── PulseInterface # Интерфейс для проверок └── PulseService # Сервис-оркестратор
Конфигурация
// config/pulse.php для production 'config' => [ PulseEnum::PROJECT => true, PulseEnum::DB => true, PulseEnum::REDIS => true, PulseEnum::HORIZON => true, PulseEnum::STORAGES => true, PulseEnum::SECURITY => true, // Включаем проверку безопасности PulseEnum::NODE => true, ], 'save_to_db' => true, // Сохраняем для API
Заключение
Laravel Pulse — это мощный инструмент для мониторинга состояния Laravel-приложений. Он позволяет:
✅ Быстро диагностировать проблемы с компонентами системы
✅ Интегрироваться с существующими системами мониторинга
✅ Получать данные через удобный REST API
✅ Автоматизировать проверки через Task Scheduler
✅ Отслеживать безопасность зависимостей
Пакет активно развивается и поддерживается. Исходный код доступен на GitFlic.
Если у вас есть вопросы или предложения по улучшению пакета — создавайте issues в репозитории. Буду рад обратной связи!