Freigeben über


Sammeln von Textdateien von einem virtuellen Computer mit Azure Monitor

Viele Anwendungen und Dienste auf einem virtuellen Computer protokollieren Informationen in Textdateien anstelle von Standardprotokollierungsdiensten wie Windows-Ereignisprotokoll oder Syslog. Das Sammeln von benutzerdefinierten Textprotokollen von virtuellen Computern kann mithilfe einer Datensammlungsregel (Data Collection Rule, DCR) und einer Datenquelle für benutzerdefinierte Textprotokolle erfolgen.

Details zur Erstellung des DCR werden in " Sammeln von Daten vom VM-Client mit Azure Monitor" bereitgestellt. Dieser Artikel enthält zusätzliche Details für den Datenquellentyp "Benutzerdefinierte Textprotokolle".

Hinweis

Informationen zum direkten Arbeiten mit der DCR-Definition oder zur Bereitstellung mit anderen Methoden wie ARM-Vorlagen finden Sie in Den Beispielen zur Datensammlungsregel (Data Collection Rule, DCR) in Azure Monitor.

Voraussetzungen

Zusätzlich zu den Voraussetzungen, die unter "Sammeln von Daten vom Client für virtuelle Computer mit Azure Monitor" aufgeführt sind, benötigen Sie eine benutzerdefinierte Tabelle in einem Log Analytics-Arbeitsbereich, um die Daten zu empfangen. Details zu den Anforderungen dieser Tabelle finden Sie in der Tabelle des Log Analytics-Arbeitsbereichs . Beachten Sie, dass Aarch64 alma8 und rocky8 nicht unterstützt werden.

Konfigurieren von benutzerdefinierten Textdateidatenquellen

Erstellen Sie den DCR mithilfe des Prozesses in "Sammeln von Daten vom virtuellen Maschinen-Client mit Azure Monitor". Wählen Sie auf der Registerkarte "Sammeln und Übermitteln" des DCR im Dropdownmenü "Datenquellentyp" die Option "Benutzerdefinierte Textprotokolle" aus.

Screenshot der Konfiguration der Textdateisammlung.

Die optionen, die in der Konfiguration für benutzerdefinierte Textprotokolle verfügbar sind, werden in der folgenden Tabelle beschrieben.

Konfiguration BESCHREIBUNG
Dateimuster Hiermit wird der Speicherort und der Namen von Protokolldateien auf dem lokalen Datenträger angegeben. Verwenden Sie Platzhalterzeichen für Dateinamen, die variieren, zum Beispiel, wenn täglich eine Datei mit einem neuen Namen erstellt wird. Sie können mehrere Dateimuster durch Komma getrennt eingeben. Sie können Wildcards nur im Dateinamen und im Ordnernamen der ersten Ebene verwenden, die über dem Dateinamen steht.

Beispiele
– C:\Logs\MyLog.txt
– C:\Logs\MyLog*.txt
-C:\Logs\IIS*\*.logs
– C:\App01\AppLog.txt, C:\App02\AppLog.txt
– /var/mylog.log
– /var/mylog*.log
Tabellenname Dies ist der Name der Zieltabelle in Ihrem Log Analytics-Arbeitsbereich. Diese Tabelle muss bereits vorhanden sein.
Datensatztrennzeichen Gibt das Trennzeichen zwischen Protokolleinträgen an. TimeStamp ist der einzige aktuell zulässige Wert. Dadurch wird nach einem Datum im angegebenen timeFormat Format gesucht, um den Anfang eines neuen Datensatzes zu identifizieren. Wenn kein Datum im angegebenen Format gefunden wird, wird das Zeilenende verwendet. Weitere Informationen finden Sie unter "Zeitformate ".
TimeStamp-Format Das zeitformat, das in der Protokolldatei verwendet wird, wie in den folgenden Zeitformaten beschrieben.
Umwandeln Dies ist die Erfassungszeittransformation zum Filtern von Datensätzen oder zum Formatieren der eingehenden Daten für die Zieltabelle. Verwenden Sie source, um eingehende Daten unverändert zu lassen und an die RawData-Spalte zu senden. Ein Beispiel für die Verwendung einer Transformation finden Sie unter "Durch Trennzeichen getrennte Protokolldateien ".

Hinzufügen von Zielen

Benutzerdefinierte Textprotokolle können nur an einen Log Analytics-Arbeitsbereich gesendet werden, in dem sie in der benutzerdefinierten Tabelle gespeichert ist, die Sie erstellen. Fügen Sie ein Ziel vom Typ Azure Monitor Logs hinzu, und wählen Sie einen Log Analytics-Arbeitsbereich aus. Sie können einem DCR nur einen einzelnen Arbeitsbereich für eine benutzerdefinierte Textprotokolldatenquelle hinzufügen. Wenn Sie mehrere Ziele benötigen, erstellen Sie mehrere DCRs. Beachten Sie jedoch, dass dadurch doppelte Daten an jedes gesendet werden, was zu zusätzlichen Kosten führt.

Screenshot, der die Konfiguration eines Azure Monitor-Logs-Ziels in einer Datensammlungsregel zeigt.

Zeitformate

In der folgenden Tabelle werden die Zeitformate beschrieben, die in der timeFormat Einstellung des DCR unterstützt werden. Wenn eine Zeit mit dem angegebenen Format im Protokolleintrag enthalten ist, wird sie verwendet, um einen neuen Protokolleintrag zu identifizieren. Wenn kein Datum im angegebenen Format gefunden wird, wird das Zeilenende als Trennzeichen verwendet. Weitere Informationen dazu, wie diese Einstellung verwendet wird, finden Sie unter "Mehrzeilenprotokolldateien ".

Zeitformat Beispiel
ISO 8601 1 2024-10-29T18:28:34Z
yyyy-MM-ddTHH:mm:ssk 2024-10-29T18:28:34Z
2024-10-29T18:28:34+01:11
YYYY-MM-DD HH:MM:SS 2024-10-29 18:28:34
M/D/YYYY HH:MM:SS AM/PM 10.29.2024 06:28:34 Pm
Mon DD, YYYY HH:MM:SS 29. Oktober 2024 18:28:34
yyMMdd HH:mm:ss 241029 18:28:34
ddMMyy HH:mm:ss 291024 18:28:34
MMM d HH:mm:ss 29. Oktober 18:28:34
dd/MMM/yyyy:HH:mm:ss zzz 14.Oktober/2024:18:28:34 -00

1 ISO 8601-Zeitstempel mit Dezimalstellen / Subsekundengenauigkeit werden nicht unterstützt.

Anforderungen an die Textdatei und Best Practices

Die von Azure Monitor erfasste Datei muss die folgenden Anforderungen erfüllen:

  • Die Datei muss auf dem lokalen Laufwerk des Agentcomputers im verzeichnis gespeichert werden, das überwacht wird.
  • Die Datei muss die ASCII- oder UTF-8-Codierung verwenden. Andere Formate wie UTF-16 werden nicht unterstützt.
  • Neue Datensätze sollten am Ende der Datei angefügt werden und alte Datensätze nicht überschreiben. Das Überschreiben führt zu Datenverlusten.

Nachfolgend finden Sie ein Beispiel für eine typische benutzerdefinierte Textdatei, die von Azure Monitor gesammelt werden kann. Obwohl jede Zeile mit einem Datum beginnt, ist dies nicht erforderlich, da das Ende der Zeile verwendet wird, um jeden Eintrag zu identifizieren, wenn kein Datum gefunden wird.

2024-06-21 19:17:34,1423,Error,Sales,Unable to connect to pricing service.
2024-06-21 19:18:23,1420,Information,Sales,Pricing service connection established.
2024-06-21 21:45:13,2011,Warning,Procurement,Module failed and was restarted.
2024-06-21 23:53:31,4100,Information,Data,Nightly backup complete.

Befolgen Sie diese Empfehlungen, um sicherzustellen, dass keine Datenverluste oder Leistungsprobleme auftreten:

  • Zielen Sie nicht auf mehr als 10 Verzeichnisse mit Protokolldateien. Das Abrufen zu vieler Verzeichnisse beeinträchtigt die Leistung.
  • Bereinigen Sie Protokolldateien im überwachten Verzeichnis kontinuierlich. Die Nachverfolgung vieler Protokolldateien kann die CPU- und Arbeitsspeicherauslastung des Agents erhöhen. Warten Sie mindestens zwei Tage, um ausreichend Zeit für die Verarbeitung aller Protokolle zuzulassen.
  • Ändern Sie den Namen einer Datei, der dem Dateisuchmuster entspricht, nicht in einen anderen Namen, der dem Dateisuchmuster ebenfalls entspricht. Dies führt dazu, dass doppelte Daten erfasst werden.
  • Benennen Sie keine großen Protokolldateien um, die dem Dateisuchmuster entsprechen, und kopieren Sie sie nicht in das überwachte Verzeichnis. Wenn Sie dies tun müssen, dürfen 50 MB pro Minute nicht überschritten werden.

Log Analytics-Arbeitsbereichstabelle

Jeder Eintrag in der Protokolldatei wird erfasst, während er erstellt und an die angegebene Tabelle in einem Log Analytics-Arbeitsbereich gesendet wird. Die benutzerdefinierte Tabelle im Log Analytics-Arbeitsbereich, die die Daten empfängt, muss vorhanden sein, bevor Sie den DCR erstellen.

In der folgenden Tabelle werden die erforderlichen und optionalen Spalten in der Arbeitsbereichstabelle beschrieben. Die Tabelle kann andere Spalten enthalten, aber sie werden nicht aufgefüllt, es sei denn, Sie analysieren die Daten mit einer Transformation, wie in getrennten Protokolldateien beschrieben.

Kolumne Typ Erforderlich? BESCHREIBUNG
TimeGenerated Datum/Uhrzeit Ja Diese Spalte enthält die Zeit, zu der der Datensatz generiert wurde und in allen Tabellen erforderlich ist. Dieser Wert wird automatisch mit dem Zeitpunkt aufgefüllt, zu dem der Datensatz dem Log Analytics-Arbeitsbereich hinzugefügt wird. Sie können diesen Wert mithilfe einer Transformation außer Kraft setzen, um TimeGenerated auf einen Wert aus dem Protokolleintrag festzulegen.
RawData Schnur Ja 1 Dies ist der gesamte Protokolleintrag in einer einzelnen Spalte. Sie können eine Transformation verwenden, wenn Sie diese Daten vor dem Senden an die Tabelle in mehrere Spalten aufteilen möchten.
Computer Schnur Nein Wenn die Tabelle diese Spalte enthält, wird sie mit dem Namen des Computers aufgefüllt, von dem der Protokolleintrag erfasst wurde.
FilePath Schnur Nein Wenn die Tabelle diese Spalte enthält, wird sie mit dem Pfad zur Protokolldatei aufgefüllt, aus der der Protokolleintrag erfasst wurde.

1 Die Tabelle muss keine Spalte enthalten RawData , wenn Sie eine Transformation verwenden, um die Daten in mehrere Spalten zu analysieren.

Bei der Erfassung mithilfe von Standardeinstellungen werden die Daten aus der oben gezeigten Beispielprotokolldatei wie folgt angezeigt, wenn sie mit einer Protokollabfrage abgerufen werden.

Screenshot der Protokollabfrage, die Ergebnisse der Standarddateiauflistung zurückgibt.

Erstellen einer benutzerdefinierten Tabelle

Wenn die Zieltabelle noch nicht vorhanden ist, müssen Sie sie vor dem Erstellen des DCR erstellen. Siehe Erstellen einer benutzerdefinierten Tabelle für verschiedene Methoden zum Erstellen einer Tabelle.

Sie können z. B. das folgende PowerShell-Skript verwenden, um eine benutzerdefinierte Tabelle zu erstellen, um die Daten aus einem benutzerdefinierten Textprotokoll zu empfangen. In diesem Beispiel werden auch die optionalen Spalten hinzugefügt.

$tableParams = @'
{
    "properties": {
        "schema": {
               "name": "{TableName}_CL",
               "columns": [
                    {
                        "name": "TimeGenerated",
                        "type": "DateTime"
                    }, 
                    {
                        "name": "Computer",
                        "type": "string"
                    },
                    {
                        "name": "FilePath",
                        "type": "string"
                    },
                    {
                        "name": "RawData",
                        "type": "string"
                    }
              ]
        }
    }
}
'@

Invoke-AzRestMethod -Path "/subscriptions/{subscription}/resourcegroups/{resourcegroup}/providers/microsoft.operationalinsights/workspaces/{workspace}/tables/MyTable_CL?api-version=2021-12-01-preview" -Method PUT -payload $tableParams

Mehrzeilige Protokolldateien

Einige Protokolldateien können Einträge enthalten, die mehrere Zeilen umfassen. Wenn jeder Protokolleintrag mit einem Datum beginnt, kann dieses Datum als Trennzeichen verwendet werden, um jeden Protokolleintrag zu definieren. In diesem Fall werden die zusätzlichen Zeilen in der RawData Spalte miteinander verknüpft.

Die Textdatei im vorherigen Beispiel kann z. B. wie folgt formatiert werden:

2024-06-21 19:17:34,1423,Error,Sales,
Unable to connect to pricing service.
2024-06-21 19:18:23,1420,Information,Sales,
Pricing service connection established.
2024-06-21 21:45:13,2011,Warning,Procurement,
Module failed and was restarted.
2024-06-21 23:53:31,4100,Information,Data,
Nightly backup complete.

Wenn das Zeitstempelformat YYYY-MM-DD HH:MM:SS im DCR verwendet wird, werden die Daten auf die gleiche Weise wie im vorherigen Beispiel gesammelt. Die zusätzlichen Zeilen würden in der RawData Spalte enthalten sein. Wenn ein weiteres Zeitstempelformat verwendet wurde, das nicht mit dem Datum im Protokolleintrag übereinstimmt, werden alle Einträge als zwei separate Datensätze erfasst.

Durch Trennzeichen getrennte Protokolldateien

Viele Textdateien enthalten Einträge mit Spalten, die durch ein Zeichen wie ein Komma getrennt sind. Anstatt den gesamten Eintrag an die RawData Spalte zu senden, können Sie die Daten in separate Spalten analysieren, sodass jede in der Zieltabelle aufgefüllt werden kann. Verwenden Sie eine Transformation mit der geteilten Funktion , um diese Analyse durchzuführen.

Die oben gezeigte Beispieltextdatei ist durch Trennzeichen getrennt, und die Felder können wie folgt beschrieben werden: Time, , Code, , Severity, Moduleund Message. Um diese Daten in separate Spalten zu analysieren, fügen Sie die einzelnen Spalten zur Zieltabelle hinzu, und fügen Sie der DCR die folgende Transformation hinzu.

Von Bedeutung

Bevor Sie diese Transformation zum DCR hinzufügen, müssen Sie diese Spalten zur Zieltabelle hinzufügen. Sie können das obige PowerShell-Skript ändern, um die zusätzlichen Spalten einzuschließen, wenn die Tabelle erstellt wird. Oder verwenden Sie das Azure-Portal, wie unter Hinzufügen oder Löschen einer benutzerdefinierten Spalte beschrieben, um die Spalten zu einer vorhandenen Tabelle hinzuzufügen.

Zu den wichtigen Details der Transformationsabfrage gehören die folgenden:

  • Die Abfrage gibt Eigenschaften aus, die jeweils einem Spaltennamen in der Zieltabelle entsprechen.
  • In diesem Beispiel wird die Time Eigenschaft in der Protokolldatei umbenannt, sodass dieser Wert für TimeGenerated verwendet wird. Wenn dies nicht angegeben wurde, wird TimeGenerated mit der Aufnahmezeit befüllt.
  • Da split dynamische Daten zurückgibt, müssen Sie Funktionen wie tostring und toint verwenden, um die Daten in den richtigen Skalartyp zu konvertieren.
source | project d = split(RawData,",") | project TimeGenerated=todatetime(d[0]), Code=toint(d[1]), Severity=tostring(d[2]), Module=tostring(d[3]), Message=tostring(d[4])

Screenshot: Konfiguration der durch Kommas getrennten Dateisammlung

Wenn Sie diese Daten mit einer Protokollabfrage abrufen, werden die folgenden Ergebnisse zurückgegeben.

Screenshot: Protokollabfrage, die Ergebnisse einer durch Kommas getrennten Dateisammlung zurückgibt

Problembehandlung

Führen Sie die folgenden Schritte aus, wenn Sie nicht die erwarteten Daten aus dem Textprotokoll sammeln.

  • Vergewissern Sie sich, dass Daten in die erfasste Protokolldatei geschrieben werden.
  • Stellen Sie sicher, dass der Name und Speicherort der Protokolldatei dem von Ihnen angegebenen Dateimuster entspricht.
  • Überprüfen Sie, ob das Schema der Zieltabelle dem eingehenden Datenstrom entspricht oder Sie über eine Transformation verfügen, die den eingehenden Datenstrom in das richtige Schema konvertiert.
  • Unter Vorgang überprüfen können Sie überprüfen, ob der Agent funktioniert und Daten empfangen werden.

Nächste Schritte