Freigeben über


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

Benutzerdefinierte JSON-Protokolle sind eine der Datenquellen, die in einer Datensammlungsregel (Data Collection Rule, DCR) verwendet werden. Details zur Erstellung der DCR finden Sie unter Sammeln von Daten mit dem Azure Monitor-Agent. Dieser Artikel enthält zusätzliche Details für den Text- und JSON-Protokolltyp.

Viele Anwendungen und Dienste protokollieren Informationen nicht in Standardprotokollierungsdiensten wie dem Windows-Ereignisprotokoll oder Syslog, sondern in JSON-Dateien. Diese Daten können mit dem Azure Monitor-Agent gesammelt und in einem Log Analytics-Arbeitsbereich mit Daten aus anderen Quellen gespeichert werden.

Voraussetzungen

Grundlegender Vorgang

Das folgende Diagramm zeigt den grundlegenden Vorgang zum Sammeln von Protokolldaten aus einer JSON-Datei.

  1. Der Agent überwacht alle Protokolldateien, die einem angegebenen Namensmuster auf dem lokalen Datenträger entsprechen.
  2. Jeder Eintrag im Protokoll wird gesammelt und an Azure Monitor gesendet. Der vom Benutzer definierte eingehende Datenstrom wird verwendet, um die Protokolldaten in Spalten zu parsen.
  3. Eine Standardtransformation wird verwendet, wenn das Schema des eingehenden Datenstroms mit dem Schema der Zieltabelle übereinstimmt.

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

Anforderungen an die JSON-Datei und Best Practices

Die Datei, die der Azure Monitor-Agent überwacht, muss die folgenden Anforderungen erfüllen:

  • Die Datei muss auf dem lokalen Laufwerk des Computers mit dem Azure Monitor-Agent im überwachten Verzeichnis gespeichert werden.
  • Jeder Datensatz muss mit einem Zeilenende abgegrenzt werden.
  • 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.
  • JSON-Text muss in einer einzelnen Zeile enthalten sein. Das JSON-Textformat wird nicht unterstützt. Siehe Beispiel unten.

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

  • Erstellen Sie täglich eine neue Protokolldatei, damit Sie ganz einfach alte Dateien bereinigen können.
  • Bereinigen Sie Protokolldateien im überwachten Verzeichnis kontinuierlich. 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.
  • Ä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.

Benutzerdefinierte Tabelle

Bevor Sie Protokolldaten aus einer JSON-Datei sammeln können, müssen Sie eine benutzerdefinierte Tabelle in Ihrem Log Analytics-Arbeitsbereich erstellen, um die Daten zu empfangen. Das Tabellenschema muss mit den Spalten im eingehenden Datenstrom übereinstimmen, oder Sie müssen eine Transformation hinzufügen, um sicherzustellen, dass das Ausgabeschema der Tabelle entspricht.

Warnung

Sie sollten keine vorhandene benutzerdefinierte Tabelle verwenden, die vom Log Analytics-Agent verwendet wird. Die Legacy-Agents können nicht mehr in die Tabelle schreiben, nachdem der erste Azure Monitor-Agent in die Tabelle geschrieben hat. Erstellen Sie eine neue Tabelle für den Azure Monitor-Agent, um Datenverlust des Log Analytics-Agents zu verhindern.

Sie können beispielsweise das folgende PowerShell-Skript verwenden, um eine benutzerdefinierte Tabelle mit mehreren Spalten zu erstellen.

$tableParams = @'
{
    "properties": {
        "schema": {
               "name": "{TableName}_CL",
               "columns": [
                    {
                        "name": "TimeGenerated",
                        "type": "DateTime"
                    }, 
                    {
                        "name": "MyStringColumn",
                        "type": "string"
                    },
                    {
                        "name": "MyIntegerColumn",
                        "type": "int"
                    },
                    {
                        "name": "MyRealColumn",
                        "type": "real"
                    },
                    {
                        "name": "MyBooleanColumn",
                        "type": "bool"
                    },
                    {
                        "name": "FilePath",
                        "type": "string"
                    },
                    {
                        "name": "Computer",
                        "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

Erstellen einer Datensammlungsregel für eine JSON-Datei

Hinweis

Die Agent-basierte Erfassung der benutzerdefinierten JSON-Datei befindet sich derzeit in der Vorschau und bietet noch keine vollständige Benutzeroberfläche im Portal. Sie können die DCR zwar über das Portal erstellen, aber Sie müssen sie ändern, um die Spalten im eingehenden Datenstrom zu definieren. Dieser Abschnitt enthält Details zum Erstellen der Datensammlungsregel mithilfe einer ARM-Vorlage.

Schema des eingehenden Datenstroms

Hinweis

Die Multilineunterstützung, die einen Zeitstempel zum Trennen von Ereignissen verwendet, ist jetzt verfügbar.

JSON-Dateien enthalten einen Eigenschaftsnamen mit jedem Wert, und der eingehende Datenstrom in der DCR muss eine Spalte enthalten, die dem Namen jeder Eigenschaft entspricht. Sie müssen den Abschnitt columns der ARM-Vorlage mit den Spalten aus Ihrem Protokoll ändern.

In der folgenden Tabelle werden optionale Spalten beschrieben, die Sie zusätzlich zu den Spalten einschließen können, die die Daten in Ihrer Protokolldatei definieren.

Spalte Type BESCHREIBUNG
TimeGenerated datetime Dies ist der Zeitpunkt, zu dem der Datensatz generiert wurde. Dieser Wert wird automatisch mit dem Zeitpunkt aufgefüllt, zu dem der Datensatz dem Log Analytics-Arbeitsbereich hinzugefügt wird, falls nicht im eingehenden Datenstrom enthalten.
FilePath Zeichenfolge Wenn Sie diese Spalte zum eingehenden Datenstrom in der DCR hinzufügen, wird sie mit dem Pfad zur Protokolldatei aufgefüllt. Diese Spalte wird nicht automatisch erstellt und kann nicht mithilfe des Portals hinzugefügt werden. Sie müssen die vom Portal erstellte DCR manuell ändern oder die DCR mithilfe einer anderen Methode erstellen, mit der Sie den eingehenden Datenstrom explizit definieren können.
Computer Zeichenfolge Wenn Sie diese Spalte dem eingehenden Datenstrom in der DCR hinzufügen, wird sie mit dem Namen des Computers mit der Protokolldatei aufgefüllt. Diese Spalte wird nicht automatisch erstellt und kann nicht mithilfe des Portals hinzugefügt werden. Sie müssen die vom Portal erstellte DCR manuell ändern oder die DCR mithilfe einer anderen Methode erstellen, mit der Sie den eingehenden Datenstrom explizit definieren können.

Transformation

Die Transformation kann den eingehenden Datenstrom möglicherweise ändern, um Datensätze zu filtern oder das Schema so zu ändern, dass es der Zieltabelle entspricht. Wenn das Schema des eingehenden Datenstroms mit der Zieltabelle identisch ist, können Sie die Standardtransformation von source verwenden. Falls nicht, ändern Sie den Abschnitt transformKql der ARM-Vorlage mit einer KQL-Abfrage, die das erforderliche Schema zurückgibt.

ARM-Vorlage

Verwenden Sie die folgende ARM-Vorlage, um eine DCR zum Sammeln von JSON-Protokolldateien zu erstellen. Nehmen Sie dabei die in den vorherigen Abschnitten beschriebenen Änderungen vor. In der folgenden Tabelle werden die Parameter beschrieben, die Werte erfordern, wenn Sie die Vorlage bereitstellen.

Einstellung Beschreibung
Name der Datensammlungsregel Eindeutiger Name der Datensammlungsregel.
Ressourcen-ID des Datensammlungsendpunkts Ressourcen-ID des Datensammlungsendpunkts (DCE)
Location Region der Datensammlungsregel. Muss muss dem Standort des Log Analytics-Arbeitsbereichs übereinstimmen.
Dateimuster Hiermit wird der Speicherort und der Namen von Protokolldateien auf dem lokalen Datenträger angegeben. Verwenden Sie variierende Platzhalter für Dateinamen (z. B. ein neuer Name, wenn täglich eine neue Datei erstellt wird). Sie können mehrere durch Kommas getrennte Dateimuster eingeben (unter Linux ist für mehrere Dateimuster die AMA-Version 1.26 oder höher erforderlich).

Beispiele:
– C:\Logs\MyLog.json
– C:\Logs\MyLog*.json
– C:\App01\AppLog.json, C:\App02\AppLog.json
– /var/mylog.json
– /var/mylog*.json
Tabellenname Dies ist der Name der Zieltabelle in Ihrem Log Analytics-Arbeitsbereich.
Ressourcen-ID für den Arbeitsbereich Ressourcen-ID des Log Analytics-Arbeitsbereichs mit der Zieltabelle.
TimeFormat Die folgenden Formate werden unterstützt. Verwenden Sie die Anführungszeichenfolgen in Ihrer ARM-Vorlage. Schließen Sie nicht die Beispielzeit aus den Klammern ein.
- „yyyy-MM-ddTHH:mm:ssk“ (2024-10-29T18:28:34)
- „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“ (Okt[ober] 29, 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“ (Okt 29 18:28:34)
- „dd/MMM/yyyy:HH:mm:ss zzz“ (14. Okt 2024:18:28:34 -00)

Wichtig

Wenn Sie die Datensammlungsregel mit einer ARM-Vorlage erstellen, müssen Sie sie trotzdem den Agents zuordnen, die sie verwenden. Sie können die DCR im Azure-Portal bearbeiten und die Agents auswählen (wie unter Hinzufügen von Ressourcen beschrieben).

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "dataCollectionRuleName": {
            "type": "string",
            "metadata": {
                "description": "Unique name for the DCR. "
            }
        },
        "dataCollectionEndpointResourceId": {
            "type": "string",
            "metadata": {
              "description": "Resource ID of the data collection endpoint (DCE)."
            }
        },
        "location": {
            "type": "string",
            "metadata": {
                "description": "Region for the DCR. Must be the same location as the Log Analytics workspace. "
            }
        },
        "filePatterns": {
            "type": "string",
            "metadata": {
                "description": "Path on the local disk for the log file to collect. May include wildcards.Enter multiple file patterns separated by commas (AMA version 1.26 or higher required for multiple file patterns on Linux)."
            }
        },
        "tableName": {
            "type": "string",
            "metadata": {
                "description": "Name of destination table in your Log Analytics workspace. "
            }
        },
        "workspaceResourceId": {
            "type": "string",
            "metadata": {
                "description": "Resource ID of the Log Analytics workspace with the target table."
            }
        },
        "timeFormat": {
            "type": "string"
            "metadata": {
                "discription": "The time format that you would like to use to split multi line imput"
            }
      }
    },
    "variables": {
        "tableOutputStream": "[concat('Custom-', parameters('tableName'))]"
    },
    "resources": [
        {
            "type": "Microsoft.Insights/dataCollectionRules",
            "apiVersion": "2022-06-01",
            "name": "[parameters('dataCollectionRuleName')]",
            "location": "[parameters('location')]",
            "properties": {
                "dataCollectionEndpointId": "[parameters('dataCollectionEndpointResourceId')]",
                "streamDeclarations": {
                    "Custom-Json-stream": {
                        "columns": [
                            {
                                "name": "TimeGenerated",
                                "type": "datetime"
                            },
                            {
                                "name": "FilePath",
                                "type": "string"
                            },
                            {
                                "name": "MyStringColumn",
                                "type": "string"
                            },
                            {
                                "name": "MyIntegerColumn",
                                "type": "int"
                            },
                            {
                                "name": "MyRealColumn",
                                "type": "real"
                            },
                            {
                                "name": "MyBooleanColumn",
                                "type": "boolean"
                            }
                        ]
                    }
                },
                "dataSources": {
                    "logFiles": [
                        {
                            "streams": [
                                "Custom-Json-stream"
                            ],
                            "filePatterns": [
                                "[parameters('filePatterns')]"
                            ],
                            "format": "json",
                            "name": "Custom-Json-stream",
                            "settings": {
                               "text": {
                                   "recordStartTimestampFormat": "[parameters('timeFormat')]"
                               }
                            }
                        }
                    ]
                },
                "destinations": {
                    "logAnalytics": [
                        {
                            "workspaceResourceId": "[parameters('workspaceResourceId')]",
                            "name": "workspace"
                        }
                    ]
                },
                "dataFlows": [
                    {
                        "streams": [
                            "Custom-Json-stream"
                        ],
                        "destinations": [
                            "workspace"
                        ],
                        "transformKql": "source",
                        "outputStream": "[variables('tableOutputStream')]"
                    }
                ]
            }
        }
    ]
}

Problembehandlung

Führen Sie die folgenden Schritte aus, wenn Sie nicht die erwarteten Daten aus dem JSON-Protokoll 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.
  • Vergewissern Sie sich, dass das Schema des eingehenden Datenstroms in der DCR mit dem Schema in der Protokolldatei übereinstimmt.
  • Ü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

Weitere Informationen: