Watchtower — це пакет для Laravel, який об'єднує заплановані завдання, черги, джоби та помилки на єдиній панелі моніторингу, адаптованій для роботи у production. Основні можливості інструменту:
- Єдиний dashboard для контролю розкладу, черг, завдань та помилок.
- Функціональність, а не лише моніторинг: запуск завдань за запитом, масовий перезапуск failed jobs та керування статусом помилок.
- Підтримка будь-яких драйверів черг (database, Redis або SQS) без обов'язкової залежності від Redis.
- Сумісність із multi-tenant системами та конфігураціями з кількома базами даних.
- Безпека для production: відкладений запис даних (deferred writes), sampling та автоматичне очищення логів.
- Контроль доступу через Gate у стилі Horizon та Telescope.
- Сповіщення через Slack, webhook або email.
# Три розділи для фонових процесів
Панель керування розділена на три основні вкладки. Вкладка Schedule відображає всі заплановані завдання з cron-виразами, описаними простою англійською. Тут можна переглянути історію запусків, їхню тривалість, відстежити пропущені завдання та миттєво запустити будь-яке з них кнопкою «Run now».
У вкладці Queues & Jobs метрики черг у реальному часі відображаються поруч із таблицею failed-jobs. Ви можете перезапускати окремі завдання або виконувати масовий ретрай за типом помилки чи часовим проміжком.
Вкладка Errors групує помилки за типом та кількістю, надаючи повний stack trace, контекст запиту чи джоби, а також інструменти для позначення помилок як вирішених.
Watchtower не прив'язаний до конкретного драйвера: черги можуть працювати на database, Redis або SQS. Якщо ваш додаток використовує кілька баз даних або архітектуру multi-tenant, Watchtower зчитує дані через окреме з'єднання.
# Безпека в production за замовчуванням
Щоб моніторинг не створював зайвого навантаження на систему, Watchtower використовує callback terminating() у Laravel для запису даних після відправки відповіді користувачу. Для високонавантажених проєктів можна налаштувати sampling, щоб фіксувати лише частину активності, при цьому зберігаючи інформацію про всі збої та виконання розкладу. Для економії місця всі поля автоматично обрізаються, а команда watchtower:prune щодня видаляє застарілі записи (за замовчуванням — через 30 днів для помилок і 7 днів для черг).
Більшість параметрів налаштовуються через змінні оточення:
WATCHTOWER_ENABLED=true
WATCHTOWER_DB_CONNECTION=monitoring
WATCHTOWER_SAMPLING_RATE=0.25
WATCHTOWER_AFTER_RESPONSE=true
WATCHTOWER_RETAIN_EXCEPTIONS=30
Опція WATCHTOWER_ENABLED=false миттєво зупиняє будь-яку активність пакета, а списки ігнорування дозволяють приховати зайвий «шум» від окремих завдань чи помилок.
# Авторизація
За замовчуванням доступ до панелі відкритий лише у локальному середовищі. Для інших оточень необхідно визначити Gate viewWatchtower:
use Illuminate\Support\Facades\Gate;
Gate::define('viewWatchtower', function ($user) {
return $user !== null & $user->isAdmin();
});
Також можна використати callback безпосередньо через метод пакета:
use Watchtower\Watchtower;
Watchtower::auth(fn ($request) => $request->user()?->isAdmin());
Користувачі без відповідних прав отримають відповідь 403.
# Гнучкі сповіщення
Watchtower може надсилати повідомлення про невдалі або пропущені завдання, а також про перевищення ліміту помилок (наприклад, понад 25 за годину). Сповіщення активуються параметром WATCHTOWER_ALERTS_ENABLED=true і надсилаються у Slack, через webhook або поштою. Перевірку стану виконує команда watchtower:monitor, яку слід додати до розкладу завдань:
$schedule->command('watchtower:monitor')->everyFiveMinutes();
Watchtower вимагає PHP 8.2+ та Laravel 11 або 12 і розповсюджується за ліцензією MIT. Вихідний код та документація доступні на GitHub.