Hallo allerseits! In diesem Beitrag werde ich darüber sprechen, wie Informationen zu den Ergebnissen von Aktionen von Veeam Backup & Replication v9.5 an MS Teams gesendet werden können. Die im Beitrag beschriebene Methode funktioniert nicht nur in diesem, sondern auch in jedem anderen Messenger. Sie müssen die Nachrichtenübermittlung nur über die Profil-API organisieren.

Stellen Sie sich zunächst vor, was wir erreichen wollen. Wir möchten Informationen darüber, was auf einer unserer Backup-Software-Instanzen geschieht, in einen unserer Befehlskanäle erhalten. Die Funktion ist nützlich, sie ist sowohl für Kinder als auch für Erwachsene nützlich, sie wird Ihren Seelenverwandten erfreuen und als hervorragende Dekoration für den festlichen Tisch dienen. Mit anderen Worten, Sie können selbst einen bestimmten Benutzerfall erstellen. Ich möchte Ihre Vorstellungskraft keinesfalls einschränken - wir werden einen Prototyp in Betracht ziehen.
Wir werden das Problem auf einfachste Weise lösen: Um Daten aus der Veeam SQL-Datenbank auszurauben, analysieren Sie ein wenig und senden Sie sie mit dem Incoming WebHook Connector an den Kanal. Hier ist der Aktionsplan:
- Wir stellen eine Verbindung zur Veeam-Datenbank her und erhalten Informationen von [dbo]. [Backup.Model.JobSessions].
- Wir erstellen den Incoming WebHook Connector in dem Kanal, in dem wir Nachrichten senden möchten.
- Alles mit Hilfe von Python-Magie zusammenfügen, damit es funktioniert.
- Wickeln Sie die resultierende Skizze in einen Docker-Container.
- Es funktioniert einfach!
Stellen Sie eine Verbindung zur Veeam Backup & Replication-Datenbank her
Erstellen Sie zunächst den Benutzer auf der Seite der MS SQL-Instanz. Wir betrachten MS SQL, da dies die Standardoption ist, die von unserer Software vorinstalliert wird. Wir geben dem Benutzer das Minimum an Rechten - nur auswählen und nur aus einer Tabelle.
Es ist einfach zu tun. Melden Sie sich auf jede für Sie mögliche Weise bei der Instanz an und senden Sie die folgende Anfrage vorab:
CREATE LOGIN ms_teams_watcher WITH PASSWORD = '123@qwe' USE [VeeamBackup] CREATE USER ms_teams_watcher FOR LOGIN ms_teams_watcher GRANT SELECT ON [dbo].[Backup.Model.JobSessions] TO ms_teams_watcher
Vergessen Sie nicht,
den Datenbanknamen zu ersetzen, und geben Sie einen Benutzernamen und ein Passwort ein.
Wenn Sie alles richtig gemacht haben, schlägt ein Upgrade-Versuch fehl:

Aber wählen Sie - bitte:

Ehre sei der DSGVO - im Rahmen dieses Beispiels hat keine einzige Produktionsbasis gelitten! Jetzt haben wir den Benutzer ms_teams_watcher und können mit dem Sammeln von Daten beginnen. Wir werden uns über
pyodbc verbinden - keine SQLAlchemy, nur Hardcore!
Öffnen Sie zunächst die Verbindung (siehe Klasse
SQLConnectorVeeamDB ) und erhalten Sie Informationen zu allen Sitzungen, die während der letzten Ausführung unseres Skripts abgeschlossen wurden:
s. SQLConnectorVeeamDB.select_completed_job_sessions_during_latest_hour:
query = 'select job_name,job_type, usn, end_time, result, reason ' \ 'from [dbo].[Backup.Model.JobSessions] ' \ 'where state = -1 and result != -1 and datediff(HH,[end_time],GETDATE()) <= 1 ' \ 'order by usn'
Das Wichtigste für uns ist, den letzten usn in der Tabelle zu bekommen, also das nächste Mal schon von ihm anzufordern, und nicht rechtzeitig. Wenn Sie nichts gefunden haben, führen Sie die folgende Abfrage aus:
query = 'select top 1 [usn] ' \ 'from [dbo].[Backup.Model.JobSessions] ' \ 'order by usn desc'
Statistisch gesehen ist dieser usn höher als jeder, der zurückgibt, wenn die erste Anforderung ausgeführt wird, aber JobSessions, die nicht in die erste Auswahl fallen, benötigen wir immer noch nicht. Wenn wir die abgeschlossenen (state = -1) Sitzungen mit dem Ergebnis nicht None (result! = -1) nicht gefunden haben - erinnern Sie sich einfach an usn, schreiben Sie es in die INI-Datei und wiederholen Sie die Anforderungen in einem bestimmten Intervall (aber bereits SQLConnectorVeeamDB.select_completed_job_sessions_after_usn).
Erstellen Sie den eingehenden WebHook Connector für MS-Teams
Hier ist alles einfach. Bitten Sie Ihren MS Teams-Administrator (Respekt, wenn Sie es sind), diese Funktion zu aktivieren, wie
hier beschrieben. Erstellen Sie nun einen Connector vom Typ
Incoming WebHook . Hat es geklappt? Sie sind schön, nichts anderes zu tun, kopieren Sie die URL und speichern Sie.
Alles zusammenfügen
Hier können Sie die fertige Docker-Datei oder die Skizze selbst herunterladen, die wir weiter betrachten werden. Denken Sie daran,
configuration.py_ herunterzuladen, neben die Docker-Datei zu stellen, die Unterstreichung aus der Erweiterung auszufüllen und zu entfernen.
So sieht das konzeptionelle Skizzenschema aus (das Bild kann angeklickt werden):

Wie Sie dem Diagramm entnehmen können, ist es am interessantesten, das von der Veeam-Datenbank empfangene Datum zu analysieren, während Objekte der VeeamEvent-Klasse (nur ein Datencenter) und der Benachrichtigungssendeprozess selbst erstellt werden.
Klasse VeeamEvent (Objekt)
In der Tabelle, aus der wir das Datum entnehmen, werden alle von Veeam ausgeführten Aufgaben protokolliert.
Jeder von ihnen hat das Attribut job_type. Es gibt viele davon, aber ich habe das für uns interessanteste hervorgehoben. Wollen wir nicht eine Nachricht senden, dass jemand die Programmkonsole geöffnet oder die Wiederherstellung abgeschlossen hat?
- 0 - Sicherungsjob
- 1 - Replikationsjob
- 3 - SureBackup-Job
- 24 - Datei-zu-Band-Auftrag
- 28 - Sicherung auf Bandjob
- 51 - Sicherungskopiejob
- 100 - Konfigurationssicherung
Schreiben Sie in die Kommentare, wenn Sie interessiert sind, werde ich auf Anfrage andere Arten von Aufgaben veranlassen. Abgeschlossene Aufgaben können entweder erfolgreich oder warnend sein und manchmal sogar fehlschlagen.
Als Ergebnis erstellen wir ein Objekt, das alle diese Daten in sich speichert + den Namen der Aufgabe, usn, eine Beschreibung des Status ihrer Fertigstellung (falls vorhanden) und die Fertigstellungszeit. Dieses Objekt wird übertragen, um eine Nachricht an den Messenger zu senden.
send_notification_to_web_hook ()
Hier ist es noch einfacher - wir verwenden die vorgefertigte
Pymsteams- Bibliothek, die einfach eine Nachricht gemäß der
Spezifikation sammelt und über
request.post sendet. In meinem Beispiel habe ich nicht einmal die O365-Kartenfunktionen verwendet, die auch von WebHooks unterstützt werden, sondern einfach mehrere Nachrichtenvorlagen erstellt, abhängig vom Ergebnis der Aufgabe.
team_connection = pymsteams.connectorcard(web_hook_url) if event_object.job_type_name is not None: if event_object.result_text == 'success': text = 'A Veeam ' + event_object.job_type_name + ' **"' + str(event_object.job_name) + '"** has finished **successfully** at ' + str(event_object.end_time)[:-7] team_connection.color('005f4b')
Fantasie ist hier nützlich - fügen Sie Text, Bilder, Schaltflächen usw. hinzu. Hier sind die Arten von Nachrichten, die ich erhalten habe:
Für einen Backup-Job, bei dem alles reibungslos verlief
Für fehlgeschlagene und warnende AufgabenErstellen Sie einen Docker-Container
Wenn Sie Docker noch nicht haben, lesen Sie das
Docker-Tutorial für Anfänger . Wenn ja, müssen wir die folgende Docker-Datei erstellen:
# Version: 1.0 FROM python:3.6.2 MAINTAINER Dmitry Rozhdestvenskiy <dremsama@gmail.com> RUN apt-get update && apt-get install -y --no-install-recommends apt-utils RUN apt-get -y install locales RUN echo "en_US.UTF-8 UTF-8" > /etc/locale.gen RUN locale-gen RUN apt-get -y install apt-transport-https freetds-dev unixodbc-dev git RUN curl https:
Docker selbst lädt alles aus dem Repository (FROM Python: 3.6.2), Github (RUN Git Clone ...) und packages.microsoft.com herunter. Fügen Sie die Docker-Datei in% Verzeichnisname% neben
configuration.py ein (haben Sie nicht vergessen, sie herunterzuladen und auszufüllen?). Stellen Sie das Bild mit dem folgenden Befehl zusammen:
docker build -t veeam_to_msteams:1.0 -f /path/%directory_name%/Dockerfile /path/%directory_name%/
Führen Sie den Container aus:
docker run --restart=always -it --name veeam_to_msteams -d veeam_to_msteams:1.0 bin/bash /veeam_to_msteams/launch_veeam_to_msteams.sh
Wenn Sie das Skript auf einer anderen Plattform ausführen oder den Container überhaupt nicht verwenden möchten, spielt es keine Rolle, führen Sie einfach die Datei main.py selbst ohne Argumente aus.
Es ist Zeit für mich, eine Tasse Kaffee zu füllen, und wenn Sie interessiert sind, können Sie meine Skizze für die Bedürfnisse Ihrer Produktion fertigstellen. "Sie zahlen nur für die Lieferung", genauer gesagt, müssen Sie diese Lieferung nur auf Ihrem bevorzugten Kanal implementieren.
Ich werde nützliche Links zusammenbringen:
- Mein Projekt auf Github
- Python SQL-Treiber - pyodbc
- Eingehenden WebHook-Connector erstellen
- So aktivieren Sie Incoming WebHook Connector für MS-Teams
- Pymsteams Bibliothek
- Ein Docker-Tutorial für Anfänger