Alert-Müdigkeit ist real: So lösen clevere Entwickler das Problem
Es gibt sogar einen Namen dafür: Alert-Müdigkeit. Das ist das Phänomen, wenn deine Monitoring-Tools so viele Benachrichtigungen senden, dass dein Gehirn sie automatisch ausblendet — auch die, die wirklich wichtig sind.
Es fängt meist klein an. Du richtest E-Mail-Alerts für jeden 5xx-Fehler ein. Dann Slack-Benachrichtigungen für jeden fehlgeschlagenen Build. Dann Datadog-Pings, Sentry-Mails, UptimeRobot-Textnachrichten. Innerhalb eines Monats vibriert dein Handy 50 Mal täglich und nichts davon fühlt sich dringend an. Das wirklich Schlimme? Wenn tatsächlich etwas kaputtgeht, hast du dich schon darauf trainiert, es zu ignorieren.
Alert-Müdigkeit zerstört die Reaktionszeit. Und eine schlechte Reaktionszeit zerstört Produkte.
Warum die meisten Monitoring-Setups mehr Lärm als Signal erzeugen
Das grundlegende Problem ist, dass die meisten Alert-Tools alle Ereignisse gleich behandeln. Ein instabiler Test, der in 10 % der Fälle fehlschlägt, bekommt das gleiche Benachrichtigungsformat wie „die Zahlungs-API gibt für jeden Nutzer 500er zurück." Eines davon braucht um 2 Uhr nachts einen Anruf. Das andere sollte vielleicht in einem wöchentlichen Bericht auftauchen.
Wenn alles gleich behandelt wird, fangen Menschen an, alles zu ignorieren.
Die Lösung ist nicht weniger Alerts — sondern eine intelligentere Zustellung. Das gleiche Ereignis mit unterschiedlichem Schweregrad oder unterschiedlicher Häufigkeit sollte unterschiedliche Dringlichkeitsstufen auf deinem Handy erzeugen.
Der Drei-Stufen-Ansatz
Echobell bietet drei Zustellmodi, und alle drei gut zu nutzen ist der Kern der Lösung:
- Aktiv (Normal): Standard-Push-Benachrichtigung. Gut für informative Ereignisse, die keine sofortige Reaktion erfordern.
- Zeitkritisch: Durchbricht den iOS-Fokus-Modus. Gut für Dinge, die innerhalb der nächsten Stunde oder zwei bearbeitet werden müssen.
- Anruf: Lässt dein Handy wie ein eingehender Anruf klingeln. Reserviere das für „sofort beheben, sonst gibt es echte Konsequenzen."
Das Ziel ist, die Anruf-Stufe für Ereignisse zu erhalten, bei denen eine verzögerte Reaktion echte Folgen hat — Umsatzverluste, Kaskadenausfälle, gefährdete Nutzerdaten. Alles andere fällt auf zeitkritisch oder niedriger.
Sentry: Nicht mehr für jede Python-Exception angepiept werden
Sentry ist das Paradebeispiel für Alert-Müdigkeit. Standardmäßig sendet es für jeden neuen Issue-Typ eine E-Mail. Auf einer aktiven Codebase in einer normalen Woche ist das ein Feuerschlauch.
Ein schlaueres Setup:
- In Sentry: Alerts → Alert erstellen → Issue Alert
- Bedingung hinzufügen:
Das Issue wurde mehr als 10 Mal in 1 Stunde gesehen - Aktion hinzufügen: Benachrichtigung via Webhook → deine Echobell-Kanal-URL einfügen
- Benachrichtigungstyp des Kanals auf
zeitkritischsetzen
Für wirklich kritische Pfade — unbehandelte Exceptions in Zahlungsabläufen, Auth-Fehler, Datenbeschädigungen — erstelle einen separaten Alert mit niedrigerem Schwellenwert und einem Anruf-Kanal in Echobell. Dieser Kanal klingelt nur, wenn genau dieser kritische Pfad bricht.
Das Ergebnis: Routine-Issues sammeln sich still in deinem Sentry-Dashboard. Produktionsprobleme rufen dich an.
Prometheus und AlertManager: Nach Schweregrad routen
Wenn du Prometheus betreibst, hast du bereits AlertManager für das Routing. Du kannst Alerts direkt an Echobell senden, indem du es als Webhook-Empfänger hinzufügst.
In deiner alertmanager.yml:
receivers:
- name: echobell-critical
webhook_configs:
- url: https://hook.echobell.one/YOUR_CHANNEL_ID
send_resolved: true
- name: slack-warnings
slack_configs:
- api_url: YOUR_SLACK_WEBHOOK
route:
group_by: ['alertname', 'job']
group_wait: 30s
group_interval: 5m
repeat_interval: 4h
receiver: slack-warnings
routes:
- match:
severity: critical
receiver: echobell-criticalMit diesem Setup gehen severity: critical-Alerts an Echobell und rufen dich an; Warnungen gehen nach Slack, wo sie bis morgen früh warten können. Du musst keine einzige Prometheus-Regel ändern — nur die Routing-Schicht in AlertManager hinzufügen.
Setze den Echobell-Kanal selbst auf Anruf. Wenn AlertManager es als kritisch einstuft, verdient es auch einen echten Klingelton.
AWS CloudWatch: SNS → Lambda → Echobell
CloudWatch hat keinen nativen Webhook-Output, aber du kommst in wenigen Minuten mit SNS und einer kleinen Lambda-Funktion ans Ziel.
- Erstelle ein SNS-Topic und verknüpfe es mit deinem CloudWatch-Alarm
- Erstelle eine Lambda-Funktion, die dieses Topic abonniert:
import json
import urllib.request
def lambda_handler(event, context):
message = json.loads(event['Records'][0]['Sns']['Message'])
alarm_state = message.get('NewStateValue', 'UNKNOWN')
payload = {
"title": f"AWS: {message['AlarmName']}",
"body": message.get('NewStateReason', 'Keine Details'),
"notificationType": "calling" if alarm_state == "ALARM" else "active"
}
req = urllib.request.Request(
'https://hook.echobell.one/YOUR_CHANNEL_ID',
data=json.dumps(payload).encode(),
headers={'Content-Type': 'application/json'},
method='POST'
)
urllib.request.urlopen(req)Dieses Muster funktioniert für jeden AWS-Dienst, der SNS unterstützt: RDS-Ereignisse, ECS-Dienstausfälle, Abrechnungsschwellenwert-Alerts, EC2-Instanzstatusänderungen. Einmal eine Lambda-Funktion einrichten, mit SNS verbinden — und jeder CloudWatch-Alarm wird zum Anruf, wenn er wirklich auslöst.
Alert-Routing zur Team-Entscheidung machen
Der echte Hebel bei gestuften Alerts ist, die Routing-Entscheidung explizit zu machen — nicht etwas, das irgendwann jemand konfiguriert hat und das niemand mehr findet.
Eine praktische Struktur für ein kleines Engineering-Team:
| Kanal | Typ | Wer abonniert |
|---|---|---|
production-api-critical | Anruf | Diensthabender Ingenieur |
production-api-warnings | Zeitkritisch | Ganzes Dev-Team |
staging-all | Aktiv | Dev-Team (optional) |
background-jobs | Aktiv | Interessierte |
Wenn sich der On-Call-Dienst ändert, kündigt die ausgehende Person das Abonnement des kritischen Kanals und die eingehende Person abonniert ihn. Das ist die gesamte Rotationsübergabe — keine Config-Dateien, kein Admin-Panel.
Echobell-Kanäle sind per Link teilbar, das Abonnieren dauert für neue Teammitglieder etwa 10 Sekunden.
Der Signal-zu-Rauschen-Test
Bevor du einen neuen Alert hinzufügst, stelle dir eine Frage: Wenn das um 3 Uhr nachts am Freitag auslöst — was tue ich eigentlich?
- „Aufwachen und sofort beheben" → Anruf
- „Gleich morgens früh erledigen" → Zeitkritisch oder Aktiv
- „Wahrscheinlich nichts, ich würde wieder einschlafen" → überdenke, ob der Alert überhaupt existieren sollte
Die meisten Monitoring-Setups haben zu viele Dinge in der ersten Kategorie und zu wenige in der zweiten. Die richtige Antwort für die Mehrheit der Ereignisse ist „morgen erledigen," und eine zeitkritische Benachrichtigung, die lautlos auf dem Sperrbildschirm erscheint, ist genau das richtige Werkzeug dafür.
Eine Änderung nach der anderen
Wenn dein aktuelles Setup Alert-Müdigkeit erzeugt, ist die schnellste Lösung kein kompletter Umbau. Wähle deine lauteste Quelle — wahrscheinlich Sentry-Mails oder einen Slack-Kanal, den alle stummgeschaltet haben — und kategorisiere jeden Ereignistyp in Anruf, Zeitkritisch oder Aktiv.
Eine Quelle. Eine Woche. Schau, ob das Rauschen sinkt, ohne Signal zu verlieren.
Dann die nächste Quelle angehen.
Ein gut abgestimmtes Alert-Setup ist eins dieser Dinge, das deinen täglichen Arbeitsalltag still und leise verbessert, ohne Drama. Du hörst auf, dein Handy zu fürchten. Du beginnst darauf zu vertrauen, dass wenn es klingelt, es wirklich etwas bedeutet.