Alarm-Mail bei fehlgeschlagenen geplanten Aufgaben und Queue-Jobs

- OperationalAlert: Log (Kanal monitoring) immer, Mail an
  MONITORING_ALERT_EMAIL (Standard EXCEPTION_MAIL), optional ntfy;
  gleiche Meldung hoechstens einmal pro Stunde
- Kernel: onFailure fuer alle geplanten Aufgaben (auch kuenftige)
- AppServiceProvider: Queue::failing
- withoutOverlapping mit kurzen Sperrdauern (10-60 Min.) statt 24 h

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Kevin 2026-10-08 09:49:18 +00:00
parent fdbb4f3853
commit c9cd17a41a
7 changed files with 300 additions and 4 deletions

View file

@ -244,6 +244,19 @@ wirklich läuft. Steht er nach dem Deploy auf „Kritisch“, ist in Ploi kein S
Schwellen in `.env` (optional): `MONITORING_QUEUE_BACKLOG_SECONDS=300`, `MONITORING_DISK_MIN_FREE_PERCENT=10`.
**Alarm-Mails** (`App\Support\OperationalAlert`): Schlägt eine geplante Aufgabe fehl (Exit-Code ≠ 0,
z. B. `business:store-optimized`, `user:make_abo_order`) oder ein Queue-Job endgültig, geht eine Mail an
`MONITORING_ALERT_EMAIL` (Standard: `EXCEPTION_MAIL`). Gleiche Meldungen höchstens einmal pro Stunde
(`MONITORING_ALERT_THROTTLE_MINUTES`); ins Log `storage/logs/monitoring-*.log` kommt jede. Optional
zusätzlich Push über ntfy (`MONITORING_NTFY_URL`, `_TOPIC`, `_TOKEN`). Test auf Live:
```bash
php artisan tinker --execute 'App\Support\OperationalAlert::send("Test-Alarm");'
```
Sperrdauern von `withoutOverlapping` sind kurz (10–60 Min.) statt 24 h: ein abgebrochener Lauf
blockiert die Aufgabe sonst einen ganzen Tag.
## Fallstricke
- **FPM-Restart statt Reload** → 502 für Sekunden.