Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Puede crear un conector de datos de RestApiPoller con codeless Connector Framework (CCF) mediante este artículo como complemento de la API REST de Microsoft Sentinel para conectores de datos documentos.
Cada conector de datos representa un connection específico de un conector de datos Microsoft Sentinel. Un conector de datos puede tener varias conexiones, que capturan datos de distintos puntos de conexión. Puede completar la plantilla de implementación para el conector de datos CCF mediante la configuración json que se compila con este artículo.
Para obtener más información, consulte Crear un conector sin código para Microsoft Sentinel.
Creación o actualización de conectores de datos
Busque la versión de API estable o preliminar más reciente haciendo referencia a las operaciones o en los documentos de la API REST. La diferencia entre las operaciones y es que requiere el valor .
método:
https://management.azure.com/subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroupName}}/providers/Microsoft.OperationalInsights/workspaces/{{workspaceName}}/providers/Microsoft.SecurityInsights/dataConnectors/{{dataConnectorId}}?api-version={{apiVersion}}
Parámetros del identificador URI
Para más información sobre la versión más reciente de la API, consulte Conectores de datos: creación o actualización de parámetros de URI.
| Nombre | Descripción |
|---|---|
dataConnectorId |
Identificador del conector de datos. Debe ser un nombre único que sea el mismo que el parámetro en el cuerpo de la solicitud. |
resourceGroupName |
Nombre del grupo de recursos, no distingue mayúsculas de minúsculas. |
subscriptionId |
Identificador de la suscripción de destino. |
workspaceName |
Nombre del área de trabajo, no el identificador. El patrón regex es . |
api-version |
Versión de API que se usará para la operación. |
Cuerpo de la solicitud
El cuerpo de la solicitud para un conector de datos CCF tiene la siguiente estructura:
{
"name": "{{dataConnectorId}}",
"kind": "RestApiPoller",
"etag": "",
"properties": {
"connectorDefinitionName": "",
"auth": {},
"request": {},
"response": {},
"paging": "",
"dcrConfig": ""
}
}
RestApiPoller
es un conector de datos CCF del sondeo de API que puede usar para personalizar las cargas de paginación, autorización y solicitud/respuesta para el origen de datos.
| Nombre | Obligatorio | Tipo | Descripción |
|---|---|---|---|
name |
Cierto | Cuerda | Nombre único de la conexión que coincide con el parámetro URI. |
kind |
Cierto | Cuerda | Valor de tipo . Este campo debe establecerse en . |
etag |
Identificador Único Global (GUID) | Valor de tipo . Este campo debe dejarse vacío para la creación del nuevo conector. Para las operaciones de actualización, debe coincidir con el conector existente (GUID). | |
properties.connectorDefinitionName |
Cuerda | Nombre del recurso que define la configuración de la interfaz de usuario del conector de datos. Para más información, vaya a Definición del conector de datos. | |
properties.auth |
Cierto | JSON anidado | Propiedades de autenticación para sondear los datos. Para obtener más información, vaya a Configuración de autenticación. |
properties.request |
Cierto | JSON anidado | Carga de solicitud para sondear los datos, como el punto de conexión de API. Para obtener más información, vaya a Configuración de solicitudes. |
properties. response |
Cierto | JSON anidado | El objeto de respuesta y el mensaje anidado que devuelve la API cuando sondea los datos. Para obtener más información, vaya a Configuración de respuesta. |
properties.paging |
JSON anidado | Carga de paginación al sondear los datos. Para obtener más información, vaya a Configuración de paginación. | |
properties.dcrConfig |
JSON anidado | Los parámetros necesarios cuando los datos se envían a una regla de recopilación de datos (DCR). Para obtener más información, vaya a Configuración de DCR. |
Configuración de autenticación
CcF admite los siguientes tipos de autenticación:
- Básico
- Clave de API
- OAuth2
- JWT
Nota:
La implementación de CCF OAuth2 no admite credenciales de certificado de cliente.
Como procedimiento recomendado, use parámetros en la sección de autenticación en lugar de credenciales de codificación rígida. Para obtener más información, consulte Protección de la entrada confidencial.
Para crear la plantilla de implementación, que también usa parámetros, debe escapar los parámetros de esta sección con un inicio adicional. Este paso permite que los parámetros asignen un valor en función de la interacción del usuario con el conector. Para obtener más información, consulte Caracteres de escape de expresiones de plantilla.
Para permitir que las credenciales se escriban desde la interfaz de usuario, la sección requiere que escriba los parámetros deseados en . Para obtener más información, consulte Referencia de definiciones de conectores de datos para Codeless Connector Framework.
Autenticación básica
| Campo | Obligatorio | Tipo |
|---|---|---|
UserName |
Cierto | Cuerda |
Password |
Cierto | Cuerda |
Este es un ejemplo de autenticación básica que usa parámetros definidos en :
"auth": {
"type": "Basic",
"UserName": "[[parameters('username')]",
"Password": "[[parameters('password')]"
}
Clave de API
| Campo | Obligatorio | Tipo | Descripción | Valor predeterminado |
|---|---|---|---|---|
ApiKey |
Cierto | Cuerda | Clave secreta de usuario. | |
ApiKeyName |
Cuerda | Nombre del encabezado URI que contiene el valor. | Authorization |
|
ApiKeyIdentifier |
Cuerda | Valor de cadena para anteponer el token. | token |
|
IsApiKeyInPostPayload |
Booleano | Valor que determina si se va a enviar el secreto en el cuerpo en lugar del encabezado. | false |
ejemplos de autenticación:
"auth": {
"type": "APIKey",
"ApiKey": "[[parameters('apikey')]",
"ApiKeyName": "X-MyApp-Auth-Header",
"ApiKeyIdentifier": "Bearer"
}
El resultado de este ejemplo es el secreto definido a partir de la entrada del usuario enviada en el siguiente encabezado: : .
"auth": {
"type": "APIKey",
"ApiKey": "123123123",
}
En este ejemplo se usan los valores predeterminados y se produce el siguiente encabezado: : .
"auth": {
"type": "APIKey",
"ApiKey": "123123123",
"ApiKeyName": ""
}
Dado que se establece explícitamente en , el resultado es el siguiente encabezado: : .
OAuth2
Codeless Connector Framework admite la concesión de código de autorización de OAuth 2.0 y las credenciales de cliente. Los clientes confidenciales y públicos usan el tipo de concesión de código de autorización para intercambiar un código de autorización para un token de acceso.
Después de que el usuario vuelva al cliente a través de la dirección URL de redireccionamiento, la aplicación obtendrá el código de autorización de la dirección URL y lo usará para solicitar un token de acceso.
| Campo | Obligatorio | Tipo | Descripción |
|---|---|---|---|
ClientId |
Verdadero. | Cuerda | Identificador de cliente. |
ClientSecret |
Verdadero. | Cuerda | Secreto de cliente. |
AuthorizationCode |
True cuando el valor es . | Cuerda | Si el tipo de concesión es , este valor de campo es el código de autorización que devolvió el servidor de autenticación. |
Scope |
True para el tipo de concesión. Opcional para el tipo de concesión. |
Cuerda | Una lista separada por espacios de ámbitos para el consentimiento del usuario. Para obtener más información, consulte Ámbitos y permisos de OAuth2. |
RedirectUri |
True cuando el valor es . | Cuerda | La dirección URL para el redireccionamiento debe ser . |
GrantType |
Verdadero. | Cuerda | Tipo de concesión. Puede ser o . |
TokenEndpoint |
Verdadero. | Cuerda | Dirección URL para intercambiar código con un token válido en la concesión, o un identificador de cliente y un secreto con un token válido en la concesión. |
TokenEndpointHeaders |
Objeto | Objeto de clave/valor opcional para enviar encabezados personalizados al servidor de tokens. | |
TokenEndpointQueryParameters |
Objeto | Objeto de clave/valor opcional para enviar parámetros de consulta personalizados al servidor de tokens. | |
AuthorizationEndpoint |
Verdadero. | Cuerda | Dirección URL del consentimiento del usuario para el flujo. |
AuthorizationEndpointHeaders |
Objeto | Objeto de clave/valor opcional para enviar encabezados personalizados al servidor de autenticación. | |
AuthorizationEndpointQueryParameters |
Objeto | Un par de clave-valor opcional que se usa en una solicitud de flujo de código de autorización de OAuth2. |
Puede usar el flujo de código de autenticación para capturar datos en nombre de los permisos de un usuario. Puede usar credenciales de cliente para capturar datos con permisos de aplicación. El servidor de datos concede acceso a la aplicación. Dado que no hay ningún usuario en el flujo de credenciales de cliente, no se necesita ningún punto de conexión de autorización, solo un punto de conexión de token.
Este es un ejemplo del tipo de concesión de OAuth2 :
"auth": {
"type": "OAuth2",
"ClientId": "[[parameters('appId')]",
"ClientSecret": "[[parameters('appSecret')]",
"tokenEndpoint": "https://login.microsoftonline.com/{{tenantId}}/oauth2/v2.0/token",
"authorizationEndpoint": "https://login.microsoftonline.com/{{tenantId}}/oauth2/v2.0/authorize",
"authorizationEndpointHeaders": {},
"authorizationEndpointQueryParameters": {
"prompt": "consent"
},
"redirectUri": "https://portal.azure.com/TokenAuthorize/ExtensionName/Microsoft_Azure_Security_Insights",
"tokenEndpointHeaders": {
"Accept": "application/json",
"Content-Type": "application/x-www-form-urlencoded"
},
"TokenEndpointQueryParameters": {},
"scope": "openid offline_access some_scope",
"grantType": "authorization_code"
}
Este es un ejemplo del tipo de concesión de OAuth2 :
"auth": {
"type": "OAuth2",
"ClientId": "[[parameters('appId')]",
"ClientSecret": "[[parameters('appSecret')]",
"tokenEndpoint": "https://login.microsoftonline.com/{{tenantId}}/oauth2/v2.0/token",
"tokenEndpointHeaders": {
"Accept": "application/json",
"Content-Type": "application/x-www-form-urlencoded"
},
"TokenEndpointQueryParameters": {},
"scope": "openid offline_access some_scope",
"grantType": "client_credentials"
}
JWT
La autenticación json Web Token (JWT) admite la obtención de tokens a través de credenciales de nombre de usuario y contraseña y su uso para las solicitudes de API.
Ejemplo básico
"auth": {
"type": "JwtToken",
"userName": {
"key": "username",
"value": "[[parameters('UserName')]"
},
"password": {
"key": "password",
"value": "[[parameters('Password')]"
},
"TokenEndpoint": "https://token_endpoint.contoso.com",
"IsJsonRequest": true,
"JwtTokenJsonPath": "$.access_token"
}
Credenciales en el cuerpo POST (valor predeterminado)
"auth": {
"type": "JwtToken",
"userName": {
"key": "username",
"value": "[[parameters('UserName')]"
},
"password": {
"key": "password",
"value": "[[parameters('Password')]"
},
"TokenEndpoint": "https://api.example.com/token",
"Headers": {
"Accept": "application/json",
"Content-Type": "application/json"
},
"IsCredentialsInHeaders": false,
"IsJsonRequest": true,
"JwtTokenJsonPath": "$.access_token"
}
Credenciales en encabezados (autenticación básica)
"auth": {
"type": "JwtToken",
"userName": {
"key": "client_id",
"value": "[[parameters('ClientId')]"
},
"password": {
"key": "client_secret",
"value": "[[parameters('ClientSecret')]"
},
"TokenEndpoint": "https://api.example.com/oauth/token",
"Headers": {
"Accept": "application/json"
},
"IsCredentialsInHeaders": true,
"IsJsonRequest": true,
"JwtTokenJsonPath": "$.access_token",
"RequestTimeoutInSeconds": 30
}
Credenciales en encabezados (token de usuario)
"auth": {
"type": "JwtToken",
"UserToken": "[[parameters('userToken')]",
"UserTokenPrepend": "Bearer",
"TokenEndpoint": "https://api.example.com/oauth/token",
"Headers": {
"Accept": "application/json"
},
"TokenEndpointHttpMethod": "GET",
"NoAccessTokenPrepend": true,
"JwtTokenJsonPath": "$.systemToken"
}
Siga este flujo de autenticación:
Envíe credenciales para obtener el token JWT.
- Si : envía un encabezado de autenticación básico con .
- Si : envía credenciales en un cuerpo.
Extraiga el token mediante o desde el encabezado de respuesta.
Use el token en las solicitudes de API posteriores con el encabezado .
| Campo | Obligatorio | Tipo | Descripción |
|---|---|---|---|
type |
Cierto | Cuerda | Tipo. Debe ser |
userName |
True (si no se usa) | Objeto | Par clave-valor para la credencial. Si y se envían en la solicitud de encabezado, especifique la propiedad con el nombre de usuario. Si y se envían en la solicitud body, especifique y . |
password |
True (si no se usa) | Objeto | Par clave-valor para la credencial de contraseña. Si y se envían en la solicitud de encabezado, especifique la propiedad con . Si y se envían en la solicitud body, especifique y . |
userToken |
True (si no se usa) | Cuerda | Token de usuario generado por el cliente para obtener el token del sistema para la autenticación. |
UserTokenPrepend |
Falso | Cuerda | Valor que indica si se va a anteponer el texto antes del token. Ejemplo: . |
NoAccessTokenPrepend |
Falso | Booleano | Marca de acceso que indica que el token no debe anteponer nada. |
TokenEndpointHttpMethod |
Falso | Cuerda | Método HTTP para el punto de conexión de token. Puede ser o . El valor predeterminado es . |
TokenEndpoint |
Cierto | Cuerda | Punto de conexión de dirección URL que se usa para obtener el token JWT. |
IsCredentialsInHeaders |
Booleano | Valor que indica si se deben enviar credenciales como un encabezado de autenticación básico () frente a un cuerpo (). El valor predeterminado es . | |
IsJsonRequest |
Booleano | Valor que indica si se va a enviar la solicitud en JSON (encabezado ) frente a codificada con formato (encabezado ). El valor predeterminado es . | |
JwtTokenJsonPath |
Cuerda | Valor que indica el valor que se va a usar para extraer el token de la respuesta. Por ejemplo: . | |
JwtTokenInResponseHeader |
Booleano | Valor que indica si se va a extraer el token del encabezado de respuesta frente al cuerpo. El valor predeterminado es . | |
| . | Cuerda | Valor que indica el nombre del encabezado cuando el token está en el encabezado de respuesta. El valor predeterminado es . | |
JwtTokenIdentifier |
Cuerda | Identificador usado para extraer el JWT de una cadena de token con prefijo. | |
QueryParameters |
Objeto | Parámetros de consulta personalizados que se van a incluir al enviar la solicitud al punto de conexión del token. | |
Headers |
Objeto | Encabezados personalizados que se van a incluir al enviar la solicitud al punto de conexión del token. | |
RequestTimeoutInSeconds |
Entero | Tiempo de espera de la solicitud en segundos. El valor predeterminado es , con un valor máximo de . |
Siga este flujo de autenticación:
Envíe credenciales para obtener el token JWT.
- Si : envía un encabezado de autenticación básico con .
- Si : envía credenciales en un cuerpo.
Extraiga el token mediante o desde el encabezado de respuesta.
Use el token en las solicitudes de API posteriores con el encabezado .
Nota:
Limitaciones
- Requiere autenticación de nombre de usuario y contraseña para la adquisición de tokens
- No admite solicitudes de token basadas en claves de API
- No admite la autenticación de encabezado personalizada (sin nombre de usuario y contraseña)
Configuración de la solicitud
La sección de solicitud define cómo el conector de datos CCF envía solicitudes al origen de datos (por ejemplo, el punto de conexión de API y la frecuencia con la que sondear ese punto de conexión).
| Campo | Obligatorio | Tipo | Descripción |
|---|---|---|---|
ApiEndpoint |
Verdadero. | Cuerda | Este campo determina la dirección URL del servidor remoto y define el punto de conexión desde el que extraer datos. |
RateLimitQPS |
Entero | Este campo define el número de llamadas o consultas permitidas en un segundo. | |
RateLimitConfig |
Objeto | Este campo define la configuración de límite de velocidad para la API RESTful. Para obtener más información, vaya al ejemplo. | |
QueryWindowInMin |
Entero | Este campo define la ventana de consulta disponible en minutos. El mínimo es de 1 minuto. El valor predeterminado es 5 minutos. | |
HttpMethod |
Cuerda | Este campo define el método de API: (valor predeterminado) o . | |
QueryTimeFormat |
Cuerda | Este campo define el formato de fecha y hora que espera el punto de conexión (servidor remoto). El CCF usa la fecha y hora actuales donde se use esta variable. Los valores posibles son las constantes: , o cualquier otra representación válida de fecha y hora. Por ejemplo: , . El valor predeterminado es . |
|
RetryCount |
Entero (1...6) | Este campo define que los valores de en los reintentos pueden recuperarse de un error. El valor predeterminado es . | |
TimeoutInSeconds |
Entero (1...180) | Este campo define el tiempo de espera de la solicitud en segundos. El valor predeterminado es . | |
IsPostPayloadJson |
Booleano | Este campo determina si la carga está en formato JSON. El valor predeterminado es . | |
Headers |
Objeto | Este campo incluye pares clave-valor que definen los encabezados de solicitud. | |
QueryParameters |
Objeto | Este campo incluye pares clave-valor que definen los parámetros de consulta de solicitud. | |
StartTimeAttributeName |
True cuando se establece el valor. | Cuerda | Este campo define el nombre del parámetro de consulta para la hora de inicio de la consulta. Para obtener más información, vaya al ejemplo. |
EndTimeAttributeName |
True cuando se establece. | Cuerda | Este campo define el nombre del parámetro de consulta para la hora de finalización de la consulta. |
QueryTimeIntervalAttributeName |
Cuerda | Este campo se usa si el punto de conexión requiere un formato especializado para consultar los datos en un período de tiempo. Use esta propiedad con los parámetros y . Para obtener más información, vaya al ejemplo. | |
QueryTimeIntervalPrepend |
True cuando se establece. | Cuerda | Referencia a . |
QueryTimeIntervalDelimiter |
True cuando se establece. | Cuerda | Referencia a . |
QueryParametersTemplate |
Cuerda | Este campo hace referencia a la plantilla de consulta que se va a usar al pasar parámetros en escenarios avanzados. Por ejemplo: . |
Cuando la API requiere parámetros complejos, use o . Estos comandos incluyen algunas variables integradas.
| Variable integrada | Para su uso en | Para su uso en |
|---|---|---|
_QueryWindowStartTime |
Yes | Yes |
_QueryWindowEndTime |
Yes | Yes |
_APIKeyName |
No | Yes |
_APIKey |
No | Yes |
Ejemplo de StartTimeAttributeName
Considere este ejemplo:
StartTimeAttributeName=fromEndTimeAttributeName=untilApiEndpoint=https://www.example.com
La consulta enviada al servidor remoto es: .
Ejemplo de QueryTimeIntervalAttributeName
Considere este ejemplo:
QueryTimeIntervalAttributeName=intervalQueryTimeIntervalPrepend=time:QueryTimeIntervalDelimiter=..ApiEndpoint=https://www.example.com
La consulta enviada al servidor remoto es: .
Ejemplo de RateLimitConfig
Considere este ejemplo:
.
"rateLimitConfig": {
"evaluation": {
"checkMode": "OnlyWhen429"
},
"extraction": {
"source": "CustomHeaders",
"headers": {
"limit": {
"name": "X-RateLimit-Limit",
"format": "Integer"
},
"remaining": {
"name": "X-RateLimit-Remaining",
"format": "Integer"
},
"reset": {
"name": "X-RateLimit-RetryAfter",
"format": "UnixTimeSeconds"
}
}
},
"retryStrategy": {
"useResetOrRetryAfterHeaders": true
}
}
Cuando la respuesta incluye cabeceras de límite de velocidad, el conector puede usar esta información para ajustar su tasa de solicitud.
Solicitar ejemplos que usan Microsoft Graph como API de origen de datos
En este ejemplo se consultan mensajes con un parámetro de consulta de filtro. Para más información, consulte Microsoft Graph API parámetros de consulta.
"request": {
"apiEndpoint": "https://graph.microsoft.com/v1.0/me/messages",
"httpMethod": "Get",
"queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ",
"queryWindowInMin": 10,
"retryCount": 3,
"rateLimitQPS": 20,
"headers": {
"Accept": "application/json",
"User-Agent": "Example-app-agent"
},
"QueryTimeIntervalAttributeName": "filter",
"QueryTimeIntervalPrepend": "receivedDateTime gt ",
"QueryTimeIntervalDelimiter": " and receivedDateTime lt "
}
En el ejemplo anterior se envía una solicitud a . La marca de tiempo se actualiza cada vez.
Con este ejemplo se obtienen los mismos resultados:
"request": {
"apiEndpoint": "https://graph.microsoft.com/v1.0/me/messages",
"httpMethod": "Get",
"queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ",
"queryWindowInMin": 10,
"retryCount": 3,
"rateLimitQPS": 20,
"headers": {
"Accept": "application/json",
},
"queryParameters": {
"filter": "receivedDateTime gt {_QueryWindowStartTime} and receivedDateTime lt {_QueryWindowEndTime}"
}
}
Hay otra opción para situaciones en las que el origen de datos espera dos parámetros de consulta (uno para la hora de inicio y otro para la hora de finalización).
Ejemplo:
"request": {
"apiEndpoint": "https://graph.microsoft.com/v1.0/me/calendarView",
"httpMethod": "Get",
"queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ",
"queryWindowInMin": 10,
"retryCount": 3,
"rateLimitQPS": 20,
"headers": {
"Accept": "application/json",
},
"StartTimeAttributeName": "startDateTime",
"EndTimeAttributeName": "endDateTime",
}
Esta opción envía una solicitud a .
Para consultas complejas, use . En este ejemplo se envía una solicitud con parámetros en el cuerpo:
"request": {
"apiEndpoint": "https://graph.microsoft.com/v1.0/me/messages",
"httpMethod": "POST",
"queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ",
"queryWindowInMin": 10,
"retryCount": 3,
"rateLimitQPS": 20,
"headers": {
"Accept": "application/json",
},
"isPostPayloadJson": true,
"queryParametersTemplate": "{\"query":"TableName | where createdTimestamp between (datetime({_QueryWindowStartTime}) .. datetime({_QueryWindowEndTime}))\"}"
}
Configuración de respuesta
Defina cómo controla el conector de datos las respuestas mediante los parámetros siguientes:
| Campo | Obligatorio | Tipo | Descripción |
|---|---|---|---|
EventsJsonPaths |
Cierto | Lista de cadenas | Define la ruta de acceso al mensaje en el JSON de respuesta. Una expresión de ruta de acceso JSON especifica una ruta de acceso a un elemento, o un conjunto de elementos, en una estructura JSON. |
SuccessStatusJsonPath |
Cuerda | Define la ruta de acceso al mensaje de operación correcta en el JSON de respuesta. Cuando se define este parámetro, también se debe definir el parámetro . | |
SuccessStatusValue |
Cuerda | Define la ruta de acceso al valor del mensaje correcto en el JSON de respuesta. | |
IsGzipCompressed |
Booleano | Determina si la respuesta se comprime en un archivo GZIP. | |
format |
Cierto | Cuerda | Determina si el formato es , o . |
CompressionAlgo |
Cuerda | Define el algoritmo de compresión, ya sea o . Para el algoritmo de compresión GZIP, configure para en lugar de establecer un valor para este parámetro. | |
CsvDelimiter |
Cuerda | Hace referencias si el formato de respuesta es CSV y desea cambiar el delimitador CSV predeterminado de . | |
HasCsvBoundary |
Booleano | Indica si los datos CSV tienen un límite. | |
HasCsvHeader |
Booleano | Indica si los datos CSV tienen un encabezado. El valor predeterminado es . | |
CsvEscape |
Cuerda | Define un carácter de escape para un límite de campo. El valor predeterminado es . Por ejemplo, un CSV con encabezados y una fila de datos que contienen espacios como requiere el límite del campo. |
|
ConvertChildPropertiesToArray |
Booleano | Hace referencia a un caso especial en el que el servidor remoto devuelve un objeto en lugar de una lista de eventos donde cada propiedad incluye datos. |
Nota:
La especificación analiza el tipo de formato CSV.
Ejemplos de configuración de respuesta
Se espera una respuesta del servidor en formato JSON. La respuesta tiene los datos solicitados en el valor de la propiedad. El estado de la propiedad de respuesta indica que se ingieren los datos solo si el valor es .
"response": {
"EventsJsonPaths ": ["$.value"],
"format": "json",
"SuccessStatusJsonPath": "$.status",
"SuccessStatusValue": "success",
"IsGzipCompressed": true
}
La respuesta esperada de este ejemplo se prepara para un CSV sin encabezado.
"response": {
"EventsJsonPaths ": ["$"],
"format": "csv",
"HasCsvHeader": false
}
Configuración de paginación
Cuando el origen de datos no puede enviar toda la carga de respuesta a la vez, el conector de datos CCF debe saber cómo recibir partes de los datos en páginas de respuesta. Los tipos de paginación entre los que elegir son:
| Tipo de paginación | Factor de decisión |
|---|---|
| ¿La respuesta de la API tiene vínculos a las páginas siguientes y anteriores? | |
| ¿La respuesta de la API tiene un token o cursor para las páginas siguientes y anteriores? | |
| ¿La respuesta de la API admite un parámetro para el número de objetos que se omitirán al paginar? | |
| ¿La respuesta de la API admite un parámetro para el número de objetos que se van a devolver? |
Configuración de LinkHeader o PersistentLinkHeader
El tipo de paginación más común es cuando una API de origen de datos de servidor proporciona direcciones URL a las páginas de datos siguientes y anteriores. Para obtener más información sobre la especificación de encabezado de vínculo , vea .
la paginación significa que la respuesta de la API incluye:
- Encabezado de respuesta HTTP.
- Ruta de acceso JSON para recuperar el vínculo del cuerpo de la respuesta.
-type paging tiene las mismas propiedades que , excepto que el encabezado de vínculo persiste en el almacenamiento back-end. Esta opción permite paginar vínculos entre ventanas de consulta.
Por ejemplo, algunas API no admiten las horas de inicio o las horas de finalización de consultas. En su lugar, admiten un cursor del lado servidor. Puede usar tipos de página persistentes para recordar el cursor del lado servidor. Para obtener más información, consulte ¿Qué es un cursor?.
Nota:
Solo se puede ejecutar una consulta para el conector con para evitar condiciones de carrera en el cursor del lado servidor. Este problema puede afectar a la latencia.
| Campo | Obligatorio | Tipo | Descripción |
|---|---|---|---|
LinkHeaderTokenJsonPath |
Falso | Cuerda | Use esta propiedad para indicar dónde obtener el valor en el cuerpo de la respuesta. Por ejemplo, si el origen de datos devuelve el siguiente json: , el valor es . |
PageSize |
Falso | Entero | Use esta propiedad para determinar el número de eventos por página. |
PageSizeParameterName |
Falso | Cuerda | Use este nombre de parámetro de consulta para indicar el tamaño de página. |
PagingInfoPlacement |
Falso | Cuerda | Use esta propiedad para determinar cómo se rellena la información de paginación. Acepta o . |
PagingQueryParamOnly |
Falso | Booleano | Use esta propiedad para especificar parámetros de consulta. Si se establece en true, omite todos los demás parámetros de consulta, excepto los parámetros de consulta de paginación. |
Estos son algunos ejemplos:
"paging": {
"pagingType": "LinkHeader",
"linkHeaderTokenJsonPath" : "$.metadata.links.next"
}
"paging": {
"pagingType" : "PersistentLinkHeader",
"pageSizeParameterName" : "limit",
"pageSize" : 500
}
Configurar NextPageUrl
La paginación de tipo significa que la respuesta de la API incluye un vínculo complejo en el cuerpo de la respuesta similar a , pero la dirección URL se incluye en el cuerpo de la respuesta en lugar del encabezado.
| Campo | Obligatorio | Tipo | Descripción |
|---|---|---|---|
PageSize |
Falso | Entero | Número de eventos por página. |
PageSizeParameterName |
Falso | Cuerda | Nombre del parámetro de consulta para el tamaño de página. |
NextPageUrl |
Falso | Cuerda | Campo que solo se usa si el conector es para la API de Coralogix. |
NextPageUrlQueryParameters |
Falso | Objeto | Pares clave-valor que agregan un parámetro de consulta personalizado a cada solicitud de la página siguiente. |
NextPageParaName |
Falso | Cuerda | Nombre de la página siguiente en la solicitud. |
HasNextFlagJsonPath |
Falso | Cuerda | Ruta de acceso al atributo flag. |
NextPageRequestHeader |
Falso | Cuerda | Nombre del encabezado de página siguiente en la solicitud. |
NextPageUrlQueryParametersTemplate |
Falso | Cuerda | Campo que solo se usa si el conector es para la API de Coralogix. |
PagingInfoPlacement |
Falso | Cuerda | Campo que determina cómo se rellena la información de paginación. Acepta o . |
PagingQueryParamOnly |
Falso | Booleano | Campo que determina los parámetros de consulta. Si se establece en true, omite todos los demás parámetros de consulta, excepto los parámetros de consulta de paginación. |
Ejemplo:
"paging": {
"pagingType" : "NextPageUrl",
"nextPageTokenJsonPath" : "$.data.repository.pageInfo.endCursor",
"hasNextFlagJsonPath" : "$.data.repository.pageInfo.hasNextPage",
"nextPageUrl" : "https://api.github.com/graphql",
"nextPageUrlQueryParametersTemplate" : "{'query':'query{repository(owner:\"xyz\")}"
}
Configurar NextPageToken o PersistentToken
-type pagination usa un token (un hash o un cursor) que representa el estado de la página actual. El token se incluye en la respuesta de la API y el cliente lo anexa a la siguiente solicitud para capturar la página siguiente. Este método se usa a menudo cuando el servidor necesita mantener el estado exacto entre las solicitudes.
paginación usa un token que conserva el lado servidor. El servidor recuerda el último token que recuperó el cliente y proporciona el siguiente token en las solicitudes posteriores. El cliente continúa donde se dejó, incluso si realiza nuevas solicitudes más adelante.
| Campo | Obligatorio | Tipo | Descripción |
|---|---|---|---|
PageSize |
Falso | Entero | Número de eventos por página. |
PageSizeParameterName |
Falso | Cuerda | Nombre del parámetro de consulta para el tamaño de página. |
NextPageTokenJsonPath |
Falso | Cuerda | Ruta de acceso JSON para el token de página siguiente en el cuerpo de la respuesta. |
NextPageTokenResponseHeader |
Falso | Cuerda | Campo que especifica que si está vacío, use el token en este nombre de encabezado para la página siguiente. |
NextPageParaName |
Falso | Cuerda | Campo que determina el nombre de página siguiente en la solicitud. |
HasNextFlagJsonPath |
Falso | Cuerda | Campo que define la ruta de acceso a un atributo flag al determinar si quedan más páginas en la respuesta. |
NextPageRequestHeader |
Falso | Cuerda | Campo que determina el nombre del encabezado de página siguiente en la solicitud. |
PagingInfoPlacement |
Falso | Cuerda | Campo que determina cómo se rellena la información de paginación. Acepta o . |
PagingQueryParamOnly |
Falso | Booleano | Campo que determina los parámetros de consulta. Si se establece en true, omite todos los demás parámetros de consulta, excepto los parámetros de consulta de paginación. |
Ejemplos:
"paging": {
"pagingType" : "NextPageToken",
"nextPageRequestHeader" : "ETag",
"nextPageTokenResponseHeader" : "ETag"
}
"paging": {
"pagingType" : "PersistentToken",
"nextPageParaName" : "gta",
"nextPageTokenJsonPath" : "$.alerts[-1:]._id"
}
Configurar desplazamiento
-type pagination especifica el número de páginas que se van a omitir y un límite en el número de eventos que se van a recuperar por página en la solicitud. Los clientes capturan un intervalo específico de elementos del conjunto de datos.
| Campo | Obligatorio | Tipo | Descripción |
|---|---|---|---|
PageSize |
Falso | Entero | Número de eventos por página. |
PageSizeParameterName |
Falso | Cuerda | Nombre del parámetro de consulta para el tamaño de página. |
OffsetParaName |
Falso | Cuerda | Nombre del parámetro de consulta de solicitud siguiente. El CCF calcula el valor de desplazamiento de cada solicitud (todos los eventos ingeridos + 1). |
PagingInfoPlacement |
Falso | Cuerda | Campo que determina cómo se rellena la información de paginación. Acepta o . |
PagingQueryParamOnly |
Falso | Booleano | Campo que determina los parámetros de consulta. Si se establece en true, omite todos los demás parámetros de consulta, excepto los parámetros de consulta de paginación. |
Ejemplo:
"paging": {
"pagingType": "Offset",
"offsetParaName": "offset",
"pageSize": 50,
"pagingQueryParamOnly": true,
"pagingInfoPlacement": "QueryString"
}
Configuración de CountBasedPaging
La paginación de tipo permite al cliente especificar el número de elementos que se van a devolver en la respuesta. Esta capacidad es útil para las API que admiten la paginación en función de un parámetro count como parte de la carga de respuesta.
| Campo | Obligatorio | Tipo | Descripción |
|---|---|---|---|
pageNumberParaName |
Cierto | Cuerda | Nombre de parámetro del número de página en la solicitud HTTP. |
PageSize |
Falso | Entero | Número de eventos por página. |
ZeroBasedIndexing |
Falso | Booleano | Marca que indica que el recuento está basado en cero. |
HasNextFlagJsonPath |
Falso | Cuerda | Ruta de acceso JSON de la marca en la carga de respuesta HTTP que indica que hay más páginas. |
TotalResultsJsonPath |
Falso | Cuerda | Ruta de acceso JSON del número total de resultados en la carga de respuesta HTTP. |
PageNumberJsonPath |
Falso | Cuerda | Ruta de acceso JSON del número de página en la carga de respuesta HTTP. Obligatorio si se proporciona. |
PageCountJsonPath |
Falso | Cuerda | Ruta de acceso JSON del recuento de páginas en la carga de respuesta HTTP. Obligatorio si se proporciona. |
PagingInfoPlacement |
Falso | Cuerda | Campo que determina cómo se rellena la información de paginación. Acepta o . |
PagingQueryParamOnly |
Falso | Booleano | Campo que determina los parámetros de consulta. Si se establece en true, omite todos los demás parámetros de consulta, excepto los parámetros de consulta de paginación. |
Ejemplo:
"paging": {
"pagingType" : "CountBasedPaging",
"pageNumberParaName" : "page",
"pageSize" : 10,
"zeroBasedIndexing" : true,
"hasNextFlagJsonPath" : "$.hasNext",
"totalResultsJsonPath" : "$.totalResults",
"pageNumberJsonPath" : "$.pageNumber",
"pageCountJsonPath" : "$.pageCount"
}
Configuración de DCR
| Campo | Obligatorio | Tipo | Descripción |
|---|---|---|---|
DataCollectionEndpoint |
Cierto | Cuerda | Punto final de recopilación de datos (DCE). Por ejemplo: . |
DataCollectionRuleImmutableId |
Cierto | Cuerda | Identificador inmutable de DCR. Para encontrarlo, consulte la respuesta de creación de DCR o mediante la API de DCR. |
StreamName |
Cierto | Cuerda | Este valor es el definido en el DCR. El prefijo debe comenzar por . |
Conector de datos CCF de ejemplo
Este es un ejemplo de todos los componentes del json del conector de datos CCF:
{
"kind": "RestApiPoller",
"properties": {
"connectorDefinitionName": "ConnectorDefinitionExample",
"dcrConfig": {
"streamName": "Custom-ExampleConnectorInput",
"dataCollectionEndpoint": "https://example-dce-sbsr.location.ingest.monitor.azure.com",
"dataCollectionRuleImmutableId": "dcr-32_character_hexadecimal_id"
},
"dataType": "ExampleLogs",
"auth": {
"type": "Basic",
"password": "[[parameters('username')]",
"userName": "[[parameters('password')]"
},
"request": {
"apiEndpoint": "https://rest.contoso.com/example",
"rateLimitQPS": 10,
"rateLimitConfig": {
"evaluation": {
"checkMode": "OnlyWhen429"
},
"extraction": {
"source": "CustomHeaders",
"headers": {
"limit": {
"name": "X-RateLimit-Limit",
"format": "Integer"
},
"remaining": {
"name": "X-RateLimit-Remaining",
"format": "Integer"
},
"reset": {
"name": "X-RateLimit-RetryAfter",
"format": "UnixTimeSeconds"
}
}
},
"retryStrategy": {
"useResetOrRetryAfterHeaders": true
}
},
"queryWindowInMin": 5,
"httpMethod": "POST",
"queryTimeFormat": "UnixTimestamp",
"startTimeAttributeName": "t0",
"endTimeAttributeName": "t1",
"retryCount": 3,
"timeoutInSeconds": 60,
"headers": {
"Accept": "application/json",
"User-Agent": "Example-app-agent"
}
},
"paging": {
"pagingType": "LinkHeader",
"pagingInfoPlacement": "RequestBody",
"pagingQueryParamOnly": true
},
"response": {
"eventsJsonPaths": ["$"]
}
}
}