Die Veröffentlichung von IncidentRelay 2.0 wurde bekannt gegeben, einem Open-Source-System zur Organisation von Bereitschaften, zur Routenplanung von Benachrichtigungen und zur Begleitung von Vorfällen, das auf einem eigenen Server (self-hosted) betrieben werden kann. Das Projekt richtet sich an SRE-, DevOps- und Infrastruktur-Teams, die eine lokale Alternative zu cloudbasierten Bereitschaftsplattformen benötigen. Der Code ist in Python geschrieben und steht unter der MIT-Lizenz.
IncidentRelay verarbeitet Ereignisse aus Prometheus Alertmanager, Grafana Alerting, Zabbix, Sentry, LibreNMS, RMON, AWS SNS/CloudWatch, Datadog, Uptime Kuma und beliebigen Webhook-Handlern. Nach der Normalisierung wird das Ereignis mit dem Dienst, dem Team und der Rotation verknüpft, Routing-Regeln und Eskalationsrichtlinien werden angewendet, bevor die Benachrichtigung an den aktuellen Bereitschaftsdienst gesendet wird. Die Lieferung erfolgt über Mattermost, Slack, Telegram, Discord, Microsoft Teams, E-Mail, Webhook, Browser/PWA Push und Voice Call-Anbieter.
Die Hauptneuheit der Version 2.0 ist der Mechanismus zur Ereignis-Orchestrierung, der eine separate Verarbeitungsschicht zwischen eingehenden Integrationen und dem Lebenszyklus von Alerts bereitstellt. Die wesentlichen Änderungen sind:
- Ein visueller Editor für Orchestrierungsregeln wurde hinzugefügt. Regeln können global oder für einen einzelnen Dienst angewendet, in verschachtelte Bedingungen gruppiert und nacheinander hinsichtlich Priorität, Wichtigkeit, Labels, Team, Route, Gruppierungsweise sowie Benachrichtigungs- und Eskalationsrichtlinien geändert werden;
- Aktionen zum Unterdrücken, Verwerfen und Anhalten der Ereignisverarbeitung wurden implementiert, einschließlich der Extraktion von Werten mittels regulärer Ausdrücke und JSON Path, der Trennung von Strings, der Erstellung von Variablen und der Umwandlung von Werten;
- Die Konfiguration der Orchestrierung ist in bearbeitbare Entwürfe und unveränderliche veröffentlichte Versionen unterteilt. Unterstützung für Konfigurationsprüfung, Veröffentlichung, Rollback auf die vorherige Version und Hinzufügen von Kommentaren zu Änderungen wird geboten;
- Es gibt die Modi disabled, shadow und active. Im shadow-Modus werden die Ergebnisse der Regelverarbeitung zur Analyse gespeichert, beeinflussen jedoch nicht das tatsächliche Routing. Für die Übergangszeit sind die Kompatibilitätsmodi legacy, hybrid und orchestration verfügbar;
- Es wurden Mittel zur Simulation und Wiederholung von Ereignissen hinzugefügt. Diese ermöglichen die Überprüfung der Regeln bei einem normalisierten Ereignis oder einem ursprünglichen Payload der Integration, ohne einen echten Alarm zu erzeugen. Für die Analyse der Ergebnisse stehen Ausführungs-Tracebacks, Explain-Daten und Metriken des Schattenmodus zur Verfügung;
- Es wurden wiederverwendbare Webhook-Aktionen implementiert, die asynchron nach der Verarbeitung eines Ereignisses ausgeführt werden. Die Header werden verschlüsselt gespeichert, Geheimnisse werden in der API und in Protokollen verborgen, und der Zugriff auf private Netzwerke ist standardmäßig verboten. Timeout-Werte, Wiederholungen und eine Liste zulässiger interner Adressen können konfiguriert werden;
- Die Integration mit Uptime Kuma wurde hinzugefügt, die standardmäßige Webhook-Nachrichten über den Status von Monitoren akzeptiert. Die Normalisierung der Zustände UP und DOWN, die Bestimmung der Wichtigkeit, das Handling von Tags und ein neuer Typ des eingehenden Pfades uptime_kuma wurden realisiert;
- Für Silenzen und geplante Wartungsfenster wurden die Parameter apply_to_existing und reactivate_on_end hinzugefügt. Der erste ermöglicht die Anwendung von Suppressionen auf bereits offene Alarme, während der zweite festlegt, ob deren Verarbeitung nach dem Ende der Suppressionsperiode fortgesetzt werden soll. Benachrichtigungen, Erinnerungen und Eskalationsketten werden pausiert und wiederhergestellt;
- Für persönliche API-Token wurden separate Berechtigungen zum Lesen und Ändern von Gruppen, Teams, Benutzern, Routen, Kanälen, Diensten, Rotationen, Richtlinien, Wartungsfenstern, Heartbeat-Checks, SSO und Orchestrierungen eingeführt. Alte aggregierte Berechtigungen resources:read, resources:write und * wurden zur Rückwärtskompatibilität beibehalten;
- Eine Schnittstelle für das Audit-Log mit Filterung und paginierter Ausgabe wurde hinzugefügt. Im Log werden Operationen mit Orchestrierungen, Webhook-Aktionen, Silenzen und geplanten Wartungsfenstern erfasst, wobei vertrauliche Werte aus den angezeigten Daten entfernt werden;
- Im Web-Interface gibt es jetzt ein dunkles Thema und benutzerdefinierte Einstellungen für Sprache und Layout. Die französische Lokalisierung wurde hinzugefügt, die Übersetzungen der Abschnitte Orchestrierung und Wartung wurden erweitert, und die Bearbeitung von SSO-Gruppenzuordnungsregeln wurde korrigiert;
- Die Leistung von Heartbeat-Checks wurde verbessert: Es wird verhindert, dass Ereignisse überfällig wiederholt erstellt werden, das Wiederherstellen des Signals schließt den Alarm korrekt und sendet eine Benachrichtigung über die Lösung des Problems, das Format der Zeitstempel wurde vereinheitlicht;
- Dokumentation zur Bereitstellung in Kubernetes mit Helm wurde vorbereitet. Im Helm-Chart wurde ein separater Handler für den Slack Socket Mode hinzugefügt, der für die Funktionalität interaktiver Bestätigungs- und Schließbuttons von Vorfällen erforderlich ist;
- Der Schutz ausgehender HTTP-Anfragen, regulärer Ausdrücke und vertraulicher Daten wurde verstärkt, die Verarbeitung von UTC und Zeitzonen wurde zentralisiert, die Berechnungen für die Zeitpläne der Rotationen wurden überarbeitet und die Abdeckung mit automatisierten Tests erweitert.
Vor dem Update wird empfohlen, eine Sicherung der Datenbank zu erstellen. Die erforderlichen Änderungen am Schema werden über den Standard-Migrationsmechanismus von IncidentRelay durchgeführt. Für die schrittweise Einführung von Event Orchestration empfehlen die Entwickler zunächst die Verwendung der Modi Shadow und Hybrid, die Ausführungstraces von Regeln zu überprüfen und erst danach die Orchestration auf den aktiven Modus umzustellen.
Quelle: opennet.ru
