Logboeken verzamelen van een tekst- of JSON-bestand met Azure Monitor Agent

Veel toepassingen registreren gegevens naar tekst- of JSON-bestanden in plaats van standaardservices voor logboekregistratie, zoals Windows-gebeurtenislogboek of Syslog. In dit artikel wordt uitgelegd hoe u logboekgegevens verzamelt van tekst- en JSON-bestanden op bewaakte machines met behulp van Azure Monitor Agent door een regel voor gegevensverzameling (DCR) te maken.

Notitie

De JSON-opname bevindt zich op dit moment in preview.

Vereisten

U hebt het volgende nodig om deze procedure te voltooien:

  • Log Analytics-werkruimte met ten minste inzenderrechten.

  • Een of twee eindpunten voor gegevensverzameling, afhankelijk van of uw virtuele machine en Log Analytics-werkruimte zich in dezelfde regio bevinden.

    Zie Eindpunten voor gegevensverzameling instellen op basis van uw implementatie voor meer informatie.

  • Machtigingen voor het maken van regelobjecten voor gegevensverzameling in de werkruimte.

  • JSON-tekst moet zich in één rij bevinden voor de juiste opname. De JSON-hoofdtekstindeling (bestandsindeling) wordt niet ondersteund.

  • Een virtuele machine, virtuele-machineschaalset, on-premises server met Arc of Azure Monitoring Agent op een on-premises Windows-client die logboeken naar een tekst- of JSON-bestand schrijft.

    Vereisten voor tekst- en JSON-bestanden en aanbevolen procedures:

    • Sla bestanden op op het lokale station van de computer waarop azure Monitor Agent wordt uitgevoerd en in de map die wordt bewaakt.
    • Delineeer het einde van een record met een eindregel.
    • Gebruik ASCII- of UTF-8-codering. Andere indelingen, zoals UTF-16, worden niet ondersteund.
    • Maak elke dag een nieuw logboekbestand, zodat u eenvoudig oude bestanden kunt verwijderen.
    • Schoon alle logboekbestanden in de bewaakte map op. Het bijhouden van veel logboekbestanden kan het CPU- en geheugengebruik van agents stimuleren. Wacht minstens 2 dagen totdat alle logboeken kunnen worden verwerkt.
    • Overschrijf geen bestaand bestand met nieuwe records. Voeg alleen nieuwe records toe aan het einde van het bestand. Het overschrijven veroorzaakt gegevensverlies.
    • Wijzig de naam van een bestand niet in een nieuwe naam en open vervolgens een nieuw bestand met dezelfde naam. Dit kan gegevensverlies veroorzaken.
    • 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.
    • Wijzig de naam van een bestand dat overeenkomt met het patroon voor bestandsscans niet in een nieuwe naam die ook overeenkomt met het bestandsscanpatroon. Hierdoor worden dubbele gegevens opgenomen.

Een aangepast tabel maken

De tabel die in het script is gemaakt, heeft twee kolommen:

  • TimeGenerated (datum/tijd) [Vereist]
  • RawData (tekenreeks) [Optioneel als tabelschema is opgegeven]
  • 'FilePath' (tekenreeks) [optioneel]
  • YourOptionalColumn (tekenreeks) [Optioneel]

Het standaardtabelschema voor logboekgegevens die zijn verzameld uit tekstbestanden is TimeGenerated en RawData. Het toevoegen van 'FilePath' aan een van beide teams is optioneel. Als u weet dat uw uiteindelijke schema of de bron een JSON-logboek is, kunt u de laatste kolommen in het script toevoegen voordat u de tabel maakt. U kunt later altijd kolommen toevoegen met behulp van de gebruikersinterface van de Log Analytics-tabel.

Uw kolomnamen en JSON-kenmerken moeten exact overeenkomen om automatisch in de tabel te parseren. Zowel kolommen als JSON-kenmerken zijn hoofdlettergevoelig. De gebeurtenisgegevens worden bijvoorbeeld Rawdata niet verzameld. Het moet zijn RawData. Bij opname worden JSON-kenmerken verwijderd die geen bijbehorende kolom hebben.

De eenvoudigste manier om de REST-aanroep te maken, is via een Azure Cloud PowerShell-opdrachtregel (CLI). Als u de shell wilt openen, gaat u naar Azure Portal, drukt u op de knop Cloud Shell en selecteert u PowerShell. Als dit de eerste keer is dat u Azure Cloud PowerShell gebruikt, moet u de eenmalige configuratiewizard doorlopen.

Kopieer en plak dit script in PowerShell om de tabel in uw werkruimte te maken:

$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

U ontvangt een 200-antwoord en details over de tabel die u zojuist hebt gemaakt.

Een regel voor gegevensverzameling maken voor een tekst- of JSON-bestand

De regel voor gegevensverzameling definieert:

  • Welke bronlogboekbestanden azure Monitor Agent scant op nieuwe gebeurtenissen.
  • Hoe Azure Monitor gebeurtenissen transformeert tijdens opname.
  • De log analytics-doelwerkruimte en -tabel waarnaar Azure Monitor de gegevens verzendt.

U kunt een regel voor gegevensverzameling definiëren om gegevens van meerdere computers naar meerdere Log Analytics-werkruimten te verzenden, inclusief werkruimten in een andere regio of tenant. Maak de regel voor gegevensverzameling in dezelfde regio als uw Log Analytics-werkruimte.

Notitie

Als u gegevens wilt verzenden tussen tenants, moet u eerst Azure Lighthouse inschakelen.

Als u uw JSON-logboekbestand automatisch wilt parseren in een aangepaste tabel, volgt u de stappen van de Resource Manager-sjabloon. Tekstgegevens kunnen worden omgezet in kolommen met behulp van opnametijdtransformatie.

De regel voor gegevensverzameling maken in Azure Portal:

  1. Selecteer gegevensverzamelingsregels in het menu Bewaken.

  2. Selecteer Maken om een nieuwe regel en koppelingen voor gegevensverzameling te maken.

    Schermopname van de knop Maken op het scherm Regels voor gegevensverzameling.

  3. Voer een regelnaam in en geef een abonnement, resourcegroep, regio, platformtype en eindpunt voor gegevensverzameling op:

    • Regio geeft aan waar de DCR wordt gemaakt. De virtuele machines en de bijbehorende koppelingen kunnen zich in elk abonnement of elke resourcegroep in de tenant bevinden.
    • Platformtype geeft het type resources op waarop deze regel kan worden toegepast. Met de optie Aangepast kunt u zowel Windows- als Linux-typen gebruiken.
    • Eindpunt voor gegevensverzameling geeft het eindpunt voor het verzamelen van gegevens op waarnaar de Azure Monitor-agent verzamelde gegevens verzendt. Dit eindpunt voor gegevensverzameling moet zich in dezelfde regio bevinden als de Log Analytics-werkruimte. Zie Eindpunten voor gegevensverzameling instellen op basis van uw implementatie voor meer informatie.

    Schermopname van het tabblad Basisbeginselen van het scherm Regel voor gegevensverzameling.

  4. Op het tabblad Resources :

    1. Selecteer + Resources toevoegen en resources koppelen aan de regel voor gegevensverzameling. Resources kunnen virtuele machines, virtuele-machineschaalsets en Azure Arc voor servers zijn. Azure Portal installeert Azure Monitor Agent op resources waarop deze nog niet is geïnstalleerd.

      Belangrijk

      De portal maakt door het systeem toegewezen beheerde identiteit mogelijk voor de doelbronnen, samen met bestaande door de gebruiker toegewezen identiteiten, indien aanwezig. Voor bestaande toepassingen, tenzij u de door de gebruiker toegewezen identiteit in de aanvraag opgeeft, wordt de computer standaard ingesteld op het gebruik van door het systeem toegewezen identiteit.

    2. Selecteer Eindpunten voor gegevensverzameling inschakelen.

    3. U kunt desgewenst een eindpunt voor gegevensverzameling selecteren voor elk van de virtuele machines die zijn gekoppeld aan de regel voor gegevensverzameling. Meestal moet u alleen de standaardinstellingen gebruiken.

      Dit eindpunt voor gegevensverzameling verzendt configuratiebestanden naar de virtuele machine en moet zich in dezelfde regio bevinden als de virtuele machine. Zie Eindpunten voor gegevensverzameling instellen op basis van uw implementatie voor meer informatie.

    Schermopname van het tabblad Resources van het scherm Regel voor gegevensverzameling.

  5. Selecteer op het tabblad Verzamelen en leveren de optie Gegevensbron toevoegen om een gegevensbron toe te voegen en een bestemming in te stellen.

  6. Selecteer in de vervolgkeuzelijst Gegevensbrontype aangepaste tekstlogboeken of JSON-logboeken.

  7. Geef de volgende informatie op:

    • Bestandspatroon : geeft aan waar de logboekbestanden zich op de lokale schijf bevinden. U kunt meerdere bestandspatronen invoeren, gescheiden door komma's (op Linux, AMA versie 1.26 of hoger is vereist voor het verzamelen van een door komma's gescheiden lijst met bestandspatronen).

      Voorbeelden van geldige invoer:

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

      Notitie

      Er bestaan vaak meerdere logboekbestanden van hetzelfde type in dezelfde map. Een computer kan bijvoorbeeld elke dag een nieuw bestand maken om te voorkomen dat het logboekbestand te groot wordt. Als u logboekgegevens in dit scenario wilt verzamelen, kunt u een jokerteken voor bestanden gebruiken. Gebruik de indeling C:\directoryA\directoryB\*MyLog.txt voor Windows en /var/*.log voor Linux. Er is geen ondersteuning voor adreslijst-jokertekens.

    • Tabelnaam : de naam van de doeltabel die u hebt gemaakt in uw Log Analytics-werkruimte. Zie Een aangepaste tabel maken voor meer informatie.

    • Recordscheidingsteken : wordt in de toekomst gebruikt om andere scheidingstekens dan het momenteel ondersteunde einde van regel (/r/n) toe te staan.

    • Transformatie : voeg een opnametijdtransformatie toe of laat deze als bron staan als u de verzamelde gegevens niet hoeft te transformeren.

  8. Voeg op het tabblad Doel een of meer bestemmingen toe voor de gegevensbron. U kunt meerdere bestemmingen van dezelfde of verschillende typen selecteren. U kunt bijvoorbeeld meerdere Log Analytics-werkruimten selecteren, ook wel multihoming genoemd.

    Schermopname van het doeltabblad van het scherm Gegevensbron toevoegen voor een regel voor gegevensverzameling in Azure Portal.

  9. Selecteer Beoordelen en maken om de details van de regel voor gegevensverzameling en de koppeling met de set virtuele machines te bekijken.

  10. Selecteer Maken om de regel voor gegevensverzameling te maken.

Notitie

Het kan tot tien minuten duren voordat gegevens naar de bestemmingen worden verzonden nadat u de regel voor het verzamelen van gegevens hebt gemaakt.

Voorbeeld van logboekquery's

De hier gebruikte kolomnamen zijn bijvoorbeeld alleen. De kolomnamen voor uw logboek zijn waarschijnlijk anders.

  • Het aantal gebeurtenissen per code tellen.

    MyApp_CL
    | summarize count() by code
    

Voorbeeldwaarschuwingsregel

  • Maak een waarschuwingsregel voor een fout gebeurtenis.

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

Problemen oplossen

Gebruik de volgende stappen om problemen met het verzamelen van logboeken uit tekst- en JSON-bestanden op te lossen.

Controleer of u gegevens hebt opgenomen in uw aangepaste tabel

Controleer eerst of er records zijn opgenomen in uw aangepaste logboektabel door de volgende query uit te voeren in Log Analytics:

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

Als records niet worden geretourneerd, controleert u de andere secties op mogelijke oorzaken. Deze query zoekt naar vermeldingen in de afgelopen twee dagen, maar u kunt dit wijzigen voor een ander tijdsbereik. Het kan 5-7 minuten duren voordat nieuwe gegevens in de tabel worden weergegeven. De Azure Monitor-agent verzamelt alleen gegevens die naar het tekst- of JSON-bestand worden geschreven nadat u de regel voor gegevensverzameling hebt gekoppeld aan de virtuele machine.

Controleer of u een aangepaste tabel hebt gemaakt

U moet een aangepaste logboektabel maken in uw Log Analytics-werkruimte voordat u er gegevens naar kunt verzenden.

Controleer of de agent heartbeats verzendt

Controleer of de Azure Monitor-agent correct communiceert door de volgende query uit te voeren in Log Analytics om te controleren of er records in de Heartbeat-tabel staan.

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

Controleer of u de juiste logboeklocatie hebt opgegeven in de regel voor gegevensverzameling

De regel voor gegevensverzameling heeft een sectie die vergelijkbaar is met het volgende. Het filePatterns element geeft het pad naar het logboekbestand op dat moet worden verzameld van de agentcomputer. Controleer de agentcomputer om te controleren of dit juist is.

"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"]
        }
    ]

Dit bestandspatroon moet overeenkomen met de logboeken op de agentcomputer.

Schermopname van tekstbestanden op agentcomputer.

De probleemoplosser voor De Azure Monitor-agent gebruiken

Gebruik de probleemoplosser voor De Azure Monitor-agent om veelvoorkomende problemen te zoeken en resultaten te delen met Microsoft.

Controleren of logboeken worden ingevuld

De agent verzamelt alleen nieuwe inhoud die naar het logboekbestand wordt geschreven. Als u experimenteert met de verzamelingslogboeken van een tekst- of JSON-bestand, kunt u het volgende script gebruiken om voorbeeldlogboeken te genereren.

# 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)

Volgende stappen

Meer informatie over: