El plan de tabla auxiliar le permite ingerir y conservar datos en el área de trabajo de Log Analytics a un bajo coste.
Este es un vídeo que explica algunos de los usos y ventajas del plan de tabla auxiliar:
Azure Monitor Logs admite el plan de tabla auxiliar para las tablas personalizadas basadas en reglas de recopilación de datos (DCR) a las que se envían los datos que se recopilan mediante Azure Monitor Agent o la API de ingesta de Logs.
En este artículo se explica cómo crear una nueva tabla personalizada con el plan auxiliar en el área de trabajo de Log Analytics y configurar una regla de recopilación de datos que envía datos a esta tabla. Para más información sobre los conceptos del Plan Auxiliar, consulte los Planes de tablas de registros de Azure Monitor.
Requisitos previos
Para crear una tabla personalizada y recopilar datos de registro, necesita:
Nota:
Los registros auxiliares están disponibles con carácter general (GA) para todas las regiones de nube pública, excepto el Centro de Qatar, y no están disponibles para las nubes de Azure Government o China.
Crear una tabla personalizada con el plan auxiliar
Para crear una tabla personalizada con el plan auxiliar en Azure Portal:
En el menú Áreas de trabajo de Log Analytics, seleccione Tablas.
Selecciona Crear.
En la pestaña Aspectos básicos , especifique un nombre y, opcionalmente, una descripción para la tabla. El portal agrega automáticamente el sufijo _CL al nombre de la tabla.
En Plan de tabla, seleccione Auxiliar/Lago.
Seleccione Siguiente y complete los pasos restantes para configurar el esquema y la recopilación de datos. Para obtener instrucciones detalladas sobre los pasos restantes, consulte Incorporación o eliminación de tablas y columnas en registros de Azure Monitor.
Nota:
Un comando CLI de Azure dedicado no está disponible actualmente para esta operación. En el ejemplo siguiente se llama directamente a la API REST de Azure Resource Manager subyacente mediante az rest.
subscriptionId="aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"
resourceGroupName="myResourceGroup"
workspaceName="myWorkspace"
tableName_CL="myTable_CL"
apiVersion="2025-07-01"
providers="Microsoft.OperationalInsights/workspaces/$workspaceName/tables/$tableName_CL"
resourceId="/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/$providers"
payloadFile="./my-table.json"
az account set --subscription $subscriptionId
az rest \
--method put \
--uri "$resourceId?api-version=$apiVersion" \
--body @"$payloadFile"
Expanda para ver el archivo my-table.json.
{
"properties": {
"schema": {
"name": "myTable_CL",
"columns": [
{
"name": "TimeGenerated",
"type": "dateTime"
},
{
"name": "StringProperty",
"type": "string"
},
{
"name": "IntProperty",
"type": "int"
},
{
"name": "LongProperty",
"type": "long"
},
{
"name": "RealProperty",
"type": "real"
},
{
"name": "BooleanProperty",
"type": "boolean"
},
{
"name": "DateTimeProperty",
"type": "dateTime"
}
]
},
"totalRetentionInDays": 365,
"plan": "Auxiliary"
}
}
Nota:
Un cmdlet Azure PowerShell dedicado no está disponible actualmente para esta operación. En el ejemplo siguiente se llama directamente a la API REST de Azure Resource Manager subyacente mediante Invoke-AzRestMethod.
$subscriptionId = "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"
$resourceGroupName = "myResourceGroup"
$workspaceName = "myWorkspace"
$tableName_CL = "myTable_CL"
$apiVersion = "2025-07-01"
$providers = "Microsoft.OperationalInsights/workspaces/$workspaceName/tables/$tableName_CL"
$resourceId = "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/$providers"
$payloadFile = "./my-table.json"
Set-AzContext -Subscription $subscriptionId
$restParams = @{
Method = "PUT"
Path = "$resourceId?api-version=$apiVersion"
Payload = Get-Content -Raw -Path $payloadFile
}
Invoke-AzRestMethod @restParams
Expanda para ver el archivo my-table.json.
{
"properties": {
"schema": {
"name": "myTable_CL",
"columns": [
{
"name": "TimeGenerated",
"type": "dateTime"
},
{
"name": "StringProperty",
"type": "string"
},
{
"name": "IntProperty",
"type": "int"
},
{
"name": "LongProperty",
"type": "long"
},
{
"name": "RealProperty",
"type": "real"
},
{
"name": "BooleanProperty",
"type": "boolean"
},
{
"name": "DateTimeProperty",
"type": "dateTime"
}
]
},
"totalRetentionInDays": 365,
"plan": "Auxiliary"
}
}
PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.OperationalInsights/workspaces/{workspaceName}/tables/{tableName_CL}?api-version={apiVersion}
Authorization: Bearer {accessToken}
Content-Type: application/json
{
"properties": {
"schema": {
"name": "{tableName_CL}",
"columns": [
{"name": "TimeGenerated",
"type": "dateTime"},
{"name": "StringProperty",
"type": "string"},
{"name": "IntProperty",
"type": "int"},
{"name": "LongProperty",
"type": "long"},
{"name": "RealProperty",
"type": "real"},
{"name": "BooleanProperty",
"type": "boolean"},
{"name": "DateTimeProperty",
"type": "dateTime"}
]
},
"totalRetentionInDays": 365,
"plan": "Auxiliary"
}
}
Nota:
- La
TimeGenerated columna solo admite el formato ISO 8601 con 6 posiciones decimales para precisión (microsegundos). Para obtener más información, consulte formato de fecha y hora ISO 8601 admitido.
- Las tablas con el plan auxiliar no admiten columnas con datos dinámicos.
En el siguiente ejemplo de Bicep se usa el tipo de recurso Microsoft.OperationalInsights workspaces/tables.
param workspaceName string = 'myWorkspace'
param tableName_CL string = 'myTable_CL'
resource workspace 'Microsoft.OperationalInsights/workspaces@2025-07-01' existing = {
name: workspaceName
}
resource table 'Microsoft.OperationalInsights/workspaces/tables@2025-07-01' = {
parent: workspace
name: tableName_CL
properties: {
schema: {
name: tableName_CL
columns: [
{
name: 'TimeGenerated'
type: 'dateTime'
}
{
name: 'StringProperty'
type: 'string'
}
{
name: 'IntProperty'
type: 'int'
}
{
name: 'LongProperty'
type: 'long'
}
{
name: 'RealProperty'
type: 'real'
}
{
name: 'BooleanProperty'
type: 'boolean'
}
{
name: 'DateTimeProperty'
type: 'dateTime'
}
]
}
totalRetentionInDays: 365
plan: 'Auxiliary'
}
}
En el siguiente ejemplo de ARM (JSON) se usa el Microsoft. OperationalInsights workspaces/tables tipo de recurso.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"workspaceName": {
"type": "string",
"defaultValue": "myWorkspace"
},
"tableName_CL": {
"type": "string",
"defaultValue": "myTable_CL"
}
},
"resources": [
{
"type": "Microsoft.OperationalInsights/workspaces/tables",
"apiVersion": "2025-07-01",
"name": "[format('{0}/{1}', parameters('workspaceName'), parameters('tableName_CL'))]",
"properties": {
"schema": {
"name": "[parameters('tableName_CL')]",
"columns": [
{
"name": "TimeGenerated",
"type": "dateTime"
},
{
"name": "StringProperty",
"type": "string"
},
{
"name": "IntProperty",
"type": "int"
},
{
"name": "LongProperty",
"type": "long"
},
{
"name": "RealProperty",
"type": "real"
},
{
"name": "BooleanProperty",
"type": "boolean"
},
{
"name": "DateTimeProperty",
"type": "dateTime"
}
]
},
"totalRetentionInDays": 365,
"plan": "Auxiliary"
}
}
]
}
| Variable |
Valor de ejemplo |
Purpose |
| host |
management.azure.com |
Punto de conexión de ARM implícito |
| subscriptionId |
aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e |
Entrada de usuario |
| resourceGroupName |
myResourceGroup |
Entrada de usuario |
| workspaceName |
myWorkspace |
Entrada de usuario |
| tableName_CL |
myTable_CL |
Entrada de usuario |
| apiVersion |
2025-07-01 |
Referencia |
Enviar datos a una tabla con el plan auxiliar
Hay varias maneras de ingerir datos en una tabla personalizada con el plan auxiliar:
- Agente de Azure Monitor (AMA)
- API de ingesta de registros
- Transformación del área de trabajo
"Utilice el AMA"
Si usa este método, la tabla personalizada solo debe tener dos columnas TimeGenerated : (tipo datetime) y RawData (de tipo string). La regla de recopilación de datos envía la totalidad de cada entrada de registro que recopila a la columna RawData y los registros de Azure Monitor rellenan automáticamente la columna TimeGenerated con la hora en que se ingiere el registro.
Para obtener más información sobre cómo usar AMA, consulte los siguientes artículos:
Uso de la API de ingesta de registros
Este método sigue detenidamente los pasos descritos en Tutorial: Envío de datos a Azure Monitor mediante la API de ingesta de registros.
Crear una tabla personalizada con el plan auxiliar tal como se describe en este artículo.
Crear una aplicación de Microsoft Entra.
Cree una regla de recopilación de datos. Esta es una plantilla de ARM de ejemplo para kind: Direct. Este tipo de DCR no requiere un DCE, ya que incluye un logsIngestion punto de conexión.
-
myWorkspace es el nombre del área de trabajo de Log Analytics.
-
myTable_CL es el nombre de la tabla.
-
columns incluye las mismas columnas que estableció en la creación de la tabla.
En el siguiente ejemplo de CLI de Azure se usa el comando az monitor data-collection rule create.
subscriptionId="aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"
resourceGroupName="myResourceGroup"
dataCollectionRuleName="myDataCollectionRule"
ruleFile="./my-dcr.json"
az account set --subscription "$subscriptionId"
az extension add --name monitor-control-service
az monitor data-collection rule create \
--resource-group "$resourceGroupName" \
--name "$dataCollectionRuleName" \
--rule-file "$ruleFile"
Nota:
CLI de Azure comandos usan el punto de conexión de Azure Resource Manager desde el contexto actual de la CLI, por lo que no es necesario especificar management.azure.com en la sintaxis del comando.
Expanda para ver el archivo my-dcr.json.
{
"location": "eastus",
"kind": "Direct",
"properties": {
"streamDeclarations": {
"Custom-myTable": {
"columns": [
{
"name": "TimeGenerated",
"type": "dateTime"
},
{
"name": "StringProperty",
"type": "string"
},
{
"name": "IntProperty",
"type": "int"
},
{
"name": "LongProperty",
"type": "long"
},
{
"name": "RealProperty",
"type": "real"
},
{
"name": "BooleanProperty",
"type": "boolean"
},
{
"name": "DateTimeProperty",
"type": "dateTime"
}
]
}
},
"destinations": {
"logAnalytics": [
{
"workspaceResourceId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myResourceGroup/providers/Microsoft.OperationalInsights/workspaces/myWorkspace",
"name": "myWorkspace"
}
]
},
"dataFlows": [
{
"streams": [
"Custom-myTable"
],
"transformKql": "source",
"destinations": [
"myWorkspace"
],
"outputStream": "Custom-myTable_CL"
}
]
}
}
En el ejemplo de PowerShell siguiente se usa el cmdlet New-AzDataCollectionRule .
$subscriptionId = "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"
$resourceGroupName = "myResourceGroup"
$dataCollectionRuleName = "myDataCollectionRule"
$jsonFilePath = ".\my-dcr.json"
Select-AzSubscription -SubscriptionId $subscriptionId
$dataCollectionRuleParams = @{
Name = $dataCollectionRuleName
ResourceGroupName = $resourceGroupName
JsonFilePath = $jsonFilePath
}
New-AzDataCollectionRule @dataCollectionRuleParams
Nota:
Azure PowerShell cmdlets usan el punto de conexión de Azure Resource Manager desde el contexto actual de Az, por lo que no es necesario especificar management.azure.com en la sintaxis del cmdlet.
Expanda para ver el archivo my-dcr.json.
{
"location": "eastus",
"kind": "Direct",
"properties": {
"streamDeclarations": {
"Custom-myTable": {
"columns": [
{
"name": "TimeGenerated",
"type": "dateTime"
},
{
"name": "StringProperty",
"type": "string"
},
{
"name": "IntProperty",
"type": "int"
},
{
"name": "LongProperty",
"type": "long"
},
{
"name": "RealProperty",
"type": "real"
},
{
"name": "BooleanProperty",
"type": "boolean"
},
{
"name": "DateTimeProperty",
"type": "dateTime"
}
]
}
},
"destinations": {
"logAnalytics": [
{
"workspaceResourceId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myResourceGroup/providers/Microsoft.OperationalInsights/workspaces/myWorkspace",
"name": "myWorkspace"
}
]
},
"dataFlows": [
{
"streams": [
"Custom-myTable"
],
"transformKql": "source",
"destinations": [
"myWorkspace"
],
"outputStream": "Custom-myTable_CL"
}
]
}
}
Nota:
La siguiente llamada REST usa valores de ejemplo.
PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Insights/dataCollectionRules/{dataCollectionRuleName}?api-version={apiVersion}
Authorization: Bearer {accessToken}
Content-Type: application/json
{
"location": "<location>",
"kind": "Direct",
"properties": {
"streamDeclarations": {
"<Custom-tableName>": {
"columns": [
{
"name": "TimeGenerated",
"type": "dateTime"
},
{
"name": "StringProperty",
"type": "string"
},
{
"name": "IntProperty",
"type": "int"
},
{
"name": "LongProperty",
"type": "long"
},
{
"name": "RealProperty",
"type": "real"
},
{
"name": "BooleanProperty",
"type": "boolean"
},
{
"name": "DateTimeProperty",
"type": "dateTime"
}
]
}
},
"destinations": {
"logAnalytics": [
{
"workspaceResourceId": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.OperationalInsights/workspaces/<workspaceName>",
"name": "<workspaceName>"
}
]
},
"dataFlows": [
{
"streams": [
"<Custom-tableName>"
],
"transformKql": "source",
"destinations": [
"myWorkspace"
],
"outputStream": "<Custom-tableName_CL>"
}
]
}
}
En el siguiente ejemplo de Bicep se usa el tipo de recurso Microsoft.Insights/dataCollectionRules.
@description('Specifies the name of the data collection rule to create.')
param dataCollectionRuleName string = 'myDataCollectionRule'
@description('Specifies the region in which to create the data collection rule. The must be the same region as the destination Log Analytics workspace.')
param location string = 'eastus'
@description('The Azure resource ID of the Log Analytics workspace in which you created a custom table with the Auxiliary plan.')
param workspaceResourceId string = '/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myResourceGroup/providers/Microsoft.OperationalInsights/workspaces/myWorkspace'
resource dataCollectionRule 'Microsoft.Insights/dataCollectionRules@2025-07-01' = {
name: dataCollectionRuleName
location: location
kind: 'Direct'
properties: {
streamDeclarations: {
'Custom-myTable': {
columns: [
{
name: 'TimeGenerated'
type: 'dateTime'
}
{
name: 'StringProperty'
type: 'string'
}
{
name: 'IntProperty'
type: 'int'
}
{
name: 'LongProperty'
type: 'long'
}
{
name: 'RealProperty'
type: 'real'
}
{
name: 'BooleanProperty'
type: 'boolean'
}
{
name: 'DateTimeProperty'
type: 'dateTime'
}
]
}
}
destinations: {
logAnalytics: [
{
workspaceResourceId: workspaceResourceId
name: 'myWorkspace'
}
]
}
dataFlows: [
{
streams: [
'Custom-myTable'
]
transformKql: 'source'
destinations: [
'myWorkspace'
]
outputStream: 'Custom-myTable_CL'
}
]
}
}
output dataCollectionRuleId string = dataCollectionRule.id
El siguiente ejemplo de ARM (JSON) usa el tipo de recurso Microsoft.Insights dataCollectionRules.
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"dataCollectionRuleName": {
"type": "string",
"defaultValue": "myDataCollectionRule",
"metadata": {
"description": "Specifies the name of the data collection rule to create."
}
},
"location": {
"type": "string",
"defaultValue": "eastus",
"metadata": {
"description": "Specifies the region in which to create the data collection rule. The must be the same region as the destination Log Analytics workspace."
}
},
"workspaceResourceId": {
"type": "string",
"defaultValue": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myResourceGroup/providers/Microsoft.OperationalInsights/workspaces/myWorkspace",
"metadata": {
"description": "The Azure resource ID of the Log Analytics workspace in which you created a custom table with the Auxiliary plan."
}
}
},
"resources": [
{
"type": "Microsoft.Insights/dataCollectionRules",
"name": "[parameters('dataCollectionRuleName')]",
"location": "[parameters('location')]",
"apiVersion": "2025-07-01",
"kind": "Direct",
"properties": {
"streamDeclarations": {
"Custom-myTable": {
"columns": [
{
"name": "TimeGenerated",
"type": "dateTime"
},
{
"name": "StringProperty",
"type": "string"
},
{
"name": "IntProperty",
"type": "int"
},
{
"name": "LongProperty",
"type": "long"
},
{
"name": "RealProperty",
"type": "real"
},
{
"name": "BooleanProperty",
"type": "boolean"
},
{
"name": "DateTimeProperty",
"type": "dateTime"
}
]
}
},
"destinations": {
"logAnalytics": [
{
"workspaceResourceId": "[parameters('workspaceResourceId')]",
"name": "myWorkspace"
}
]
},
"dataFlows": [
{
"streams": [
"Custom-myTable"
],
"transformKql": "source",
"destinations": [
"myWorkspace"
],
"outputStream": "Custom-myTable_CL"
}
]
}
}
],
"outputs": {
"dataCollectionRuleId": {
"type": "string",
"value": "[resourceId('Microsoft.Insights/dataCollectionRules', parameters('dataCollectionRuleName'))]"
}
}
}
| Variable |
Valor de ejemplo |
Purpose |
| host |
management.azure.com |
Punto de conexión de ARM implícito |
| subscriptionId |
aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e |
Entrada de usuario |
| resourceGroupName |
myResourceGroup |
Entrada de usuario |
| dataCollectionRuleName |
myDataCollectionRule |
Entrada de usuario |
| location |
eastus |
Entrada de usuario |
| Custom-tableName |
Custom-myTable |
Entrada de usuario |
| Custom-tableName_CL |
Custom-myTable_CL |
Entrada de usuario |
| apiVersion |
2025-07-01 |
Referencia |
Conceder permiso de aplicación para usar el DCR.
Enviar datos mediante código de ejemplo.
Advertencia
Al ingerir registros en el nivel Auxiliar de Azure Monitor, evite enviar una sola carga que contenga marcas de tiempo TimeGenerated que abarquen más de 30 minutos en una llamada API. Esta llamada API podría provocar el siguiente código de error de ingesta RecordsTimeRangeIsMoreThan30Minutes. Se trata de una limitación conocida que se quita.
Esta restricción no se aplica a los registros auxiliares que usan transformaciones.
Para obtener más información, consulte los artículos siguientes:
Contenido relacionado