Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти Інструменти Події
Інше
Про нас Реклама
Новини 23 вересня 2026

Health for Laravel: Kubernetes Probes та Prometheus Metrics

Пакет Health for Laravel від Sylvester Damgaard надає комплексну систему health-перевірок для Laravel-додатків, яка інтегрується з Kubernetes та Prometheus. На відміну від стандартного /up ендпоінта у нових Laravel-додатках, який лише повідомляє про успішне завантаження застосунку, цей пакет дозволяє призначати різні набори перевірок для кожного типу проби.

Основні можливості пакета

Пакет пропонує широкий спектр функціоналу:

  • Kubernetes probes: три окремі ендпоінти /health, /health/ready та /health/startup, кожен з власним списком перевірок
  • 10 вбудованих перевірок: database, cache, queue, storage, Redis, environment, schedule, CPU, memory та disk space
  • Prometheus metrics: статус та тривалість перевірок, а також метрики навантаження, пам'яті, дискового простору та мережі
  • Container awareness: читає обмеження cgroup v1 та v2, тому показники пам'яті беруться з контейнера, а не з хоста
  • JSON metrics: ті самі системні дані на /health/metrics/json з hostname або назвою pod, який обробив запит
  • Команда health:check: запускає перевірки з терміналу та повертає ненульовий код виходу при помилці
  • Response caching: результати перевірок кешуються на 10 секунд за замовчуванням
  • HTML dashboard: сторінка статусу на /health/ui, за замовчуванням вимкнена

Окремі перевірки для кожної Kubernetes проби

Ви призначаєте перевірки для проб у конфігураційному файлі config/health.php:

use Cbox\LaravelHealth\Checks\{
    CacheCheck, DatabaseCheck, EnvironmentCheck,
    QueueCheck, RedisCheck, StorageCheck
};

'checks' => [
    'liveness' => [
        DatabaseCheck::class,
    ],
    'readiness' => [
        DatabaseCheck::class,
        CacheCheck::class,
        RedisCheck::class,
        QueueCheck::class,
        StorageCheck::class,
    ],
    'startup' => [
        EnvironmentCheck::class,
    ],
],

Kubernetes перезапускає контейнер, коли його liveness проба не проходить. Коли readiness проба не спрацьовує, Kubernetes припиняє маршрутизацію трафіку на pod, але залишає його запущеним. Ендпоінт проби повертає статус 200, коли кожна перевірка має статус ok або warning, та 503, коли будь-яка перевірка має статус critical або unknown.

У маніфесті deployment кожна проба вказує на свій шлях:

livenessProbe:
  httpGet:
    path: /health
    port: 80
  periodSeconds: 15
readinessProbe:
  httpGet:
    path: /health/ready
    port: 80
  periodSeconds: 10
startupProbe:
  httpGet:
    path: /health/startup
    port: 80
  failureThreshold: 30
  periodSeconds: 5

Ендпоінт /health/status повертає результати всіх перевірок разом з hostname, який у Kubernetes є назвою pod. Три ендпоінти проб не включають hostname у відповідь.

Prometheus Metrics

Ендпоінт /health/metrics повертає два gauge на кожну health-перевірку. Метрика app_health_check_status дорівнює 1.0 для ok, 0.5 для warning та 0.0 для critical або unknown. Метрика app_health_check_duration_seconds записує, скільки часу зайняла перевірка. Префікс app береться зі змінної середовища HEALTH_PROMETHEUS_NAMESPACE.

Системні метрики надходять з пакета cboxdk/system-metrics, який працює на Linux та macOS. Ви отримуєте середнє навантаження, показники пам'яті, використання диска для кожної точки монтування, байти мережі для кожного інтерфейсу та uptime. Всередині контейнера ендпоінт додає ще п'ять метрик:

Метрика Тип
app_container_memory_limit_bytes gauge
app_container_memory_usage_bytes gauge
app_container_cpu_quota gauge
app_container_cpu_throttled_total counter
app_container_oom_kills_total counter

Детальніше про всі можливості можна дізнатися в документації Prometheus Metrics.

Перевірка роботи планувальника задач

ScheduleCheck зчитує timestamp heartbeat з кешу. Заплануйте команду health:heartbeat у файлі routes/console.php, щоб записувати його:

use Illuminate\Support\Facades\Schedule;

Schedule::command('health:heartbeat')->everyMinute();

Перевірка повертає critical, коли heartbeat старіший за max_age_minutes, що за замовчуванням дорівнює 5 хвилинам. Вона повертає warning, коли heartbeat ще не існує. Додайте перевірку до списку readiness, і ендпоінт поверне 503, коли планувальник задач не запускався протягом п'яти хвилин.

Написання власної перевірки

Перевірка реалізує контракт HealthCheck, який має метод name() та метод run(), що повертає CheckResult. Розширте BaseCheck, і назва буде отримана з імені класу, тому PaymentGatewayCheck стане payment_gateway:

namespace App\Health;

use Cbox\LaravelHealth\Checks\BaseCheck;
use Cbox\LaravelHealth\DataTransferObjects\CheckResult;
use Illuminate\Support\Facades\Http;

class PaymentGatewayCheck extends BaseCheck
{
    public function run(): CheckResult
    {
        try {
            $response = Http::timeout(5)->get('https://payments.example.com/health');
        } catch (\Throwable $e) {
            return CheckResult::critical($this->name(), $e->getMessage());
        }

        if ($response->successful()) {
            return CheckResult::ok($this->name());
        }

        return CheckResult::critical($this->name(), "HTTP {$response->status()}");
    }
}

Додайте клас до масиву readiness у config/health.php. CheckResult має чотири конструктори: ok(), warning(), critical() та unknown(). Кожен приймає масив метаданих як третій аргумент, і відповіді статусу та JSON включають його. Вбудована перевірка QueueCheck використовує метадані для звіту про queue_size.

Встановлення та налаштування

Версія 2.0.0 вимагає PHP 8.3 та Laravel 11, 12 або 13:

composer require cboxdk/laravel-health
php artisan vendor:publish --tag="health-config"

Запустіть перевірки з терміналу, щоб підтвердити налаштування:

php artisan health:check
php artisan health:check --endpoint=readiness

Без опції команда запускає liveness та readiness перевірки. Змінна середовища HEALTH_PREFIX змінює префікс /health, і кожен ендпоінт має власні ключі path та enabled, якщо ви віддаєте перевагу /readyz.

Вихідний код та повна документація доступні на GitHub.

9

Читати в документації

Коментарі

Увійдіть, щоб залишити коментар

Будьте першим, хто залишить коментар!

Читайте також

PHPStan 2.3: стрибок продуктивності, покращені generics і виявлення невикористаних змінних
Новини 06 жовтня 2026

PHPStan 2.3: стрибок продуктивності, покращені generics і виявлення невикористаних змінних

PHPStan 2.3.0 працює до 7,5× швидше, ніж десять місяців тому, має розумніший кеш результатів, двонапрямне звуження типів для generics (new Collection(...)) і нові перевірки невикористаних змінних, присвоєнь та параметрів.

11
Pgvector Laravel
Новини 06 жовтня 2026

Простий векторний пошук подібності для Laravel: драйвер Pgvector для Scout

Бен Бьюрстром створив драйвер Pgvector для Laravel Scout, який автоматично підтримує актуальність векторних ембедингів і дає змогу шукати дані за змістом, а не лише за ключовими словами.

11

Вакансії за темою

GGLUXOUTLET
4 дні тому

Senior+/Tech Lead Full-Stack WordPress Developer / Code Architect

Досвідчений Senior+/Tech Lead Full-Stack WordPress розробник для проєктування та розробки високонавантажених e-commerce рішень. Потрібні глибокі знання WordPress Core, WooCommerce, PHP 8.1+ з SOLID/ООП, React/Next.js для фронтенду, Python для автоматизації, DevOps (VPS, Docker, CI/CD) та AI-інтеграцій. Роль включає архітектуру, код-рев'ю, менторство і комунікацію з бізнесом. Мінімум 7 років досвіду, з них 3+ на WordPress/WooCommerce у високонавантажених проєктах.

MAKEUP
6 днів тому

PHP Tech Lead

PHP Tech Lead для великого e-commerce проекту. Управління PHP-командою з 3-8 людей, участь у проектуванні архітектури, code review та розробці критичних частин системи. Вимоги: 6+ років досвіду у PHP/backend, 2+ років у ролі лідера, знання Laravel/Symfony, SQL, REST API, Docker, CI/CD, тестування.

King Group
7 днів тому

Junior+/Middle PHP developer (payment)

Розробник PHP для команди платежів у мікросервісній архітектурі. Основні завдання: розробка бізнес-функціоналу, інтеграції платіжних систем, оптимізація highload-навантаження, архітектурні рішення. Стек: PHP 7.4/8.4, Symfony, Yii, PostgreSQL, Redis, RabbitMQ, Kafka, Docker, Kubernetes. Вимоги: OOP, REST API, Git, SOLID, досвід з Symfony чи Laravel.

Пакети за темою

Telescope

laravel/telescope

Елегантний помічник для налагодження фреймворку Laravel, який допомагає розробникам в розробці та тестуванні додатків.

5,229 v5.25.0 13 6

Bagisto

bagisto/bagisto

Bagisto — це платформа для електронної комерції, побудована на Laravel. Вона надає готове рішення для створення та управління інтернет-магазинами з підтримкою каталогу товарів, замовлень, платежів та клієнтів.

28,211 v2.5.0-beta6 13 26