Compartir a través de


Consultas por lotes

La API de Azure Monitor Log Analytics admite el procesamiento por lotes de consultas juntas. Actualmente, las consultas por lotes requieren la autenticación de Microsoft Entra.

Formato de solicitud

Para procesar por lotes las consultas, use el punto de conexión de API y agregue $batch al final de la dirección URL: https://api.loganalytics.azure.com/v1/$batch.

Si no se incluye ningún método, el procesamiento por lotes tiene como valor predeterminado el método GET. En las solicitudes GET, la API omite el parámetro body del objeto de solicitud.

La solicitud por lotes incluye encabezados normales para otras operaciones:

Content-Type: application/json
Authorization: Bearer <user token>

El cuerpo de la solicitud es una matriz de objetos que contiene las siguientes propiedades:

  • id
  • headers
  • body
  • method
  • path
  • workspace

Ejemplo:

POST https://api.loganalytics.azure.com/v1/$batch
Content-Type: application/json
Authorization: Bearer <user token>
Cache-Control: no-cache
{
    "requests": 
    [
        {
            "id": "1",
            "headers": {
                "Content-Type": "application/json"
            },
            "body": {
                "query": "AzureActivity | summarize count()",
                "timespan": "PT1H"
            },
            "method": "POST",
            "path": "/query",
            "workspace": "workspace-1"
        },
        {
            "id": "2",
            "headers": {
                "Content-Type": "application/json"
            },
            "body": {
                "query": "ApplicationInsights | limit 10",
                "timespan": "PT1H"
            },
            "method": "POST",
            "path": "/fakePath",
            "workspace": "workspace-2"
        }
    ]
}

Formato de respuesta

El formato de respuesta es una matriz similar de objetos. Cada objeto contiene:

  • El identificador
  • Código de estado HTTP de la consulta determinada
  • Cuerpo de la respuesta devuelta para esa consulta.

Si una consulta no se devuelve correctamente, el cuerpo de la respuesta contiene mensajes de error. Los mensajes de error solo se aplican a las consultas individuales del lote; el propio lote devuelve un código de estado independiente de los valores devueltos de sus miembros. El lote se devuelve correctamente si el lote es:

  • Bien formado y con el formato correcto
  • Autenticadas
  • Autorizado

El lote se devuelve correctamente incluso cuando los resultados de sus consultas de miembro puedan ser una combinación de éxitos y errores.

Ejemplo:

{
    "responses":
    [
        {
            "id": "2",
            "status": 404,
            "body": {
                "error": {
                    "message": "The requested path does not exist",
                    "code": "PathNotFoundError"
                }
            }
        },
        {
            "id": "1",
            "status": 200,
            "body": {
                "tables": [
                    {
                        "name": "PrimaryResult",
                        "columns": [
                            {
                                "name": "Count",
                                "type": "long"
                            }
                        ],
                        "rows": [
                            [
                                7240
                            ]
                        ]
                    }
                ]
            }
        }
    ]
}

Comportamiento y errores

El orden de las respuestas dentro del objeto devuelto no está relacionado con el orden de la solicitud. El tiempo que tarda en completarse determina cada consulta individual. Use los Id. para asignar los objetos de respuesta de consulta a las solicitudes originales. No suponga que las respuestas de consulta están en orden.

Solo se produce un error en una solicitud por lotes completa si:

  • El formato JSON de la carga externa no es válido.
  • Error de autenticación: el usuario no proporciona un token de autenticación o el token no es válido.
  • Los objetos de solicitud individuales en el lote no tienen las propiedades necesarias o hay identificadores duplicados.

En estas condiciones, la forma de la respuesta es diferente del contenedor normal. Los objetos contenidos en el objeto por lotes pueden producir un error o tener éxito cada uno independientemente, consulte los siguientes errores de ejemplo.

Errores de ejemplo

Esta es una lista no exhaustiva de ejemplos de posibles errores y sus significados.

  • 400: solicitud con formato incorrecto. El objeto de solicitud externa no era JSON válido.

    {
        "error": {
            "message": "The request had some invalid properties",
            "code": "BadArgumentError",
            "innererror": {
                "code": "QueryValidationError",
                "message": "Failed parsing the query",
                "details": [
                    {
                        "code": "InvalidJsonBody",
                        "message": "Unexpected end of JSON input",
                        "target": null
                    }
                ]
            }
        }
    }
    
  • 403 (Prohibido). El token proporcionado no tiene acceso al recurso al que está intentando acceder. Asegúrese de que la solicitud de token tiene el recurso correcto y de que ha concedido permisos para la aplicación de Microsoft Entra.

    {
        "error": {
            "message": "The provided authentication is not valid for this resource",
            "code": "InvalidTokenError",
            "innererror": {
                "code": "SignatureVerificationFailed",
                "message": "Could not validate the request"
            }
        }
    }
    
  • 204 - No colocado. No tiene datos para que la API extraiga en el almacén de respaldo. Como error 2xx, técnicamente se trata de una solicitud correcta. Sin embargo, en un lote, resulta útil tener en cuenta el error.

    {
        "responses": [
            {
                "id": "2",
                "status": 204,
                "body": {
                    "error": {
                        "code": "WorkspaceNotPlacedError"
                    }
                }
            }
        ]
    }
    
  • 404, No encontrado. La ruta de acceso de consulta no existe. Este error también puede producirse en un lote si especifica un método HTTP no válido en la solicitud individual.

    {
        "responses": [
            {
                "id": "1",
                "status": 404,
                "body": {
                    "error": {
                        "message": "The requested path does not exist",
                        "code": "PathNotFoundError"
                    }
                }
            }
        ]
    }
    
  • 400: no se pudo resolver el recurso. El GUID que representa el área de trabajo es incorrecto.

    {
        "responses": [
            {
                "id": "1",
                "status": 400,
                "body": {
                    "error": {
                        "code": "FailedToResolveResource",
                        "message": "Resource identity could not be resovled"
                    }
                }
            }
        ]
    }