geekk/laravel-health-monitor

Laravel package for application health monitoring

Installs: 1

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 0

Forks: 0

Open Issues: 0

pkg:composer/geekk/laravel-health-monitor

1.0.0 2025-12-18 14:27 UTC

This package is auto-updated.

Last update: 2025-12-18 15:15:10 UTC


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"

Быстрый старт

  1. Настройте конфигурацию в config/health-monitor.php:

  2. Проверьте работоспособность:

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);

Кастомные проверки

Создание кастомной проверки

  1. Создайте класс проверки:
<?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];
    }
}
  1. Зарегистрируйте проверку в конфигурации:
// config/health-monitor.php
'checks' => [
    'disk-space' => \App\HealthChecks\DiskSpaceCheck::class,
],
  1. Проверьте работу:
curl http://localhost:8000/api/health/check/disk-space