Woher kommen die Logs? Veeam Log Diving

Woher kommen die Logs? Veeam Log Diving

Wir setzen unser Eintauchen in die faszinierende Welt des Troubleshootings von Logs fort. In vorherigen Artikel haben wir uns auf die Bedeutung grundlegender Begriffe geeinigt und einen kurzen Blick auf die allgemeine Struktur von Veeam als einer einzigen Anwendung geworfen. Die Aufgabe besteht darin, zu verstehen, wie Logdateien erstellt werden, welche Informationen sie enthalten und warum sie so aussehen, wie sie aussehen.

Was denken Sie, was sind eigentlich diese "Logs"? Die meisten sind der Meinung, dass Logs jeder Anwendung die Rolle einer allmĂ€chtigen EntitĂ€t zugewiesen werden sollten, die die meiste Zeit irgendwo im Hintergrund dahinvegetiert, aber im entscheidenden Moment aus dem Nichts in strahlender RĂŒstung erscheint und alle rettet. Das heißt, sie sollten alles enthalten, von den kleinsten Fehlern in jedem Bestandteil bis hin zu einzelnen Datenbanktransaktionen. Und nach einem Fehler sollte sofort vermerkt werden, wie man ihn behebt. Und all dies sollte in ein paar Megabyte passen, nicht mehr. Es ist doch nur Text! Textdateien können doch nicht Dutzende von Gigabyte in Anspruch nehmen, das habe ich irgendwo gehört!

So, Logs

Im realen Leben sind Logs lediglich Archive diagnostischer Informationen. Und was dort gespeichert wird, woher die Informationen fĂŒr die Speicherung kommen und wie detailliert sie sein mĂŒssen, entscheiden die Entwickler selbst. Einige gehen den minimalistischen Weg und speichern nur EintrĂ€ge auf dem Niveau EIN/AUS, wĂ€hrend andere alles sorgfĂ€ltig zusammentragen, was sie nur erreichen können. Es gibt jedoch auch eine Zwischenlösung mit der Möglichkeit, das sogenannte Logging Level auszuwĂ€hlen, bei dem man selbst angibt, wie detailliert die Informationen, die man speichern möchte, sein sollen und wie viel Platz man auf den Festplatten hat =) VBR hat ĂŒbrigens sechs solcher Stufen. Und glauben Sie mir, Sie möchten nicht sehen, was passiert, wenn man mit der maximalen Detailgenauigkeit loggt und gleichzeitig freien Speicherplatz auf Ihrer Festplatte hat.

Gut. Wir haben ungefĂ€hr verstanden, was wir speichern möchten, aber es stellt sich die berechtigte Frage: Woher nehmen wir diese Informationen? Einige Ereignisse fĂŒr das Logging werden natĂŒrlich von unseren internen Prozessen selbst generiert. Aber was ist zu tun, wenn wir mit einer externen Umgebung interagieren? Um nicht in einen schrecklichen Strudel aus Notlösungen und Arbeit zu geraten, hat Veeam die Tendenz, bereits erfundene Lösungen nicht neu zu erfinden. Immer wenn eine bestehende API, eine integrierte Funktion im System, eine Bibliothek usw. verfĂŒgbar ist, geben wir den bevorzugten Lösungen den Vorzug, bevor wir unsere eigenen ausgeklĂŒgelten Lösungen entwickeln. Obwohl es davon auch genug gibt. Daher ist es beim Analysieren von Logs wichtig zu verstehen, dass der Löwenanteil der Fehler auf Meldungen von Drittanbieter-APIs, Systemaufrufen und anderen Bibliotheken zurĂŒckzufĂŒhren ist. In diesem Fall besteht die Rolle von VBR darin, diese Fehler so, wie sie sind, in die Logdateien weiterzuleiten. Die Hauptaufgabe des Benutzers besteht darin, zu lernen, welche Zeile von wem stammt und wofĂŒr dieses „wer“ verantwortlich ist. Daher ist es normal und richtig, wenn der Fehlercode aus dem VBR-Log auf eine MSDN-Seite verweist.

Wie bereits zuvor vereinbart: Veeam ist eine sogenannte SQL-basierte Anwendung. Das bedeutet, dass alle Einstellungen, alle Informationen und alles, was fĂŒr ein normales Funktionieren erforderlich ist, in seiner Datenbank gespeichert wird. Daraus folgt eine einfache Wahrheit: Was nicht in den Logs ist, befindet sich sehr wahrscheinlich in der Datenbank. Aber das ist auch keine universelle Lösung: Einige Dinge sind weder in den lokalen Logs der Veeam-Komponenten noch in seiner Datenbank zu finden. Daher muss man lernen, die Logs des Hosts, die Logs der lokalen Maschine und die Logs von allem, was am Backup- und Restore-Prozess beteiligt ist, zu studieren. Manchmal gibt es auch gar keine benötigten Informationen irgendwo. So ist der Weg. 

Einige Beispiele fĂŒr solche APIs

Diese Liste hat nicht das Ziel, vollstÀndig zu sein, weshalb man nicht die letzte Wahrheit darin suchen sollte. Ihre Aufgabe ist es, die hÀufigsten Drittanbieter-APIs und Technologien zu zeigen, die in unseren Produkten verwendet werden.

Lassen Sie uns beginnen mit VMware. 

Der erste in der Liste wird sein vSphere API. Wird verwendet fĂŒr Authentifizierung, das Lesen der Hierarchie, das Erstellen und Löschen von Snapshots, das Abrufen von Informationen ĂŒber Maschinen und vieles (sehr vieles) mehr. Die FunktionalitĂ€t der Lösung ist sehr umfangreich, daher kann ich allen Interessierten empfehlen, die VMware vSphere API Referenz fĂŒr die Version 5.5 und 6.0. FĂŒr aktuellere Versionen findet man alles leicht mit einer Google-Suche.

VIX API. Schwarze Magie des Hypervisors, fĂŒr die es eine separate Fehlerliste. VMware API zur Arbeit mit Dateien auf dem Host ohne Netzwerkverbindung. Eine letzte Hoffnung, wenn man eine Datei auf einen Rechner legen muss, zu dem es keinen besseren Kommunikationskanal gibt. Das bringt Schmerzen und Leiden mit sich, wenn die Datei groß ist und der Host ausgelastet. Aber hier gilt die Regel, dass selbst 56,6 Kb/s besser ist als 0 Kb/s. In Hyper-V wird so etwas PowerShell Direct genannt. Aber das war nur bis zum Erscheinen

des vSphere Web Services API Seit vSphere 6.0 (ungefĂ€hr, da dieses API erstmals in Version 5.5 vorgestellt wurde) wird es zur Verwaltung von Gastmaschinen verwendet und hat VIX mittlerweile praktisch ĂŒberall verdrĂ€ngt. Im Grunde genommen ist es ein weiteres API zur Steuerung von vSphere. Interessierten kann ich empfehlen, das zu studieren eine ausgezeichnete Dokumentation. 

VDDK (Virtual Disk Development Kit). Eine Bibliothek, ĂŒber die teilweise in diesem Artikel. Wird zur Lesung virtueller Festplatten verwendet. Vor langer Zeit war es Teil von VIX, wurde jedoch mit der Zeit in ein eigenstĂ€ndiges Produkt ausgelagert. Es nutzt jedoch als Erbe die gleichen Fehlercodes wie VIX. Aber aus irgendeinem Grund gibt es im SDK keine Beschreibung dieser Fehler. Daher wurde durch Erfahrung herausgefunden, dass VDDK-Fehler mit anderen Codes lediglich eine Übersetzung von binĂ€r in dezimal sind. Es besteht aus zwei Teilen – die erste HĂ€lfte enthĂ€lt undokumentierte Informationen zum Kontext, wĂ€hrend der zweite Teil die traditionellen VIX/VDDK-Fehler enthĂ€lt. Zum Beispiel, wenn wir sehen:

VDDK-Fehler: 21036749815809.Unbekannter Fehler

Dann konvertieren wir das einfach in hex und erhalten 132200000001. Den wenig informativen Anfang 132200 lassen wir einfach weg, und der Rest ist unser Fehlercode (VDDK 1: Unbekannter Fehler). Zu den hĂ€ufigsten VDDK-Fehlern gab es kĂŒrzlich eine separate Artikel.

Jetzt schauen wir uns das Windows.

Hier finden wir alles Wichtige und Notwendige im standardmĂ€ĂŸigen Ereignisanzeiger. Aber es gibt ein Problem: Nach alter Tradition protokolliert Windows nicht den vollstĂ€ndigen Text des Fehlers, sondern nur die Fehlernummer. Zum Beispiel: Fehler 5 – „Zugriff verweigert“, und 1722 – „Der RPC-Server ist nicht verfĂŒgbar“, sowie 10060 – „Die Verbindung ist abgelaufen“. NatĂŒrlich ist es gut, wenn man die bekanntesten kennt, aber wie soll man mit noch nie gesehenen umgehen? 

Um sicherzustellen, dass das Leben nicht zu sĂŒĂŸ erscheint, werden die Fehler auch in hexadezimaler Form mit dem PrĂ€fix 0x8007 gespeichert. Zum Beispiel steht 0x8007000e tatsĂ€chlich fĂŒr 14, Out of Memory. Warum und fĂŒr wen das gemacht wurde, bleibt ein Geheimnis. Eine vollstĂ€ndige Liste der Fehler kann jedoch kostenlos und ohne SMS von devcenrum.

Übrigens gibt es manchmal auch andere PrĂ€fixe und nicht nur 0x8007. In solch einer bedauerlichen Situation muss man noch tiefer in die HRESULT-Interpretation („result handle“) eintauchen Dokumentation fĂŒr Entwickler. Im normalen Leben wĂŒrde ich Ihnen so etwas nicht raten, aber falls Sie einmal gegen die Wand gedrĂ€ngt werden oder einfach nur neugierig sind, wissen Sie jetzt, was zu tun ist.

Aber die Leute bei Microsoft haben uns ein bisschen erbarmt und die Utility ERRherausgebracht. Es ist ein kleines StĂŒck Konsolenfreude, das in der Lage ist, Fehlercodes in verstĂ€ndliche Sprache zu ĂŒbersetzen, ohne Google zu benutzen. Es funktioniert ungefĂ€hr so.

C:UsersrootDesktop>err.exe 0x54f
# fĂŒr hex 0x54f / dezimal 1359
  ERROR_INTERNAL_ERROR                                           winerror.h
# Ein interner Fehler ist aufgetreten.
# als HRESULT: Schwere: ERFOLG (0), FACILITY_NULL (0x0), Code 0x54f
# fĂŒr hex 0x54f / dezimal 1359
  ERROR_INTERNAL_ERROR                                           winerror.h
# Ein interner Fehler ist aufgetreten.
# 2 Übereinstimmungen fĂŒr "0x54f" gefunden

Es stellt sich die berechtigte Frage: Warum schreiben wir nicht sofort die EntschlĂŒsselung in die Logs, sondern lassen diese geheimnisvollen Codes stehen? Die Antwort ist in Drittanbieteranwendungen zu finden. Wenn Sie selbst einen bestimmten WinAPI-Aufruf tĂ€tigen, ist es nicht schwierig, dessen Antwort zu entschlĂŒsseln, denn dafĂŒr gibt es sogar einen speziellen WinAPI-Aufruf. Aber wie bereits erwĂ€hnt, gelangen in unsere Logs alles, was wir als Antworten erhalten. Und hier mĂŒsste man diesen Bewusstseinsstrom stĂ€ndig ĂŒberwachen, um StĂŒcke mit Windows-Fehlern herauszufiltern, sie zu entschlĂŒsseln und wieder einzufĂŒgen. Um es ehrlich zu sagen, das ist kein aufregendes Unterfangen.

Windows File Management API wird bei der Arbeit mit Dateien in sÀmtlicher Hinsicht verwendet. Dateierstellung, -löschen, -öffnen zum Schreiben, Arbeit mit Attributen und vieles mehr.

Das oben erwĂ€hnte PowerShell Direct ist das Äquivalent zum VIX API in der Welt von Hyper-V. Leider nicht so flexibel: Es gibt viele funktionale EinschrĂ€nkungen, es funktioniert nicht mit jeder Host-Version und bei weitem nicht mit allen GĂ€sten.

RPC (Remote Procedure Call) Ich denke, es gibt keinen Menschen, der mit Windows gearbeitet hat und nicht auf RPC-bezogene Fehler gestoßen ist. Trotz weit verbreiteter MissverstĂ€ndnisse handelt es sich hierbei nicht um ein einheitliches Protokoll, sondern um jedes Client-Server-Protokoll, das eine Reihe von Parametern erfĂŒllt. Wenn jedoch in unseren Protokollen ein RPC-Fehler auftritt, handelt es sich in 90 % der FĂ€lle um einen Fehler von Microsoft RPC, das Teil von DCOM (Distributed Component Object Model) ist. Im Internet findet man eine riesige Menge an Dokumentationen zu diesem Thema, allerdings ist ein Großteil davon stark veraltet. Aber wenn der Wunsch besteht, das Thema zu lernen, kann ich Artikel empfehlen Was ist RPC?, Wie funktioniert RPC und eine endlose Liste von RPC-Fehlern.

Die Hauptursachen fĂŒr das Auftreten von RPC-Fehlern in unseren Protokollen sind fehlgeschlagene Versuche der Interaktion zwischen VBR-Komponenten (Server > Proxy, zum Beispiel) und hĂ€ufig aufgrund von Kommunikationsproblemen.

Der König unter allen Fehlern ist der Fehler The RPC server is unavailable (1722). Einfach gesagt konnte der Client keine Verbindung zum Server herstellen. Warum das passiert, hat keine einheitliche ErklĂ€rung, aber normalerweise handelt es sich um ein Problem mit der Authentifizierung oder dem Netzwerkzugang zum Port 135. Letzteres ist typisch fĂŒr Infrastrukturen mit dynamischer Portzuweisung. Zu diesem Thema gibt es sogar ein separates KB. Und von Microsoft gibt es einen umfassenden Leitfaden zur Fehlersuche.

Der zweithĂ€ufigste Fehler: There are no more endpoints available from the endpoint mapper (1753). Der RPC-Client oder -Server konnte sich keinen Port zuweisen. Dies tritt normalerweise auf, wenn der Server (in unserem Fall die Gastmaschine) fĂŒr die dynamische Portzuweisung aus einem engen Bereich konfiguriert war, der erschöpft ist. Wenn wir vom Client aus (in unserem Fall vom VBR-Server) betrachten, bedeutet das, dass unser VeeamVssAgent entweder nicht gestartet wurde oder nicht als RPC-Schnittstelle registriert wurde. Auch zu diesem Thema gibt es ein separates KB.

Und um die Top-3 der RPC-Fehler abzuschließen, erinnern wir an RPC function call failed (1726). Dieser tritt auf, wenn die Verbindung hergestellt wurde, aber die RPC-Anfragen nicht bearbeitet werden. Zum Beispiel fragen wir Informationen ĂŒber den Status von VSS an (vielleicht wird gerade eine Schattenkopie erstellt, wĂ€hrend wir versuchen darauf zuzugreifen), und wir erhalten nur Stille und Ignorieren als Antwort.

Windows Tape Backup API benötigt fĂŒr die Arbeit mit Bandbibliotheken oder Laufwerken. Wie ich zu Beginn erwĂ€hnt habe: eigene Treiber zu schreiben und sich dann mit der UnterstĂŒtzung jedes GerĂ€ts herumzuschlagen, macht uns keinen Spaß. Deshalb gibt es bei Veeam keine eigenen Treiber. Alles lĂ€uft ĂŒber die standardmĂ€ĂŸige API, deren UnterstĂŒtzung die Hardwareanbieter selbst realisieren. Das ist doch viel logischer, oder?

SMB/CIFS Alle schreiben sie aus Gewohnheit nebeneinander, obwohl sich nicht alle daran erinnern, dass CIFS (Common Internet File System) nur eine private Version von SMB (Server Message Block) ist. Es gibt also nichts Schlechtes daran, diese Konzepte zu verallgemeinern. Samba – das ist bereits die LinuxUnix-Implementierung, und dort gibt es besondere Eigenschaften, aber ich schweife ab. Was hier wichtig ist: Wenn Veeam bittet, etwas ĂŒber einen UNC-Pfad (serverdirectory) zu schreiben, verwendet der Server die Hierarchie der Dateisystemtreiber, einschließlich mup und mrxsmb, um auf die Freigabe zu schreiben. Dementsprechend werden auch diese Treiber Fehler erzeugen.

LĂ€sst sich nicht umgehen Winsock API. Wenn etwas ĂŒber das Netzwerk gemacht werden muss, arbeitet VBR ĂŒber die Windows Socket API, allgemein bekannt als Winsock. Wenn wir also im Protokoll die Kombination IP:Port sehen, ist das es. In der offiziellen Dokumentation gibt es eine ganz ordentliche Liste möglicher Fehler.

Das oben erwĂ€hnte WMI (Windows Management Instrumentation) – das ist eine Art Alleskönner-API zur Verwaltung von allem und jedem in der Windows-Welt. Bei der Arbeit mit Hyper-V laufen praktisch alle Anfragen an den Host genau darĂŒber. Kurz gesagt, ein Ă€ußerst unverzichtbares Werkzeug mit sehr mĂ€chtigen Möglichkeiten. In dem Versuch, herauszufinden, wo und was kaputtgegangen ist, hilft das eingebaute Tool WBEMtest.exe sehr.

Und der letzte in der Liste, aber bei weitem nicht der unwichtigste – VSS (Volume Shadow Storage). Das Thema ist so unergrĂŒndlich und geheimnisvoll, wie viel darĂŒber dokumentiert wurde. Shadow Copy lĂ€sst sich am besten als eine besondere Art von Snapshot verstehen, der im Grunde genau das ist. Dank ihm können in VMware anwendungskonsistente Backups erstellt werden, wĂ€hrend in Hyper-V beinahe alles getan werden kann. Ich plane, einen eigenen Artikel mit einer Art Zusammenfassung zu VSS zu erstellen, aber bis dahin könnt ihr versuchen, diese Beschreibung. Seid nur vorsichtig, denn der Versuch, VSS aus dem Stegreif zu verstehen, kann zu GehirnerschĂŒtterungen fĂŒhren.

Damit können wir wohl auch aufhören. Ich betrachte die Aufgabe, die grundlegendsten Dinge zu erklĂ€ren, als erfĂŒllt, sodass wir im nĂ€chsten Kapitel bereits die Protokolle betrachten werden. Aber wenn noch Fragen offenbleiben, zögert nicht, sie in den Kommentaren zu Ă€ußern.

Quelle: habr.com

60GB SSD 8Gb DDR4