Sammeln von Protokollen aus einer Text- oder JSON-Datei mit Azure Monitor Agent

Viele Anwendungen protokollieren Informationen in Text- oder JSON-Dateien anstelle von Standard-Protokollierungsdiensten wie Windows Event Log oder Syslog. Dieser Artikel erklärt, wie Sie mit dem Azure Monitor Agent Protokolldaten aus Text- und JSON-Dateien auf überwachten Rechnern sammeln können, indem Sie eine Datensammelregel (DCR) erstellen.

Hinweis

Die JSON-Erfassung befindet sich zurzeit in der Vorschau.

Voraussetzungen

Um dieses Verfahren abschließen zu können, benötigen Sie Folgendes:

  • Log Analytics-Arbeitsbereich, in dem Sie mindestens über die Berechtigung „Mitwirkender“ verfügen.

  • Ein oder zwei Datensammlungsendpunkte, je nachdem, ob sich Ihr virtueller Computer und der Log Analytics-Arbeitsbereich in derselben Region befinden.

    Weitere Informationen finden Sie unter Einrichten von Datensammlungsendpunkten basierend auf Ihrer Bereitstellung.

  • Berechtigungen zum Erstellen von Datensammlungsregel-Objekten im Arbeitsbereich.

  • JSON-Text muss für eine ordnungsgemäße Erfassung in einer einzelnen Zeile enthalten sein. Das JSON-Text(Datei)-Format wird nicht unterstützt.

  • Eine VM, eine VM-Skalierungsgruppe, ein lokaler Arc-fähiger Server oder ein Azure Monitor-Agent auf einem lokalen Windows-Client, der Protokolle in eine Text- oder JSON-Datei schreibt.

    Anforderungen an Text- und JSON-Dateien und bewährte Methoden:

    • Speichern Sie Dateien auf dem lokalen Laufwerk des Computers, auf dem der Azure Monitor-Agent ausgeführt wird, und in dem Verzeichnis, das überwacht wird.
    • Trennen Sie das Ende eines Datensatzes mit einem Zeilenende ab.
    • Es muss die ASCII- oder UTF-8-Codierung verwendet werden. Andere Formate wie UTF-16 werden nicht unterstützt.
    • Erstellen Sie jeden Tag eine neue Protokolldatei, damit Sie alte Dateien problemlos entfernen können.
    • Bereinigen Sie alle alten Protokolldateien im überwachten Verzeichnis. Die Nachverfolgung vieler Protokolldateien kann die CPU- und Arbeitsspeicherauslastung des Agents erhöhen. Warten Sie mindestens 2 Tage, dass ausreichend Zeit für die Verarbeitung aller Protokolle vorhanden ist.
    • Überschreiben Sie vorhandene Dateien nicht mit neuen Daten. Sie sollten neue Datensätze nur am Ende der Datei anfügen. Das Überschreiben führt zu Datenverlusten.
    • Benennen Sie eine Datei nicht um und öffnen Sie dann nicht eine neue Datei mit demselben Namen. Dies kann zu Datenverlust führen.
    • Benennen Sie große Protokolldateien, die dem Dateisuchmuster entsprechen, nicht um und kopieren Sie sie nicht in das überwachte Verzeichnis. Wenn Sie dies tun müssen, dürfen 50 MB pro Minute nicht überschritten werden.
    • Benennen Sie eine Datei, die dem Dateisuchmuster entspricht, nicht um, sodass sie einen neuen Namen erhält, der ebenfalls dem Dateisuchmuster entspricht. Dies führt dazu, dass doppelte Daten erfasst werden.

Erstellen einer benutzerdefinierten Tabelle

Die im Skript erstellte Tabelle weist zwei Spalten auf:

  • TimeGenerated (datetime) [Erforderlich]
  • RawData (string) [Optional, wenn Tabellenschema angegeben]
  • 'FilePath' (string) [Optional]
  • YourOptionalColumn (string) [Optional]

Das Standardtabellenschema für Protokolldaten, die aus Textdateien gesammelt werden, ist „TimeGenerated“ und „RawData“. Das Hinzufügen von „FilePath“ zu einem der beiden Teams ist optional. Wenn Sie wissen, dass Ihr endgültiges Schema oder Ihre Quelle ein JSON-Protokoll ist, können Sie die endgültigen Spalten im Skript hinzufügen, bevor Sie die Tabelle erstellen. Sie können später immer mit der Log Analytics-Tabelle UI Spalten hinzufügen.

Ihre Spaltennamen und JSON-Attribute müssen exakt übereinstimmen, um sie automatisch in eine Tabelle zu parsen. Sowohl bei Spalten als auch JSON-Attributen wird die Groß-/Kleinschreibung beachtet. Rawdata erfasst die Ereignisdaten beispielsweise nicht. Muss ein RawData sein. Bei der Erfassung werden JSON-Attribute abgelegt, die nicht über eine entsprechende Spalte verfügen.

Der REST-Aufruf kann am einfachsten über eine Azure Cloud PowerShell-Befehlszeile (CLI) ausgeführt werden. Wechseln Sie zum Öffnen der Shell zum Azure-Portal, klicken Sie auf die Schaltfläche „Cloud Shell“, und wählen Sie „PowerShell“ aus. Wenn Sie die Azure Cloud PowerShell zum ersten Mal verwenden, müssen Sie den einmaligen Konfigurationsassistenten durchlaufen.

Kopieren Sie dieses Skript, und fügen Sie es in PowerShell ein, um die Tabelle in Ihrem Arbeitsbereich zu erstellen:

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

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

Sie sollten eine 200-Antwort und Details über die Tabelle erhalten, die Sie gerade erstellt haben.

Erstellen einer Datensammlungsregel für eine Text- oder JSON-Datei

Die Datensammlungsregel definiert Folgendes:

  • Welche Quellprotokolldateien der Azure Monitor-Agent auf neue Ereignisse überprüft
  • Wie Azure Monitor Ereignisse während der Erfassung transformiert
  • Den Log Analytics-Zielarbeitsbereich und die Tabelle, in die Azure Monitor die Daten überträgt

Sie können eine Datensammlungsregel definieren, um Daten von mehreren Computern an mehrere Log Analytics-Arbeitsbereiche zu senden, u. a. Arbeitsbereiche in einer anderen Region oder einem anderen Mandanten. Erstellen Sie die Datensammlungsregel in der Region, in der sich auch Ihr Log Analytics-Arbeitsbereich befindet.

Hinweis

Zum mandantenübergreifenden Senden von Daten müssen Sie zuerst Azure Lighthouse aktivieren.

Führen Sie die Schritte der Resource Manager-Vorlage aus, um Ihre JSON-Protokolldatei automatisch in eine benutzerdefinierte Tabelle zu parsen. Textdaten können mithilfe der Erfassungszeittransformation in Spalten transformiert werden.

So erstellen Sie die Datensammlungsregel im Azure-Portal

  1. Wählen Sie im Menü Überwachen die Option Datensammlungsregeln aus.

  2. Wählen Sie Erstellen aus, um eine neue Datensammlungsregel und Zuordnungen zu erstellen.

    Screenshot: Schaltfläche „Erstellen“ im Bildschirm „Datensammlungsregeln“.

  3. Geben Sie einen Regelnamen ein, und geben Sie ein Abonnement, eine Ressourcengruppe, eine Region, einen Plattformtyp und einen Datensammlungsendpunkt an:

    • Region: Hiermit wird angegeben, wo die Datensammlungsregel erstellt wird. Die virtuellen Computer und ihre Zuordnungen können unter einem beliebigen Abonnement bzw. einer Ressourcengruppe auf dem Mandanten angeordnet sein.
    • Plattformtyp gibt die Art der Ressourcen an, auf die diese Regel angewendet werden kann. Die Option Benutzerdefiniert ermöglicht sowohl Windows- als auch Linux-Typen.
    • Der Endpunkt der Datensammlung gibt den Datensammlungsendpunkt an, an den der Azure Monitor-Agent gesammelte Daten sendet. Dieser Datensammlungsendpunkt muss sich in derselben Region befinden wie der Log Analytics-Arbeitsbereich. Weitere Informationen finden Sie unter Einrichten von Datensammlungsendpunkten basierend auf Ihrer Bereitstellung.

    Screenshot: Registerkarte „Allgemeine Informationen“ im Bildschirm „Datensammlungsregeln“.

  4. Gehen Sie auf der Registerkarte Ressourcen wie folgt vor:

    1. Wählen Sie + Ressourcen hinzufügen aus, und ordnen Sie der Datensammlungsregel Ressourcen zu. Ressourcen können virtuelle Computer sowie Virtual Machine Scale Sets- und Azure Arc für Server-Instanzen sein. Das Azure-Portal installiert den Azure Monitor-Agent auf Ressourcen, auf denen der Agent noch nicht installiert ist.

      Wichtig

      Das Portal aktiviert zusätzlich zu den vorhandenen benutzerseitig zugewiesenen Identitäten (sofern vorhanden) eine systemseitig zugewiesene verwaltete Identität auf den Zielressourcen. Wenn die benutzerseitig zugewiesene Identität von Ihnen nicht extra in der Anforderung angegeben wird, wird auf dem Computer für vorhandene Anwendungen standardmäßig die systemseitig zugewiesene Identität verwendet.

    2. Wählen Sie Datensammlungsendpunkte aktivieren aus.

    3. Optional können Sie einen Datensammlungsendpunkt für jede der VMs auswählen, die der Datensammlungsregel zugeordnet sind. Meistens sollten Sie jedoch einfach die Standardwerte verwenden.

      Dieser Datensammlungsendpunkt sendet Konfigurationsdateien an den virtuellen Computer und muss sich in derselben Region wie der virtuelle Computer befinden. Weitere Informationen finden Sie unter Einrichten von Datensammlungsendpunkten basierend auf Ihrer Bereitstellung.

    Screenshot: Registerkarte „Ressourcen“ im Bildschirm „Datensammlungsregeln“.

  5. Wählen Sie auf der Registerkarte Sammeln und übermitteln die Option Datenquelle hinzufügen aus, um eine Datenquelle hinzuzufügen und ein Ziel festzulegen.

  6. Wählen Sie im Dropdownmenü Datenquellentyp die Option Benutzerdefinierte Textprotokolle oder JSON-Protokolle aus.

  7. Geben Sie die folgenden Informationen an:

    • Dateimuster: gibt an, wo sich die Protokolldateien auf dem lokalen Datenträger befinden. Sie können mehrere durch Kommas getrennte Dateimuster eingeben (unter Linux ist für die Erfassung aus einer durch Kommas getrennten Liste von Dateimustern die AMA-Version 1.26 oder höher erforderlich).

      Beispiele gültiger Eingaben:

      • 20220122-MyLog.txt
      • ProcessA_MyLog.txt
      • ErrorsOnly_MyLog.txt, WarningOnly_MyLog.txt

      Hinweis

      Mehrere Protokolldateien desselben Typs sind in der Regel im selben Verzeichnis vorhanden. Beispielsweise kann ein Computer täglich eine neue Datei erstellen, um zu verhindern, dass die Protokolldatei zu groß wird. Zum Sammeln von Protokolldaten in diesem Szenario können Sie einen Dateiplatzhalter verwenden. Verwenden Sie für Windows das Format C:\directoryA\directoryB\*MyLog.txt und für Linux /var/*.log. Verzeichnisplatzhalter werden nicht unterstützt.

    • Tabellenname: der Name der Zieltabelle, die Sie in Ihrem Log Analytics-Arbeitsbereich erstellt haben. Weitere Informationen finden Sie unter Erstellen einer benutzerdefinierten Tabelle.

    • Datensatztrennzeichen: wird in Zukunft verwendet, um andere Trennzeichen als das derzeit unterstützte Zeilenende (/r/n) zuzulassen.

    • Transformieren: Fügen Sie eine Transformation zur Erfassungszeit hinzu, oder übernehmen Sie Quelle, wenn Sie die gesammelten Daten nicht transformieren müssen.

  8. Fügen Sie auf der Registerkarte Ziel mindestens ein Ziel für die Datenquelle hinzu. Sie können mehrere gleich- oder verschiedenartige Ziele auswählen. Sie können beispielsweise mehrere Log Analytics-Arbeitsbereiche auswählen (wird auch als Multihoming bezeichnet).

    Screenshot, der die Zielregisterkarte auf dem Bildschirm „Datenquelle hinzufügen“ für eine Datensammlungsregel im Azure-Portal anzeigt.

  9. Wählen Sie Überprüfen und erstellen aus, um die Details der Datensammlungsregel und die Zuordnung zur Gruppe mit den virtuellen Computern zu überprüfen.

  10. Wählen Sie Erstellen aus, um die Datensammlungsregel zu erstellen.

Hinweis

Nach dem Erstellen der Datensammlungsregel kann es bis zu zehn Minuten dauern, bis Daten an die Ziele übertragen werden.

Beispielprotokollabfragen

Bei den hier verwendeten Spaltennamen handelt es sich lediglich um Beispiele. Die Spaltennamen für Ihr Protokoll lauten höchstwahrscheinlich anders.

  • Zählen Sie die Anzahl der Ereignisse nach Code.

    MyApp_CL
    | summarize count() by code
    

Beispiel für eine Warnungsregel

  • Erstellen Sie für jedes Fehlerereignis eine Warnungsregel.

    MyApp_CL
    | where status == "Error"
    | summarize AggregatedValue = count() by Computer, bin(TimeGenerated, 15m)
    

Problembehandlung

Führen Sie die folgenden Schritte aus, um Probleme mit der Sammlung von Protokollen aus Text- und JSON-Dateien zu beheben.

Überprüfen, ob Sie Daten zu Ihrer benutzerdefinierten Tabelle aufgenommen haben

Prüfen Sie zunächst, ob Datensätze in Ihre benutzerdefinierte Protokolltabelle aufgenommen wurden, indem Sie die folgende Abfrage in Log Analytics ausführen:

<YourCustomTable>_CL
| where TimeGenerated > ago(48h)
| order by TimeGenerated desc

Wenn keine Datensätze zurückgegeben werden, überprüfen Sie die anderen Abschnitte auf mögliche Ursachen. Diese Abfrage sucht nach Einträgen während letzten zwei Tage, aber Sie können diesen Zeitbereich auch ändern. Es kann 5 bis 7 Minuten dauern, bis neue Daten in Ihrer Tabelle angezeigt werden. Der Azure Monitor-Agent sammelt nur Daten, die in die Text- oder JSON-Datei geschrieben wurden, nachdem Sie die Datensammlungsregel dem virtuellen Computer zugeordnet haben.

Überprüfen, ob Sie die benutzerdefinierte Tabelle erstellt haben

Sie müssen in Ihrem Log Analytics-Arbeitsbereich eine benutzerdefinierte Protokolltabelle erstellen, ehe Sie Daten an diesen senden können.

Überprüfen, ob der Agent Heartbeats erfolgreich sendet

Überprüfen Sie, ob der Azure Monitor-Agent ordnungsgemäß kommuniziert, indem Sie die folgende Abfrage in Log Analytics ausführen, um zu überprüfen, ob Datensätze in der Heartbeattabelle vorhanden sind.

Heartbeat
| where TimeGenerated > ago(24h)
| where Computer has "<computer name>"
| project TimeGenerated, Category, Version
| order by TimeGenerated desc

Überprüfen, ob Sie den richtigen Protokollspeicherort in der Datensammlungsregel angegeben haben

Die Datensammlungsregel verfügt über einen Abschnitt ähnlich dem folgenden. Das filePatterns-Element gibt den Pfad zur Protokolldatei an, die vom Agent-Computer erfasst werden soll. Überprüfen Sie den Agent-Computer, um zu überprüfen, ob dieser Pfad richtig ist.

"dataSources": [{
            "configuration": {
                "filePatterns": ["C:\\JavaLogs\\*.log"],
                "format": "text",
                "settings": {
                    "text": {
                        "recordStartTimestampFormat": "yyyy-MM-ddTHH:mm:ssK"
                    }
                }
            },
            "id": "myTabularLogDataSource",
            "kind": "logFile",
            "streams": [{
                    "stream": "Custom-TabularData-ABC"
                }
            ],
            "sendToChannels": ["gigl-dce-00000000000000000000000000000000"]
        }
    ]

Dieses Dateimuster sollte den Protokollen auf dem Agent-Computer entsprechen.

Screenshot: Textprotokolldateien auf Agent-Computer

Verwenden der Problembehandlung für den Azure Monitor-Agent

Verwenden Sie das Azure Monitor-Agent-Problembehandlungstool, um nach häufigen Problemen zu suchen und Ergebnisse an Microsoft weiterzugeben.

Überprüfen, ob Protokolle ausgefüllt werden

Der Agent sammelt nur neue Inhalte, die in die Protokolldatei geschrieben werden,die erfasst wird. Wenn Sie mit den Sammlungsprotokollen aus einer Text- oder JSON-Datei experimentieren, können Sie das folgende Skript verwenden, um Beispielprotokolle zu generieren.

# This script writes a new log entry at the specified interval indefinitely.
# Usage:
# .\GenerateCustomLogs.ps1 [interval to sleep]
#
# Press Ctrl+C to terminate script.
#
# Example:
# .\ GenerateCustomLogs.ps1 5

param (
    [Parameter(Mandatory=$true)][int]$sleepSeconds
)

$logFolder = "c:\\JavaLogs"
if (!(Test-Path -Path $logFolder))
{
    mkdir $logFolder
}

$logFileName = "TestLog-$(Get-Date -format yyyyMMddhhmm).log"
do
{
    $count++
    $randomContent = New-Guid
    $logRecord = "$(Get-Date -format s)Z Record number $count with random content $randomContent"
    $logRecord | Out-File "$logFolder\\$logFileName" -Encoding utf8 -Append
    Start-Sleep $sleepSeconds
}
while ($true)

Nächste Schritte

Weitere Informationen: