Compartir a través de


Tutorial: Edición de una regla de recopilación de datos (DCR)

En este tutorial se describe cómo editar la definición de reglas de recopilación de datos (DCR) que ya se han aprovisionado mediante herramientas de línea de comandos.

En este tutorial, aprenderá a:

  • Usar la funcionalidad del portal existente para crear DCR previamente
  • Obtener el contenido de una regla de recopilación de datos mediante una llamada API de ARM
  • Aplicar cambios a una regla de recopilación de datos mediante una llamada API de ARM
  • Automatizar el proceso de actualización de DCR mediante scripts de PowerShell

Nota:

En este tutorial se explica un método para editar una DCR existente. Consulte Creación y edición de reglas de recopilación de datos (DCR) en Azure Monitor para ver otros métodos.

Requisitos previos

Para completar este tutorial, necesita:

Información general del tutorial

Si bien seguir el asistente en el portal es la manera más sencilla de configurar la ingesta de los datos personalizados en Log Analytics, en algunos casos es posible que quiera actualizar la regla de recopilación de datos más adelante para:

  • Cambiar la configuración de recopilación de datos (por ejemplo, punto de conexión de recopilación de datos, asociado al DCR)
  • Actualizar la lógica de análisis o filtrado de datos para el flujo de datos
  • Cambiar el destino de datos (por ejemplo, enviar datos a una tabla de Azure, ya que esta opción no se ofrece directamente como parte del asistente de registro personalizado basado en DCR)

En este tutorial, primero configurará la ingesta de un registro personalizado. A continuación, modifique la transformación KQL del registro personalizado para incluir filtrado adicional y aplicar los cambios a su DCR. Por último, vamos a combinar todas las operaciones de edición en un único script de PowerShell, que se puede usar para editar cualquier DCR por cualquiera de los motivos mencionados anteriormente.

Configuración de un nuevo registro personalizado

Empiece por configurar un nuevo registro personalizado. Siga el Tutorial: Envío de registros personalizados a registros de Azure Monitor mediante Azure Portal (versión preliminar) Anote el identificador de recurso del DCR creado.

Recuperación del contenido de DCR

Para actualizar DCR, vamos a recuperar su contenido y guardarlo como un archivo, que se puede editar aún más.

  1. Haga clic en Cloud Shell en Azure Portal y asegúrese de que el entorno esté establecido en PowerShell.

    Captura de pantalla de la apertura de Cloud Shell

  2. Ejecute los siguientes comandos para recuperar el contenido de DCR y guardarlo en un archivo. Reemplace <ResourceId> por el identificador de recurso de DCR y <FilePath> por el nombre del archivo para almacenar 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
    

Edición de DCR

Ahora, cuando el contenido de DCR se almacena como un archivo JSON, puede usar un editor de su elección para realizar cambios en el DCR. Es posible que prefiera descargar el archivo del entorno de Cloud Shell, si usa uno.

Como alternativa, puede usar los editores de código proporcionados con el entorno. Por ejemplo, si guardó el DCR en un archivo denominado temp.dcr en la unidad en la nube, podría usar el siguiente comando para abrir DCR para editarlo directamente en la ventana de Cloud Shell:

code "temp.dcr"

Vamos a modificar la transformación KQL dentro de DCR para quitar filas donde RequestType sea cualquier cosa, pero GET.

  1. Abra el archivo creado en la parte anterior para editarlo con un editor de su elección.

  2. Busque la línea que contiene el atributo ”transformKql”, que, si ha seguido el tutorial para la creación de registros personalizados, debe tener un aspecto similar al siguiente:

    "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. Modificación de la transformación KQL para incluir un filtro adicional por 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. Guarde el archivo con contenido de DCR modificado.

Aplicación de cambios

Nuestro último paso es volver a actualizar DCR en el sistema. Esto se logra mediante PUT llamada HTTP a la API de ARM, con contenido DCR actualizado enviado en el cuerpo de la solicitud HTTP.

  1. Si usa Azure Cloud Shell, guarde el archivo y cierre el editor insertado o vuelva a cargar el archivo DCR modificado en el entorno de Cloud Shell.

  2. Ejecute los siguientes comandos para cargar contenido de DCR desde el archivo y realizar la llamada HTTP para actualizar el DCR en el sistema. Reemplace <ResourceId> por ResourceID de DCR y <FilePath> por el nombre del archivo modificado en la parte anterior del tutorial. Puede omitir las dos primeras líneas si lee y escribe en DCR dentro de la misma sesión de PowerShell.

    $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. Tras una llamada correcta, debe obtener la respuesta con el código de estado 200, lo que indica que el DCR ahora está actualizado.

  4. Ahora puede navegar a DCR y examinar su contenido en el portal a través de función de vista JSON, o bien puede repetir la primera parte del tutorial para recuperar contenido de DCR en un archivo.

Todo junto

Ahora, cuando sepamos cómo leer y actualizar el contenido de un DCR, vamos a reunir todo en el script de utilidad, que se puede usar para realizar ambas operaciones juntas.

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

Uso de esta utilidad

Suponiendo que guardó el script como un archivo denominado DCREditor.ps1 y que necesita modificar una regla de recopilación de datos con el identificador de recurso de /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/foo/providers/Microsoft.Insights/dataCollectionRules/bar, esto se podría lograr ejecutando el siguiente comando:

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

El contenido de DCR se abre en el editor de código insertado. Una vez completada la edición, al escribir "Y" en la solicitud del script, se volverán a aplicar los cambios a la DCR.

Pasos siguientes