Hallo allerseits!
Heute möchte ich darüber sprechen, wie
Veeam Agent für Linux über die Befehlszeile verwaltet wird und welche Möglichkeiten sich in den Händen eines erfahrenen Programmierers ergeben.
Ich wurde durch einen Kommentar zu einem früheren
Artikel aufgefordert, einen Artikel zu schreiben. Um die Überraschung des Benutzers zu paraphrasieren: "Nun, wie so? Der Server schreibt keine Briefe, die besagen, dass er gespeichert wurde! “ Darüber hinaus ist er laut Analysten nicht der einzige, sonst wäre der
Thread nicht im Forum erschienen. Und da die Leute schreiben, bedeutet das, dass jemand es braucht!
In dem Artikel werde ich erklären, warum diese Funktion nicht im Produkt enthalten ist. Aber wir werden hier nicht aufhören, wir werden diese Funktion hinzufügen! Wir sind Programmierer, also schreiben wir einen Brief und erstellen einen Bericht in Form einer HTML-Seite.
Darüber hinaus werde ich meiner Meinung nach die nützlichsten Befehle zeigen, die die Arbeit des Administrators erleichtern können.
Machen Sie sich bereit: viel Code, keine Bilder.
Beantworten wir zunächst die Frage: "Warum schreibt Veeam Agent für Linux keine Briefe?"
Sie mögen die Antworten vielleicht nicht, beschuldigen Sie mich nicht. Tatsache ist jedoch, dass mehr oder weniger große Unternehmensbenutzer dies nicht benötigen, und hier ist der Grund:
- Um mit E-Mails arbeiten zu können, müssen Sie entweder den smpt-Server auf dem lokalen Computer installieren oder einen im Netzwerk verwenden. Bei der einfachsten Implementierung (Befehl
mail
) müssen Sie das Paket mailutils installieren. Und viele Systemadministratoren möchten keine potenzielle Sicherheitslücke auf ihrem Produktionsserver in Form eines Dienstes erstellen, der Briefe überall hin senden kann. Ja, und die Möglichkeit liegt möglicherweise nicht an den geschlossenen Ports, der Unabhängigkeit von Subnetzen usw. - Zweitens macht es keinen Sinn, zu versuchen, es zu verwenden, da sich das Mailutils- Paket möglicherweise (aus dem ersten Grund) nicht auf dem System befindet. Andernfalls können wir eine Funktion erhalten, die anscheinend vorhanden ist, aber "out of the box" funktioniert nicht. Dies bedeutet, dass im Forum ein Thread zu einem Thema wie "So konfigurieren Sie den Server so, dass E-Mails gesendet werden" angezeigt wird.
- Und drittens ist im Allgemeinen keine zusätzliche Benachrichtigung erforderlich, da mehr oder weniger große Unternehmenskunden Veeam Backup & Replication verwenden . Die Konsole sammelt Informationen zu allen Sicherungen, die in bekannten Repositorys erstellt wurden. Überzeugen Sie sich selbst.
In der Version von
Veeam Backup & Replication 9.5 Update 4 ist es möglich, dieses Produkt kostenlos zu verwenden, jedoch mit einer Einschränkung für die gewarteten virtuellen / physischen Maschinen.
Wenn Sie bis zu 3 (einschließlich) physische Server haben, sind kostenlose VBR-Funktionen mehr als genug für Sie.
Wenn Sie mehr als 3 Computer haben, gibt es keine Möglichkeit, die Software zu bezahlen, aber Sie möchten Ihre Server trotzdem zentral überwachen. Ich empfehle, einige Skripte selbst hinzuzufügen. Ich mag es, mich in Python zu amüsieren, nachdem ich für C / C ++ gearbeitet habe.
veeamconfig
wir den
veeamconfig
. Das
veeamconfig
Team bietet Zugriff auf alle Funktionen des Produkts. Zweifellos ist die pseudografische Schnittstelle, die mit der
ncurses-Bibliothek erstellt wurde, für das Auge viel angenehmer. Wenn Sie jedoch Programme mit etwas Neuem verknüpfen müssen, ist die CLI unser Alles.
Die Beschreibung der Befehle von
Veeam Agent für Linux gilt für Version 3.0. Ich habe frühere Versionen nicht überprüft, daher kann es Unterschiede geben.
Die CLI-Oberfläche in
Veeam Agent für Linux ist sehr praktisch und gut dokumentiert.
veeamconfig --help
Sie einfach
veeamconfig --help
und Sie erhalten eine Liste der verfügbaren Befehle:
$sudo veeamconfig --help Veeam Agent for Linux (c) Veeam Software AG Usage: veeamconfig [command] Commands: repository - Backup repositories management vbrserver - Veeam Backup and Replication servers management job - Backup jobs management backup - Backups management point - Restore points management license - License management agreement - End User License Agreement management config - Import/export configuration schedule - Jobs schedule configuration cloud - Cloud provider management mode - Operation mode session - Sessions management ui - User interface aap - Application-aware processing version, --version, -v - Product version help, --help, -h - Short help
Um zu sehen, was Sie mit jedem Befehl tun können, rufen
veeamconfig config --help
einfach
veeamconfig config --help
. Wir bekommen:
Veeam Agent for Linux (c) Veeam Software AG Usage: veeamconfig config [command] Commands: import - Import repositories and jobs into database export - Export repositories and jobs from database grabLogs - Collect support logs bundle patchiso - Create custom Veeam Recovery Media adding all hardware drivers from this system help, --help, -h - Short help
Hier sehen wir
grabLogs
log collection. Auf diese Weise können Sie schnell alle erforderlichen Protokolle für den Support sammeln. Dies ist für den Fall, dass etwas schief geht.
Es gibt auch ein interessantes Team, das in Version 3.0 erschienen ist:
$ sudo veeamconfig agreement --help Veeam Agent for Linux (c) Veeam Software AG Usage: veeamconfig agreement [command] Commands: acceptEula - Accept Veeam End User License Agreements acceptThirdPartyLicenses - Accept Veeam 3rd party License Agreement show - Show End User License Agreements acceptance status help, --help, -h - Short help
Tatsache ist, dass der Benutzer ab Version 3.0 den Lizenzvereinbarungen ausdrücklich zustimmen muss. Es sieht ungefähr so aus:
$ sudo veeamconfig job list I accept Veeam Software End User License Agreement: /usr/share/doc/veeam/EULA (yes/no | y/n): yes I accept the terms of the following 3rd party software components license agreements: /usr/share/doc/veeam/3rd_party (yes/no | y/n):
Dementsprechend kann der Betrieb Ihrer Skripte gestört sein. Um nicht jede Maschine zu betreten und diesen Vorgang nicht manuell durchzuführen, wurden die folgenden Befehle bereitgestellt:
veeamconfig agreement acceptEula veeamconfig agreement acceptThirdPartyLicenses
Sie ermöglichen es Ihnen, Lizenzvereinbarungen ohne weitere Fragen zu akzeptieren.
Aber wir sind vom Thema des Schreibens eines Briefes abgewichen.
Für die Überwachung des
veeamconfig session list
benötigen wir den Befehl
veeamconfig session list
. Es gibt etwas aus wie:
Job name Type ID State Started at Finished at bj-home Backup {dbe48e88-3df7-4712-a472-09af8fed4e80} Success 2018-12-05 15:43 2018-12-05 15:44 bj-home Backup {c178a799-2935-4bd6-883b-b11278000076} Success 2018-12-05 16:26 2018-12-05 16:26 bj-home Backup {3405dad3-0016-4a00-933e-60ef66b30324} Success 2018-12-06 06:00 2018-12-06 06:00
Nun, hier gibt es Informationen, wann der Server gesichert wurde und was der Erfolg war. Grundsätzlich ist es bereits möglich, den „Auspuff“ in einer Datei zu sammeln und per Brief zu versenden. In einem Jahr kann der Buchstabe jedoch um ungefähr 365 Zeilen wachsen. Und die Suche nach einem fehlerhaften
Staat kann mühsam erscheinen. Daher werden wir diesen „Auspuff“ analysieren und eine normale Liste erhalten, mit der Sie bereits etwas tun können.
Den gesamten Code finden Sie
hier class CSession: @staticmethod def List(): return subproccall( ["veeamconfig", "session", "list"] ) class CSessionInfoList(object): def __init__(self, list): self.list = list def List(self): return self.list @staticmethod def Get(): text = CSession.List() lines = text.split("\n") list = []
Nun, jetzt machen wir einen Brief und schicken ihn uns.
def SendMailsessions(): print "---" print "Sending statistic to administrator:" sessions = veeamlpb.session.CSessionInfoList.Get() recipient = "dear.admin@company.com" subject = "VAL status notification" text = "Statistic:\n" inx = 0; successCount = 0 warningCount = 0 errorCount = 0 for sessionInfo in sessions.List(): if (sessionInfo.State() == "Success"): successCount += 1 elif (sessionInfo.State() == "Warning"): warningCount += 1 else: errorCount += 1 text += str(successCount)+"/"+str(warningCount)+"/"+str(errorCount)+" Success/Warning/Error\n" text += "Last 10 session:\n" for sessionInfo in reversed(sessions.List()): if inx == 10: text += "...\n" break; text += str(inx)+" | "+sessionInfo.State()+" | "+sessionInfo.JobName()+" | "+sessionInfo.StartTime()+" / "+sessionInfo.FinishTime() + "\n"
Als Ergebnis können wir nach der Installation von
mailutils einen Brief des Formulars erhalten:
Statistic: 3/0/0 Success/Warning/Error Last 10 session: 0 | Success | bj-home | 2018-12-06 06:00 / 2018-12-06 06:00 1 | Success | bj-home | 2018-12-05 16:26 / 2018-12-05 16:26 2 | Success | bj-home | 2018-12-05 15:43 / 2018-12-05 15:44 -------------------------------------------------------------------------------- Yours sincerely, Veeam Agent for Linux Monitor
Der Brief zeigt nur die letzten 10 Sitzungen an. Gleichzeitig werden am Anfang des Briefes Informationen über die Anzahl der erfolgreichen und nicht sehr Sitzungen angezeigt. Es reicht aus, sich die Zahlen im Brief zu Beginn des Arbeitstages anzusehen, die Post zu überprüfen und an einer Kaffeemaschine zu nippen, um zu verstehen, dass die Nachtsicherungen erfolgreich waren.
Wenn Sie etwas Offensichtlicheres benötigen, können Sie Informationen zu den Sitzungen im XML-Format anfordern und auf Ihren Server übertragen. Kombinieren Sie dort die erhaltenen Daten zu einer einzigen Übersichtstabelle, in der alle erforderlichen Informationen in einem für Sie geeigneten oder praktikablen Format angezeigt werden.
Wir bekommen die XML-paar Zeilen:
sessionList = veeamlpb.session.CSessionList() text = sessionList.ToXml()
Speichern Sie die resultierende Datei
sessionListFileName = "session_list.xml" print "Store XML to file: ",sessionListFileName sessionListXmlFile = open(sessionListFileName, "w") sessionListXmlFile.write(text) sessionListXmlFile.close()
Dann senden wir das empfangene XML an den Server. Eine alternative Option ist ebenfalls möglich: Der Server sammelt XMLs von Computern, die gesichert werden. Wer der Initiator ist, ist uns noch nicht wichtig. Es ist wichtig, dass XML-Dateien auf dem Server mit Sitzungslisten aller Computer erfasst werden. Ich habe die erste Option gewählt:
hostname = os.uname()[1] target = "user@admin-desktop:/home/user" os.system("scp ./"+sessionListFileName+" "+target+"/backups/"+hostname+"/session_list.xml")
Auf der Serverseite müssen nun die empfangenen Daten verarbeitet und eine schöne HTML-Seite erstellt werden.
import veeamlpb import os import datetime import xml.etree.ElementTree as xml def main(): hosts = [] backupsDirectory = "/home/user/backups" for item in os.listdir(backupsDirectory): if item in [".", ".."]: continue if os.path.isdir(os.path.join(backupsDirectory,item)): hosts.append(item) print "item: ",item if len(hosts) == 0: return 0 backupSessionMap = {} for host in hosts: print "found host: ", host sessionInfoFile = os.path.join(os.path.join(backupsDirectory,host), "session_list.xml") sessionList = veeamlpb.session.CSessionInfoList.FromXmlFile(sessionInfoFile) backupSessionMap[host] = sessionList for sessionInfo in sessionList.List(): print "Session:",sessionInfo.ToString() html = xml.Element("html") body = xml.SubElement(html, "body", {"style":"background-color: #00b336;"}) xml.SubElement(body,"h1").text = "Report at "+datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") xml.SubElement(body,"h2").text = "Statistic:" for host in hosts: sessionList = backupSessionMap[host] success=0 warning=0 error=0 if len(sessionList.List()) == 0: continue for sessionInfo in sessionList.List(): if sessionInfo.State() == "Success": success +=1 elif sessionInfo.State() == "Warning": warning +=1 else: error +=1 latestSessionInfo = sessionList.List()[-1] attr = {} if latestSessionInfo.State() == "Success":
Infolgedessen ist der Bericht fertig:

Ich hatte keine Aufgabe, ein schönes Produkt herzustellen. Die Aufgabe bestand darin zu zeigen, dass die Frage des Sammelns von Statistiken in Skripten in ein bis zwei Tagen gelöst werden kann.
Wenn Sie die hier vorgestellten Ideen entwickeln, können Sie im Prinzip einen „Open Backup Monitor für Veeam Agent für Linux“ erstellen. Meiner Meinung nach ein gutes Thema für Kursarbeiten in Python oder vielleicht sogar für ein Diplom oder nur eine Ausrede, um das Programmieren in einem Open-Source-Projekt zu üben. Stimmen Sie zu, es ist besser, das Programmieren zu üben, als ein Elf der 80. Stufe zu werden.
Der gesamte Code ist unter
http://www.github.com/CodeImp/veeampy/ zu finden. Download, Verwendung, Ergänzung und Gabel auf die Gesundheit.
Bitte beachten Sie, dass der Code unter der GPL-2-Lizenz verteilt wird, Fehler enthalten kann und vieles mehr. In der OpenSource-Welt ist alles wie gewohnt. Vergessen Sie also nicht, vor dem Einsatz in der Produktion in einem Testlabor zu fahren.