Statt Mail-Alerts: Systemnachrichten über Webhooks an Microsoft Teams senden

    Microsoft Teams WebhooksEs ist gängige Praxis, dass sich Admins War­nungen aus Monitoring-Tools oder kri­tische Sys­tem­nach­richten per Mail oder SMS schicken lassen. Als Alter­native bietet sich an, solche Alerts in Micro­soft Teams zu füttern, um ihre Bear­beitung effi­zienter zu machen. Diese An­leitung zeigt das Vorgehen mit PowerShell.

    Monitoring und vor allem das daraus entstehende Alerting hat sich über die letzten Jahre gewandelt. IT-Admins erhalten bei Ereignissen mit hoher Priorität eine SMS auf das Geschäfts-Handy und Mails zu Fehler­meldungen, die durch Events ausgelöst wurden.

    Dieses Verfahren hat jedoch gravierende Nachteile. So läuft das eigene Postfach erfahrungs­gemäß bei großen Infrastrukturen schnell voll. Aus diesem Grund erstellt man Regeln, welche die Mails direkt in eigene Ordner einsortieren, in denen jedoch einzelne Warnungen oft untergehen.

    Eine Absprache mit den Kollegen, wer sich um welche Vorfälle kümmert, ist unter diesen Bedingungen und vor allem in Zeiten von Home Office umständlich. Daher bietet es sich an, die Nachrichten in einem Collaboration-System wie Microsoft Teams zu sammeln und dort die Zuständig­keiten zu klären.

    Als Mechanismus, um die Alerts in Teams zu befördern, dienen so genannte Webhooks. Dabei handelt es sich letztlich um ein REST-API, dem man die Daten in einem vordefinierten Format übergibt, in der Regel als XML oder JSON.

    Die meisten Alerting-Systeme sind heute in der Lage, Meldungen an eine solche Schnittstelle zu senden. Diese Anleitung zeigt das Erstellen von WebHooks am Beispiel von PowerShell und Microsoft Teams.

    Einrichten von Webhooks in Teams

    Um in Teams Webhooks empfangen zu können, benötigen wir ein Team und einen Kanal, in welchen die Benach­richtigungen einlaufen sollen. Es empfiehlt sich, für verschiedene Alert-Quellen eigene Kanäle zu nutzen. So kann jedes Team-Mitglied die für ihn relevanten Kanäle einblenden, Benach­richtigungen aktivieren und weniger wichtige Kanäle ausblenden.

    Nachdem wir einen eigenen Kanal, in unserem Beispiel mit dem Namen PowerShell Webhooks, erstellt haben, öffnen wir über das Icon in der Navigationsleiste links unten die Liste der Apps. Dort suchen wir nach "Webhooks" und wählen dann Incoming Webbhooks aus dem Suchergebnis aus.

    Incoming Webhooks aus der Liste der Teams-Apps auswählen

    Der folgende Dialog bietet uns über eine Schaltfläche an, einen Webhook zu einem Team oder Channel hinzuzufügen.

    Über die Schaltfläche 'Add to a team' fügen wir den Webhook zu einem Team oder Channel hinzu.

    Im nächsten Schritt erwartet der Assistent die Auswahl des Teams oder Channels.

    Team oder Channel für den Webhook wählen

    Bevor wir den Webhook erstellen, geben wir diesem noch einen Namen und laden wahlweise noch ein dazugehöriges Icon hoch.

    Bezeichnung für den Webhook eingeben und auf Wunsch ein eigenes Symbol hochladen

    Nachdem wir auf Erstellen geklickt haben, erhalten wir den Link, an welchen wir mittels PowerShell oder auch anderen Tools die Benach­richtigungen senden können.

    Zum Abschluss generiert der Assistent die URL, über die man den Channel ansprechen kann.

    Auf der Seite von Teams ist die Konfiguration nun beendet. Im Folgenden widmen wir uns dem PowerShell-Code.

    Senden von Webhooks mittels PowerShell

    Wenn PowerShell automatisierte Tasks ausführt oder Reports sammelt, bietet es sich an, die Alarme oder sonstige Informationen am Ende des Scripts an den Teams-Kanal zu senden.

    Dabei werden Parameter über das JSON-Format übertragen, welche Teams dann ausliest, um den Text in bestimmter Formatierung, Farbe oder Art anzuzeigen. Weitergehende Informationen zum Aufbau der Nachrichten finden sich auf Microsoft Doc.

    Ein simpler Webhook könnte wie folgt aussehen:

    In Zeile 1 wird eine Variable deklariert und initialisiert, welche wir später in den Webhook inkludieren.

    Zeilen 3 bis 11 enthalten den Inhalt und die Art der Message. Diese werden in Zeile 13 in das JSON-Format umgewandelt.

    Zeile 15-20 definieren die Parameter für den HTTP-Request. Hier geben wir den URI an, welchen Teams uns beim Erstellen des Connectors erzeugt hat. Außerdem hängen wir die JSON-Daten als Body an.

    Mit Invoke-RestMethod senden wir das Ganze schließlich ab. Die PowerShell-Konsole sollte nun eine 1 als Rückgabewert ausgeben, wenn der Vorgang erfolgreich war.

    Beispielcode für einen Webhook in PowerShell

    Schlussendlich erhalten wir die Message-Card in unserem Teams-Kanal. Dort können Team-Mitglieder direkt kommentieren, falls sie sich des Alerts annehmen wollen, oder beispielsweise Lösungs­vorschläge hinterlassen.

    Erfolgreicher Import des ersten Alerts in den Teams-Kanal

    Fazit

    Mit dieser Methode kann man Scripts schnell und flexibel um eine Teams-Notification erweitern, und eventuell gänzlich auf massenhafte Mail-Benachrichtigungen verzichten. Dennoch sollte man auch hier eine redundante Lösung in Betracht ziehen, denn bei einem Ausfall von M365 oder Teams wird man ansonsten keinen Alert erhalten.

    Keine Kommentare