Tutorial: Bearbeiten einer Datensammlungsregel (DATA Collection Rule, DCR)

In diesem Tutorial wird beschrieben, wie Sie die Definition der Datensammlungsregel (DCR, Data Collection Rule) bearbeiten, die bereits mit Befehlszeilentools bereitgestellt wurde.

In diesem Tutorial lernen Sie Folgendes:

  • Nutzen Sie vorhandene Portalfunktionen, um DCRs vorab zu erstellen
  • Rufen Sie den Inhalt einer Datenerfassungsregel mithilfe des ARM-API-Aufrufs ab
  • Rufen Sie den Inhalt einer Datenerfassungsregel mithilfe des ARM-API-Aufrufs ab
  • Automatisieren Sie den Prozess der DCR-Aktualisierung mithilfe von PowerShell-Skripts

Hinweis

Dieses Tutorial führt durch eine Methode zum Bearbeiten eines vorhandenen DCR. Weitere Methoden finden Sie unter Erstellen und Bearbeiten von Datensammlungsregeln (DCRs) in Azure Monitor.

Voraussetzungen

Für dieses Tutorial benötigen Sie Folgendes:

Übersicht über das Tutorial

Das Durchlaufen des Assistenten im Portal ist zwar die einfachste Möglichkeit, die Erfassung Ihrer benutzerdefinierten Daten in Log Analytics einzurichten, aber in manchen Fällen möchten Sie Ihre Datenerfassungsregel später möglicherweise so aktualisieren:

  • Datenerfassungseinstellungen ändern (z. B. Datenerfassungsendpunkt, der dem DCR zugeordnet ist)
  • Aktualisieren Sie die Daten-Parsing oder Filterlogik für Ihren Datenstrom
  • Datenziel ändern (z. B. Daten an eine Azure-Tabelle senden, da diese Option nicht direkt als Teil des DCR-basierten Assistenten für benutzerdefinierte Protokolle angeboten wird)

Sie richten in diesem Tutorial zuerst die Erfassung eines benutzerdefinierten Protokolls ein. Anschließend ändern Sie die KQL-Umwandlung für das benutzerdefinierte Protokoll, um zusätzliche Filter hinzuzufügen, und wenden die Änderungen auf Ihre DCR an. Schließlich kombinieren wir alle Bearbeitungsvorgänge in einem einzigen PowerShell-Skript, mit dem jede DCR aus einem der oben genannten Gründe bearbeitet werden kann.

Richten Sie ein neues benutzerdefiniertes Protokoll ein

Beginnen Sie mit der Einrichtung eines neuen benutzerdefinierten Protokolls. Befolgen Sie Tutorial: Senden benutzerdefinierter Protokolle an Azure Monitor-Protokolle mithilfe des Azure-Portals (Vorschau). Notieren Sie sich die Ressourcen-ID des erstellten DCR.

Abrufen von DCR-Inhalten

Um DCR zu aktualisieren, werden wir seinen Inhalt abrufen und als Datei speichern, die weiter bearbeitet werden kann.

  1. Klicken Sie im Azure-Portal auf die Schaltfläche Cloud Shell, und stellen Sie sicher, dass die Umgebung auf PowerShell festgelegt ist.

    Screenshot of opening cloud shell

  2. Führen Sie die folgenden Befehle aus, um DCR-Inhalte abzurufen und in einer Datei zu speichern. Ersetzen Sie <ResourceId> durch DCR ResourceID und <FilePath> durch den Namen der Datei, in der DCR gespeichert werden soll.

    $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
    

DCR bearbeiten

Wenn DCR-Inhalte jetzt als JSON-Datei gespeichert werden, können Sie einen Editor Ihrer Wahl verwenden, um Änderungen im DCR vorzunehmen. Sie können die Datei lieber aus der Cloud Shell-Umgebung herunterladen, wenn Sie eine verwenden.

Alternativ können Sie mit der Umgebung gelieferte Code-Editoren verwenden. Wenn Sie Ihre DCR beispielsweise in einer Datei namens temp.dcr auf Ihrem Cloud Drive gespeichert haben, können Sie den folgenden Befehl verwenden, um DCR zur Bearbeitung direkt im Cloud Shell-Fenster zu öffnen:

code "temp.dcr"

Ändern wir die KQL-Transformation in DCR, um Zeilen zu löschen, bei denen RequestType alles andere als „GET“ ist.

  1. Öffnen Sie die im vorherigen Teil erstellte Datei zur Bearbeitung mit einem Editor Ihrer Wahl.
  2. Suchen Sie die Zeile mit dem ”transformKql”-Attribut, die, wenn Sie dem Tutorial zur benutzerdefinierten Protokollerstellung gefolgt sind, ungefähr so ​​aussehen sollte:
    "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. Ändern Sie die KQL-Transformation, um einen zusätzlichen Filter nach RequestType einzuschließen
    "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. Speichern Sie die Datei mit geändertem DCR-Inhalt.

Änderungen übernehmen

Unser letzter Schritt besteht darin, DCR wieder im System zu aktualisieren. Dies wird durch einen „PUT“-HTTP-Aufruf an die ARM-API erreicht, wobei der aktualisierte DCR-Inhalt im HTTP-Anforderungstext gesendet wird.

  1. Wenn Sie Azure Cloud Shell verwenden, speichern Sie die Datei und schließen Sie den eingebetteten Editor oder laden Sie die geänderte DCR-Datei wieder in die Cloud Shell-Umgebung hoch.
  2. Führen Sie die folgenden Befehle aus, um den DCR-Inhalt aus der Datei zu laden, und platzieren Sie den HTTP-Aufruf, um den DCR im System zu aktualisieren. Ersetzen Sie <ResourceId> durch DCR ResourceID und <FilePath> durch den Namen der Datei, die im vorherigen Teil des Tutorials geändert wurde. Sie können die ersten beiden Zeilen weglassen, wenn Sie innerhalb derselben PowerShell-Sitzung in den DCR lesen und schreiben.
    $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. Nach erfolgreichem Anruf sollten Sie die Antwort mit dem Statuscode „200“ erhalten, was darauf hinweist, dass Ihr DCR jetzt aktualisiert wurde.
  4. Sie können jetzt zu Ihrem DCR navigieren und seinen Inhalt im Portal über die Funktion „JSON View“ untersuchen, oder Sie können den ersten Teil des Tutorials wiederholen, um DCR-Inhalte in eine Datei abzurufen.

Zusammenfügen der Bestandteile

Nun, da wir wissen, wie man den Inhalt eines DCR liest und aktualisiert, lassen Sie uns alles in einem Utility-Skript zusammenfassen, das verwendet werden kann, um beide Operationen zusammen auszuführen.

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

So verwenden Sie dieses Dienstprogramm

Angenommen, Sie haben das Skript als Datei mit dem Namen DCREditor.ps1 gespeichert und müssen eine Datenerfassungsregel mit der Ressourcen-ID /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/foo/providers/Microsoft.Insights/dataCollectionRules/bar ändern, können Sie dies durch Ausführen des folgenden Befehls erreichen:

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

Der DCR-Inhalt wird im eingebetteten Code-Editor geöffnet. Sobald die Bearbeitung abgeschlossen ist, werden die Änderungen durch Eingabe von „Y“ an der Skript-Eingabeaufforderung wieder auf die DCR angewendet.

Nächste Schritte