---
title: "Watchtower: комплексний моніторинг задач, черг та помилок у Laravel"
url: https://laravelukraine.com/blog/watchtower-kompleksnii-monitoring-zadac-cerg-ta-pomilok-u-laravel
date: 2026-06-25
source: https://laravel-news.com/monitor-and-control-schedules-queues-and-errors-in-laravel-with-watchtower?utm_medium=feed&utm_source=feedpress.me&utm_campaign=Feed%3A+laravelnews
---

# Watchtower: комплексний моніторинг задач, черг та помилок у Laravel

Watchtower - це Laravel-пакет, який об'єднує моніторинг запланованих задач (scheduled tasks), черг, job'ів та винятків на єдиній панелі керування, призначеній для роботи в production-середовищі. Пакет надає не лише видимість процесів, а й можливість активних дій: запуск задачі за вимогою, масове повторення failed jobs, позначення помилок як вирішених.

## Ключові можливості

Пакет підтримує будь-який драйвер черг - database, Redis або SQS - без жорсткої залежності від Redis. Watchtower враховує конфігурації з однією базою даних, кількома базами або multi-tenant архітектурою. Запис даних відбувається безпечно для production завдяки відкладеному запису, sampling та автоматичному pruning.

Доступ до панелі контролюється через gate-механізм у стилі Horizon та Telescope. Опціонально можна налаштувати сповіщення через Slack, webhook або email.

## Три вкладки для фонових процесів

Панель розділена на три основні розділи:

### Schedule

Вкладка **Schedule** відображає всі заплановані задачі з їхніми cron-виразами, записаними людською мовою. Тут можна побачити історію виконання, тривалість кожного запуску та виявлення пропущених запусків. Кнопка "Run now" дозволяє негайно запустити будь-яку задачу.

### Queues & Jobs

Розділ **Queues & Jobs** показує live-метрики черг поруч з таблицею failed jobs. Ви можете повторити виконання окремого job'а або масово повторити всі job'и за типом винятку чи часовим проміжком.

### Errors

Вкладка **Errors** групує винятки за типом та кількістю виникнень. Для кожного винятку доступні повні stack traces, контекст запиту та job'а, а також контроли для позначення помилки як вирішеної або повторного відкриття.

Усе це не прив'язане до конкретного драйвера: черги можуть працювати на database, Redis або SQS, а Watchtower читає дані з окремого підключення, коли додаток використовує кілька баз даних або tenants.

## Безпека для production за замовчуванням

Запис активності на кожному request та job міг би стати навантаженням для застосунку, тому Watchtower відкладає запис даних до callback'а `terminating()` у Laravel, виносячи його за межі основного шляху запиту.

Додатки з високим трафіком можуть записувати лише частину активності, використовуючи sampling rate, при цьому всі збої та запуски schedule продовжують фіксуватися повністю. Усі збережені поля обрізаються для обмеження розміру рядків. Щоденна команда `watchtower:prune` очищає застарілі записи згідно з налаштованими періодами зберігання: 30 днів для schedule runs та exceptions, 7 днів для queue records за замовчуванням.

Більшість параметрів налаштовується через змінні оточення:

```
WATCHTOWER_ENABLED=true
WATCHTOWER_DB_CONNECTION=monitoring
WATCHTOWER_SAMPLING_RATE=0.25
WATCHTOWER_AFTER_RESPONSE=true
WATCHTOWER_RETAIN_EXCEPTIONS=30
```

Встановлення `WATCHTOWER_ENABLED=false` діє як аварійний вимикач, що миттєво зупиняє запис. Списки ігнорування для jobs, commands та exceptions дозволяють прибрати зайві елементи з панелі.

## Авторизація

За замовчуванням панель доступна лише в local-середовищі. Для відкриття доступу в інших середовищах потрібно визначити gate `viewWatchtower`:

```php
use Illuminate\Support\Facades\Gate;

Gate::define('viewWatchtower', function ($user) {
    return $user !== null && $user->isAdmin();
});
```

Альтернативно можна використати fluent callback, щоб тримати логіку авторизації разом з пакетом:

```php
use Watchtower\Watchtower;

Watchtower::auth(fn ($request) => $request->user()?->isAdmin());
```

Неавторизовані запити отримують відповідь `403`.

## Опціональні сповіщення

Watchtower може сповіщати про збій запланованої задачі, пропущений запуск або перевищення порогу failed jobs (за замовчуванням 25 за 60 хвилин). Сповіщення вимкнені до встановлення `WATCHTOWER_ALERTS_ENABLED=true` і можуть надсилатися через Slack, generic webhook або email.

Перевірки виконуються командою `watchtower:monitor`, яку потрібно додати до розкладу:

```php
$schedule->command('watchtower:monitor')->everyFiveMinutes();
```

## Вимоги та ліцензія

Watchtower потребує PHP 8.2+ та Laravel 11 або 12. Пакет розповсюджується під ліцензією MIT. Вихідний код, довідку з конфігурації та інструкції з встановлення можна знайти на [GitHub](https://github.com/Devifyo/watchtower).
