geekk / laravel-health-monitor
Laravel package for application health monitoring
Installs: 12
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/geekk/laravel-health-monitor
Requires
- php: ^8.1
- laravel/framework: ^10.0|^11.0|^12.0
Requires (Dev)
- fakerphp/faker: ^1.24
- mockery/mockery: ^1.6
- orchestra/testbench: ^8.0
- phpstan/phpstan: ^2.1
- phpunit/phpunit: ^9.6
- squizlabs/php_codesniffer: ^4.0
README
Комплексный пакет для мониторинга Laravel приложений. Проверяет состояние БД, Redis, очередей и других критических компонентов.
Содержание
Требования
- PHP 8.1 или выше
- Laravel 10.x или выше
- Composer
Установка
Установите пакет через Composer:
composer require geekk/laravel-health-monitor
Опубликуйте конфигурационный файл:
php artisan vendor:publish --tag=config --provider="Geekk\\HealthMonitor\\HealthMonitorServiceProvider"
Быстрый старт
-
Настройте конфигурацию в
config/health-monitor.php: -
Проверьте работоспособность:
curl http://your-app.test/api/health
API Endpoint
Полная проверка здоровья
GET /api/health
Ответ (200 OK):
{
"status": "healthy",
"timestamp": "2024-01-15T10:30:00+00:00",
"checks": {
"database": {
"healthy": true,
"message": "All database connections are healthy",
"timestamp": "2024-01-15T10:30:00+00:00"
},
"redis": {
"healthy": true,
"message": "Redis connection is healthy",
"timestamp": "2024-01-15T10:30:00+00:00"
},
"queue": {
"healthy": true,
"message": "Queue is healthy. Size: 5",
"timestamp": "2024-01-15T10:30:00+00:00"
}
}
}
Ответ при ошибке (503 Service Unavailable):
{
"status": "unhealthy",
"timestamp": "2024-01-15T10:30:00+00:00",
"checks": {
"database": {
"healthy": false,
"message": "Database connection 'mysql' failed: SQLSTATE[HY000] [2002] Connection refused",
"error": "PDOException",
"timestamp": "2024-01-15T10:30:00+00:00"
}
}
}
Конкретная проверка
GET /api/health/check/{check-name}
Пример:
GET /api/health/check/database GET /api/health/check/redis
Использование
Через HTTP запросы
# Полная проверка curl http://localhost:8000/api/health # Только проверка БД curl http://localhost:8000/api/health/check/database
Программное использование
use Geekk\HealthMonitor\Facades\HealthMonitor; // Запустить все проверки $healthStatus = HealthMonitor::runAll(); if ($healthStatus['healthy']) { echo "Все системы работают нормально"; } else { echo "Обнаружены проблемы:"; foreach ($healthStatus['checks'] as $name => $check) { if (!$check['healthy']) { echo "{$name}: {$check['message']}"; } } } // Запустить конкретную проверку $dbHealth = HealthMonitor::runSpecific('database'); // Добавить кастомную проверку HealthMonitor::registerCheck('disk-space', \App\HealthChecks\DiskSpaceCheck::class);
Кастомные проверки
Создание кастомной проверки
- Создайте класс проверки:
<?php namespace App\HealthChecks; use Geekk\HealthMonitor\Services\Checks\BaseCheck; class DiskSpaceCheck extends BaseCheck { protected string $name = 'disk-space'; public function run(): array { $freeSpace = disk_free_space('/'); $totalSpace = disk_total_space('/'); $percentage = ($freeSpace / $totalSpace) * 100; if ($percentage < 10) { // Меньше 10% свободного места return $this->failure( "Low disk space: " . round($percentage, 2) . "% free", 'DISK_SPACE_LOW' ); } return $this->success( "Disk space OK: " . round($percentage, 2) . "% free", [ 'free_space' => $this->formatBytes($freeSpace), 'total_space' => $this->formatBytes($totalSpace), 'percentage_free' => round($percentage, 2), ] ); } private function formatBytes($bytes): string { $units = ['B', 'KB', 'MB', 'GB', 'TB']; $i = 0; while ($bytes >= 1024 && $i < count($units) - 1) { $bytes /= 1024; $i++; } return round($bytes, 2) . ' ' . $units[$i]; } }
- Зарегистрируйте проверку в конфигурации:
// config/health-monitor.php 'checks' => [ 'disk-space' => \App\HealthChecks\DiskSpaceCheck::class, ],
- Проверьте работу:
curl http://localhost:8000/api/health/check/disk-space