Delen via


Logboeken verzamelen van een JSON-bestand met Azure Monitor Agent

Aangepaste JSON-logboeken zijn een van de gegevensbronnen die worden gebruikt in een regel voor gegevensverzameling (DCR). Details voor het maken van de DCR worden verstrekt in Gegevens verzamelen met De Azure Monitor-agent. Dit artikel bevat aanvullende informatie over het type tekst- en JSON-logboeken.

Veel toepassingen en services registreren gegevens naar een JSON-bestanden in plaats van standaardservices voor logboekregistratie, zoals Windows-gebeurtenislogboek of Syslog. Deze gegevens kunnen worden verzameld met de Azure Monitor-agent en worden opgeslagen in een Log Analytics-werkruimte met gegevens die zijn verzameld uit andere bronnen.

Vereisten

Basisbewerking

In het volgende diagram ziet u de basisbewerking voor het verzamelen van logboekgegevens uit een JSON-bestand.

  1. De agent kijkt naar logboekbestanden die overeenkomen met een opgegeven naampatroon op de lokale schijf.
  2. Elke vermelding in het logboek wordt verzameld en verzonden naar Azure Monitor. De binnenkomende stroom die door de gebruiker is gedefinieerd, wordt gebruikt om de logboekgegevens te parseren in kolommen.
  3. Er wordt een standaardtransformatie gebruikt als het schema van de binnenkomende stroom overeenkomt met het schema van de doeltabel.

Schermopname van logboekquery die resultaten retourneert van door komma's gescheiden bestandsverzameling.

Vereisten en best practices voor JSON-bestanden

Het bestand dat de Azure Monitor-agent bewaakt, moet voldoen aan de volgende vereisten:

  • Het bestand moet worden opgeslagen op het lokale station van de machine met de Azure Monitor-agent in de map die wordt bewaakt.
  • Elke record moet worden uitgelijnd met een einde van de regel.
  • Het bestand moet ASCII- of UTF-8-codering gebruiken. Andere indelingen, zoals UTF-16, worden niet ondersteund.
  • Nieuwe records moeten worden toegevoegd aan het einde van het bestand en niet oude records overschrijven. Het overschrijven veroorzaakt gegevensverlies.
  • JSON-tekst moet zich in één rij bevinden. De indeling van de JSON-hoofdtekst wordt niet ondersteund. Zie het voorbeeld hieronder.

Volg de volgende aanbevelingen om ervoor te zorgen dat u geen gegevensverlies of prestatieproblemen ondervindt:

  • Maak elke dag een nieuw logboekbestand zodat u eenvoudig oude bestanden kunt opschonen.
  • Continu logboekbestanden opschonen in de bewaakte map. Het bijhouden van veel logboekbestanden kan het CPU- en geheugengebruik van agents stimuleren. Wacht minstens 2 dagen totdat alle logboeken kunnen worden verwerkt.
  • Wijzig de naam van een bestand dat overeenkomt met het bestandsscanpatroon niet naar een andere naam die ook overeenkomt met het patroon voor bestandsscans. Hierdoor worden dubbele gegevens opgenomen.
  • Wijzig of kopieer geen grote logboekbestanden die overeenkomen met het scanpatroon van het bestand in de bewaakte map. Indien nodig mag u niet langer zijn dan 50 MB per minuut.

Aangepaste tabel

Voordat u logboekgegevens uit een JSON-bestand kunt verzamelen, moet u een aangepaste tabel maken in uw Log Analytics-werkruimte om de gegevens te ontvangen. Het tabelschema moet overeenkomen met de kolommen in de binnenkomende stroom of u moet een transformatie toevoegen om ervoor te zorgen dat het uitvoerschema overeenkomt met de tabel.

Waarschuwing

U mag geen bestaande aangepaste tabel gebruiken die wordt gebruikt door de Log Analytics-agent. De verouderde agents kunnen niet naar de tabel schrijven zodra de eerste Azure Monitor-agent ernaar schrijft. Maak een nieuwe tabel voor de Azure Monitor-agent die moet worden gebruikt om gegevensverlies van Log Analytics-agent te voorkomen.

U kunt bijvoorbeeld het volgende PowerShell-script gebruiken om een aangepaste tabel met meerdere kolommen te maken.

$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

Een regel voor gegevensverzameling maken voor een JSON-bestand

Notitie

De opname van aangepaste JSON-bestanden op basis van een agent is momenteel in preview en heeft nog geen volledige gebruikersinterface-ervaring in de portal. Hoewel u de DCR kunt maken met behulp van de portal, moet u deze wijzigen om de kolommen in de binnenkomende stroom te definiëren. Deze sectie bevat informatie over het maken van de DCR met behulp van een ARM-sjabloon.

Schema voor binnenkomende stroom

Notitie

Multiline-ondersteuning die gebruikmaakt van een ISO 8601-tijdstempel voor gescheiden gebeurtenissen wordt verwacht medio oktober 2024

JSON-bestanden bevatten een eigenschapsnaam met elke waarde en de binnenkomende stroom in de DCR moet een kolom bevatten die overeenkomt met de naam van elke eigenschap. U moet de columns sectie van de ARM-sjabloon wijzigen met de kolommen uit uw logboek.

In de volgende tabel worden optionele kolommen beschreven die u kunt opnemen naast de kolommen die de gegevens in uw logboekbestand definiëren.

Column Type Description
TimeGenerated datetime Het tijdstip waarop de record is gegenereerd. Deze waarde wordt automatisch ingevuld wanneer de record wordt toegevoegd aan de Log Analytics-werkruimte als deze niet is opgenomen in de binnenkomende stroom.
FilePath tekenreeks Als u deze kolom toevoegt aan de binnenkomende stroom in de DCR, wordt deze gevuld met het pad naar het logboekbestand. Deze kolom wordt niet automatisch gemaakt en kan niet worden toegevoegd met behulp van de portal. U moet de DCR die is gemaakt door de portal handmatig wijzigen of de DCR maken met een andere methode, waar u de binnenkomende stroom expliciet kunt definiëren.
Computer tekenreeks Als u deze kolom toevoegt aan de binnenkomende stroom in de DCR, wordt deze gevuld met de naam van de computer met het logboekbestand. Deze kolom wordt niet automatisch gemaakt en kan niet worden toegevoegd met behulp van de portal. U moet de DCR die is gemaakt door de portal handmatig wijzigen of de DCR maken met een andere methode, waar u de binnenkomende stroom expliciet kunt definiëren.

Transformatie

De transformatie wijzigt mogelijk de binnenkomende stroom om records te filteren of om het schema aan te passen aan de doeltabel. Als het schema van de binnenkomende stroom hetzelfde is als de doeltabel, kunt u de standaardtransformatie van source. Zo niet, wijzigt u de sectie van de transformKql TEE ARM-sjabloon met een KQL-query die het vereiste schema retourneert.

ARM-sjabloon

Gebruik de volgende ARM-sjabloon om een DCR te maken voor het verzamelen van tekstbestanden, waarbij u de wijzigingen aanbrengt die in de vorige secties worden beschreven. In de volgende tabel worden de parameters beschreven die waarden vereisen wanneer u de sjabloon implementeert.

Instelling Beschrijving
Naam van regel voor gegevensverzameling Unieke naam voor de DCR.
Resource-id van eindpunt voor gegevensverzameling Resource-id van het eindpunt voor gegevensverzameling (DCE).
Locatie Regio voor de DCR. Moet dezelfde locatie zijn als de Log Analytics-werkruimte.
Bestandspatronen Identificeert de locatie en naam van logboekbestanden op de lokale schijf. Gebruik een jokerteken voor bestandsnamen die variëren, bijvoorbeeld wanneer er elke dag een nieuw bestand wordt gemaakt met een nieuwe naam. U kunt meerdere bestandspatronen invoeren, gescheiden door komma's (AMA versie 1.26 of hoger vereist voor meerdere bestandspatronen in Linux).

Voorbeelden:
- C:\Logs\MyLog.json
- C:\Logs\MyLog*.json
- C:\App01\AppLog.json, C:\App02\AppLog.json
- /var/mylog.json
- /var/mylog*.json
Tabelnaam Naam van de doeltabel in uw Log Analytics-werkruimte.
Resource-id van werkruimte Resource-id van de Log Analytics-werkruimte met de doeltabel.

Belangrijk

Wanneer u de DCR maakt met behulp van een ARM-sjabloon, moet u de DCR nog steeds koppelen aan de agents die deze gebruiken. U kunt de DCR bewerken in Azure Portal en de agents selecteren zoals beschreven in Resources toevoegen

{
    "$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."
            }
        }
    },
    "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"
                        }
                    ]
                },
                "destinations": {
                    "logAnalytics": [
                        {
                            "workspaceResourceId": "[parameters('workspaceResourceId')]",
                            "name": "workspace"
                        }
                    ]
                },
                "dataFlows": [
                    {
                        "streams": [
                            "Custom-Json-stream"
                        ],
                        "destinations": [
                            "workspace"
                        ],
                        "transformKql": "source",
                        "outputStream": "[variables('tableOutputStream')]"
                    }
                ]
            }
        }
    ]
}

Probleemoplossing

Voer de volgende stappen uit als u geen gegevens verzamelt uit het JSON-logboek dat u verwacht.

  • Controleer of gegevens naar het logboekbestand worden geschreven dat wordt verzameld.
  • Controleer of de naam en locatie van het logboekbestand overeenkomen met het bestandspatroon dat u hebt opgegeven.
  • Controleer of het schema van de binnenkomende stroom in de DCR overeenkomt met het schema in het logboekbestand.
  • Controleer of het schema van de doeltabel overeenkomt met de binnenkomende stroom of dat u een transformatie hebt waarmee de binnenkomende stroom wordt geconverteerd naar het juiste schema.
  • Zie De bewerking Controleren om te controleren of de agent operationeel is en of er gegevens worden ontvangen.

Volgende stappen

Meer informatie over: