- PVSM.RU - https://www.pvsm.ru -
В современной разработке критически важно отслеживать состояние всех компонентов приложения. Особенно это актуально для production-окружений, где каждая минута простоя может стоить денег и репутации. Сегодня я хочу рассказать о пакете Laravel Pulse — инструменте для комплексного мониторинга здоровья Laravel-приложений.
Laravel Pulse — это пакет для Laravel, который позволяет отслеживать состояние различных компонентов вашего приложения: базы данных, Redis, файловых хранилищ, Horizon, Node.js окружения и даже проверять безопасность зависимостей через Security Checker.
Пакет предоставляет:
✅ Команды Artisan для проверки всех компонентов
✅ REST API для получения данных о состоянии системы
✅ Возможность сохранения результатов в базу данных
✅ Интеграцию с системами мониторинга (Zabbix, Nagios и т.д.)
composer require adb/laravel-pulse
php artisan vendor:publish --tag=pulse
После публикации в проекте появится файл config/pulse.php со следующей структурой:
<?php
use AdbLaravelPulseEnumsPulseEnum;
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
Основной способ использования пакета — через команду 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
}
}
php artisan pulse:info > /tmp/pulse.json
В файле 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 для получения последних данных о состоянии системы.
Для активации API необходимо включить сохранение результатов в базу данных:
// config/pulse.php
'save_to_db' => true,
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"
}
Проверяет версии PHP и Laravel:
{
"project": {
"php": "8.3.30",
"laravel": "10.48.0"
}
}
Проверяет доступность и конфигурацию подключений к БД. Поддерживает любые драйверы 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
}
}
}
Проверяет подключения к Redis и получает информацию о версии:
{
"redis": {
"default": {
"redis_name": "default",
"redis_version": "7.4.2",
"os": "Linux 6.10.14-linuxkit aarch64",
"port": "6379",
"host": "redis",
"success": true
}
}
}
Проверяет статус Laravel Horizon:
{
"horizon": {
"success": true
}
}
Проверяет доступность настроенных дисков из config/filesystems.php:
{
"storages": {
"local": true,
"input": true,
"archive": true
}
}
Проверяет наличие и версии Node.js и npm:
{
"node": {
"node": {
"version": "v20.11.0",
"success": true
},
"npm": {
"version": "10.2.4",
"success": true
}
}
}
Проверяет уязвимости в зависимостях через Enlightn Security Checker [1]:
{
"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
AdbLaravelPulse
├── ConsoleCommandsPulseCommand # Artisan команда
├── EnumsPulseEnum # Константы компонентов
├── ExceptionsApiException # Кастомные исключения
├── Http
│ ├── ControllersApiPulseController # API контроллер
│ └── MiddlewareApiAuth # Middleware для авторизации
├── ModelsLaravelPulse # Модель для хранения данных
├── ProvidersServiceProvider # 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 [2].
Если у вас есть вопросы или предложения по улучшению пакета — создавайте issues в репозитории. Буду рад обратной связи!
Автор: adb13
Источник [3]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/monitoring-servera/442642
Ссылки в тексте:
[1] Enlightn Security Checker: https://github.com/enlightn/security-checker
[2] GitFlic: https://gitflic.ru/project/adb/laravel-pulse
[3] Источник: https://habr.com/ru/articles/987940/?utm_source=habrahabr&utm_medium=rss&utm_campaign=987940
Нажмите здесь для печати.