Självstudie: Redigera en datainsamlingsregel (DCR)

I den här självstudien beskrivs hur du redigerar definitionen av datainsamlingsregeln (DCR) som redan har etablerats med kommandoradsverktyg.

I den här självstudien lär du dig att:

  • Utnyttja befintliga portalfunktioner för att skapa domänkontrollanter i förväg
  • Hämta innehållet i en datainsamlingsregel med hjälp av ARM API-anrop
  • Tillämpa ändringar i en datainsamlingsregel med HJÄLP av ARM API-anrop
  • Automatisera processen för DCR-uppdatering med hjälp av PowerShell-skript

Kommentar

I den här självstudien går vi igenom en metod för att redigera en befintlig DCR. Se Skapa och redigera regler för datainsamling (DCR) i Azure Monitor för andra metoder.

Förutsättningar

För att slutföra den här självstudien behöver du följande:

Översikt över självstudier

När du går igenom guiden på portalen är det enklaste sättet att konfigurera inmatningen av anpassade data till Log Analytics. I vissa fall kanske du vill uppdatera datainsamlingsregeln senare till:

  • Ändra inställningar för datainsamling (t.ex. slutpunkt för datainsamling som är associerad med DCR)
  • Uppdatera dataparsnings- eller filtreringslogik för dataströmmen
  • Ändra datamål (t.ex. skicka data till en Azure-tabell, eftersom det här alternativet inte erbjuds direkt som en del av guiden dcr-baserad anpassad logg)

I den här självstudien konfigurerar du först inmatning av en anpassad logg. Sedan ändrar du KQL-omvandlingen för din anpassade logg så att den innehåller ytterligare filtrering och tillämpar ändringarna på din DCR. Slutligen ska vi kombinera alla redigeringsåtgärder till ett enda PowerShell-skript, som kan användas för att redigera valfri DCR av någon av ovanstående orsaker.

Konfigurera ny anpassad logg

Börja med att konfigurera en ny anpassad logg. Följ självstudie: Skicka anpassade loggar till Azure Monitor-loggar med hjälp av Azure-portalen (förhandsversion). Observera resurs-ID:t för dcr som skapats.

Hämta DCR-innehåll

För att kunna uppdatera DCR hämtar vi dess innehåll och sparar det som en fil som kan redigeras ytterligare.

  1. Klicka på Cloud Shell-knappen i Azure-portalen och se till att miljön är inställd på PowerShell.

    Screenshot of opening cloud shell

  2. Kör följande kommandon för att hämta DCR-innehåll och spara det i en fil. Ersätt <ResourceId> med DCR ResourceID och <FilePath> med namnet på filen som ska lagra DCR.

    $ResourceId = "<ResourceId>" # Resource ID of the DCR to edit
    $FilePath = "<FilePath>" # Store DCR content in this file
    $DCR = Invoke-AzRestMethod -Path ("$ResourceId"+"?api-version=2022-06-01") -Method GET
    $DCR.Content | ConvertFrom-Json | ConvertTo-Json -Depth 20 | Out-File -FilePath $FilePath
    

Redigera DCR

Nu när DCR-innehåll lagras som en JSON-fil kan du använda valfri redigerare för att göra ändringar i DCR. Du kanske föredrar att ladda ned filen från Cloud Shell-miljön om du använder en.

Du kan också använda kodredigerare som medföljer miljön. Om du till exempel sparade din DCR i en fil med namnet temp.dcr på din Cloud Drive kan du använda följande kommando för att öppna DCR för redigering direkt i Cloud Shell-fönstret:

code "temp.dcr"

Nu ska vi ändra KQL-omvandlingen i DCR för att släppa rader där RequestType är något annat än "GET".

  1. Öppna filen som skapades i föregående del för redigering med valfri redigerare.
  2. Leta upp den rad som innehåller ”transformKql” attributet, som, om du följde självstudien för att skapa anpassade loggar, bör se ut ungefär så här:
    "transformKql": "  source\n    | extend TimeGenerated = todatetime(Time)\n    | parse RawData with \n    ClientIP:string\n    ' ' *\n    ' ' *\n    ' [' * '] \"' RequestType:string\n    \" \" Resource:string\n    \" \" *\n    '\" ' ResponseCode:int\n    \" \" *\n    | where ResponseCode != 200\n    | project-away Time, RawData\n"
    
  3. Ändra KQL-transformering så att ytterligare filter inkluderas av RequestType
    "transformKql": "  source\n    | where RawData contains \"GET\"\n     | extend TimeGenerated = todatetime(Time)\n    | parse RawData with \n    ClientIP:string\n    ' ' *\n    ' ' *\n    ' [' * '] \"' RequestType:string\n    \" \" Resource:string\n    \" \" *\n    '\" ' ResponseCode:int\n    \" \" *\n    | where ResponseCode != 200\n    | project-away Time, RawData\n"
    
  4. Spara filen med ändrat DCR-innehåll.

Tillämpa ändringar

Vårt sista steg är att uppdatera DCR tillbaka i systemet. Detta görs genom HTTP-anropet PUT till ARM API, med uppdaterat DCR-innehåll som skickas i HTTP-begärandetexten.

  1. Om du använder Azure Cloud Shell sparar du filen och stänger den inbäddade redigeraren eller laddar upp den ändrade DCR-filen tillbaka till Cloud Shell-miljön.
  2. Kör följande kommandon för att läsa in DCR-innehåll från filen och placera HTTP-anrop för att uppdatera DCR i systemet. Ersätt <ResourceId> med DCR ResourceID och <FilePath> med namnet på filen som ändrades i föregående del av självstudien. Du kan utelämna de två första raderna om du läser och skriver till DCR i samma PowerShell-session.
    $ResourceId = "<ResourceId>" # Resource ID of the DCR to edit
    $FilePath = "<FilePath>" # Store DCR content in this file
    $DCRContent = Get-Content $FilePath -Raw 
    Invoke-AzRestMethod -Path ("$ResourceId"+"?api-version=2022-06-01") -Method PUT -Payload $DCRContent 
    
  3. Vid lyckat anrop bör du få svaret med statuskoden "200", vilket anger att din DCR nu har uppdaterats.
  4. Du kan nu navigera till din DCR och granska dess innehåll på portalen via funktionen "JSON View" eller upprepa den första delen av självstudien för att hämta DCR-innehåll till en fil.

Sätta ihop allt

Nu, när vi vet hur man läser och uppdaterar innehållet i en DCR, ska vi sätta ihop allt i verktygsskriptet, som kan användas för att utföra båda åtgärderna tillsammans.

param ([Parameter(Mandatory=$true)] $ResourceId)

# get DCR content and put into a file
$FilePath = "temp.dcr"
$DCR = Invoke-AzRestMethod -Path ("$ResourceId"+"?api-version=2022-06-01") -Method GET
$DCR.Content | ConvertFrom-Json | ConvertTo-Json -Depth 20 | Out-File $FilePath

# Open DCR in code editor
code $FilePath | Wait-Process

#Wait for confirmation to apply changes
$Output = Read-Host "Apply changes to DCR (Y/N)? "
if ("Y" -eq $Output.toupper())
{ 
	#write DCR content back from the file
	$DCRContent = Get-Content $FilePath -Raw
	Invoke-AzRestMethod -Path ("$ResourceId"+"?api-version=2022-06-01") -Method PUT -Payload $DCRContent		
}

#Delete temporary file
Remove-Item $FilePath

Så här använder du det här verktyget

Förutsatt att du har sparat skriptet som en fil med namnet DCREditor.ps1 och behöver ändra en datainsamlingsregel med resurs-ID /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/foo/providers/Microsoft.Insights/dataCollectionRules/barför kan detta utföras genom att köra följande kommando:

.\DCREditor.ps1 "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/foo/providers/Microsoft.Insights/dataCollectionRules/bar"

DCR-innehåll öppnas i inbäddad kodredigerare. När redigeringen är klar tillämpar "Y" i skriptprompten ändringar tillbaka till DCR.

Nästa steg