В современной разработке критически важно отслеживать состояние всех компонентов приложения. Особенно это актуально для 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 в репозитории. Буду рад обратной связи!
