Комплексный пакет для мониторинга 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/healthGET /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# Полная проверка
curl http://localhost:8000/api/health
# Только проверка БД
curl http://localhost:8000/api/health/check/databaseuse 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