Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Pode criar um conector de dados RestApiPoller com o Codeless Connector Framework (CCF) usando este artigo como complemento à API REST Microsoft Sentinel para data connectors docs.
Cada conector de dados representa uma ligação específica de um conector de dados Microsoft Sentinel. Um conector de dados pode ter várias conexões, que buscam dados de pontos de extremidade diferentes. Pode completar o modelo de implementação do conector de dados CCF usando a configuração JSON que constrói com este artigo.
Para mais informações, consulte Criar um conector sem código para Microsoft Sentinel.
Criação ou atualização de conectores de dados
Encontre a versão mais recente da API estável ou de pré-visualização consultando as create operações ou update na documentação da API REST. A diferença entre as create operações e update é que update requer o etag valor.
PUT 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 de URI
Para mais informações sobre a versão mais recente da API, consulte Conectores de dados: criar ou atualizar parâmetros de URI.
| Nome | Descrição |
|---|---|
dataConnectorId |
O ID do conector de dados. Tem de ser um nome único, igual ao name parâmetro no corpo do pedido. |
resourceGroupName |
O nome do grupo de recursos, não diferencia maiúsculas de minúsculas. |
subscriptionId |
A ID da assinatura de destino. |
workspaceName |
O nome do espaço de trabalho, não a ID. O padrão regex é ^[A-Za-z0-9][A-Za-z0-9-]+[A-Za-z0-9]$. |
api-version |
A versão da API a utilizar para esta operação. |
Corpo do pedido
O corpo da solicitação para um RestApiPoller conector de dados CCF tem a seguinte estrutura:
{
"name": "{{dataConnectorId}}",
"kind": "RestApiPoller",
"etag": "",
"properties": {
"connectorDefinitionName": "",
"auth": {},
"request": {},
"response": {},
"paging": "",
"dcrConfig": ""
}
}
RestApiPoller
RestApiPoller é um conector de dados CCF de sondagem API que pode usar para personalizar payloads de paginação, autorização e pedido/resposta para a sua fonte de dados.
| Nome | Obrigatório | Tipo | Descrição |
|---|---|---|---|
name |
Verdade | Cordão | O nome único da ligação que corresponde ao parâmetro URI. |
kind |
Verdade | Cordão | O valor kind. Este campo deve ser definido para RestApiPoller. |
etag |
GUID | O valor etag. Este campo deve ser deixado vazio para a criação de novos conectores. Para operações de atualização, etag deve corresponder ao conector etag existente (GUID). |
|
properties.connectorDefinitionName |
Cordão | O nome do DataConnectorDefinition recurso que define a configuração da interface de utilizador do conector de dados. Para mais informações, consulte definição de conector de dados. |
|
properties.auth |
Verdade | JSON aninhado | As propriedades de autenticação para sondar os dados. Para mais informações, consulte Configuração de Autenticação. |
properties.request |
Verdade | JSON aninhado | O payload de pedido para sondar os dados, como o endpoint da API. Para mais informações, vá a Solicitar configuração. |
properties. response |
Verdade | JSON aninhado | O objeto de resposta e a mensagem aninhada que a API devolve quando esta consulta os dados. Para mais informações, consulte Configuração de Resposta. |
properties.paging |
JSON aninhado | A carga útil de paginação ao sondar os dados. Para mais informações, consulte Configuração de paginação. | |
properties.dcrConfig |
JSON aninhado | Os parâmetros necessários quando os dados são enviados para uma regra de recolha de dados (DCR). Para mais informações, consulte a configuração DCR. |
Configuração de autenticação
O CCF suporta os seguintes tipos de autenticação:
Nota
A implementação do CCF OAuth2 não suporta credenciais de certificado de cliente.
Como boa prática, use parâmetros na secção de autenticação em vez de codificar as credenciais de forma rígida. Para obter mais informações, consulte Proteger entrada confidencial.
Para criar o template de implementação, que também usa parâmetros, precisa de sair dos parâmetros nesta secção com um extra inicial [. Esta etapa permite que os parâmetros atribuam um valor com base na interação do utilizador com o conector. Para obter mais informações, consulte Caracteres de escape de expressões de modelo.
Para permitir a introdução das credenciais a partir da interface, a connectorUIConfig secção exige que introduza os parâmetros desejados em instructions. Para obter mais informações, consulte Referência de definições de conector de dados para o Codeless Connector Framework.
Autenticação básica
| Campo | Obrigatório | Tipo |
|---|---|---|
UserName |
Verdade | Cordão |
Password |
Verdade | Cordão |
Aqui está um exemplo de autenticação básica que utiliza parâmetros definidos em connectorUIconfig:
"auth": {
"type": "Basic",
"UserName": "[[parameters('username')]",
"Password": "[[parameters('password')]"
}
chave de API
| Campo | Obrigatório | Tipo | Descrição | Valor predefinido |
|---|---|---|---|---|
ApiKey |
Verdade | Cordão | Chave secreta do utilizador. | |
ApiKeyName |
Cordão | Nome do cabeçalho do URI que contém o ApiKey valor. |
Authorization |
|
ApiKeyIdentifier |
Cordão | Valor da string para prepender o token. | token |
|
IsApiKeyInPostPayload |
booleano | Valor que determina se o segredo deve ser enviado no POST corpo em vez do cabeçalho. |
false |
APIKey Exemplos de autenticação:
"auth": {
"type": "APIKey",
"ApiKey": "[[parameters('apikey')]",
"ApiKeyName": "X-MyApp-Auth-Header",
"ApiKeyIdentifier": "Bearer"
}
O resultado deste exemplo é o segredo definido a partir da entrada do utilizador enviada no seguinte cabeçalho: X-MyApp-Auth-Header: Bearer apikey.
"auth": {
"type": "APIKey",
"ApiKey": "123123123",
}
Este exemplo usa os valores padrão e resulta no seguinte cabeçalho: Authorization: token 123123123.
"auth": {
"type": "APIKey",
"ApiKey": "123123123",
"ApiKeyName": ""
}
Como ApiKeyName é explicitamente definido como "", o resultado é o seguinte cabeçalho: Authorization: 123123123.
OAuth2
O Codeless Connector Framework suporta a concessão de código de autorização OAuth 2.0 e credenciais de cliente. O tipo de concessão de Código de Autorização é utilizado por clientes confidenciais e públicos para trocar um código de autorização por um token de acesso.
Depois que o usuário retornar ao cliente por meio da URL de redirecionamento, o aplicativo obterá o código de autorização da URL e o usará para solicitar um token de acesso.
| Campo | Obrigatório | Tipo | Descrição |
|---|---|---|---|
ClientId |
Verdade. | Cordão | O ID do cliente. |
ClientSecret |
Verdade. | Cordão | O segredo do cliente. |
AuthorizationCode |
Verdade quando o grantType valor é authorization_code. |
Cordão | Se o tipo de concessão for authorization_code, este valor de campo é o código de autorização que o servidor de autenticação devolveu. |
Scope |
É verdade para o authorization_code tipo de bolsa.Opcional para o client_credentials tipo de bolsa. |
Cordão | Uma lista separada por espaços de escopos para consentimento do usuário. Para obter mais informações, consulte Escopos e permissões do OAuth2. |
RedirectUri |
Verdade quando o grantType valor é authorization_code. |
Cordão | O URL para redirecionar deve ser https://portal.azure.com/TokenAuthorize/ExtensionName/Microsoft_Azure_Security_Insights. |
GrantType |
Verdade. | Cordão | Do tipo de bolsa. Pode ser authorization_code ou client_credentials. |
TokenEndpoint |
Verdade. | Cordão | O URL para trocar código com um token válido na authorization_code concessão, ou um ID de cliente e um segredo com um token válido na client_credentials concessão. |
TokenEndpointHeaders |
Objeto | Um objeto chave/valor opcional para enviar cabeçalhos personalizados ao servidor de tokens. | |
TokenEndpointQueryParameters |
Objeto | Um objeto chave/valor opcional para enviar parâmetros de consulta personalizados ao servidor de tokens. | |
AuthorizationEndpoint |
Verdade. | Cordão | A URL para o consentimento do utilizador para o authorization_code fluxo. |
AuthorizationEndpointHeaders |
Objeto | Um objeto chave/valor opcional para enviar cabeçalhos personalizados ao servidor de autenticação. | |
AuthorizationEndpointQueryParameters |
Objeto | Um par chave/valor opcional usado num pedido de fluxo de código de autorização OAuth2. |
Pode usar o fluxo de códigos de autenticação para obter dados em nome das permissões do utilizador. Pode usar as credenciais do cliente para obter dados com permissões de aplicação. O servidor de dados concede acesso ao aplicativo. Como não há utilizador no fluxo de credenciais do cliente, não é necessário um endpoint de autorização, apenas um endpoint de token.
Aqui está um exemplo do tipo de bolsa OAuth2 authorization_code :
"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"
}
Aqui está um exemplo do tipo de bolsa OAuth2 client_credentials :
"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
A autenticação JSON Web Token (JWT) suporta a obtenção de tokens através de credenciais de nome de utilizador e palavra-passe e a sua utilização para pedidos de API.
Exemplo 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"
}
Credenciais no corpo do POST (por defeito)
"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"
}
Credenciais em cabeçalhos (autenticação 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
}
Credenciais em cabeçalhos (token de utilizador)
"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 fluxo de autenticação:
Enviar credenciais para
TokenEndpointobter o token JWT, ao usaruserNameepassword,IsCredentialsInHeadersé usado para determinar onde colocar as credenciais no pedido.- Se
IsCredentialsInHeaders: true: Envia um cabeçalho básico de autenticação comusername:password. - Se
IsCredentialsInHeaders: false: Envia credenciais numPOSTcorpo.
- Se
Extraia o token usando
JwtTokenJsonPathou a partir do cabeçalho de resposta.O cabeçalho Authorization para os tokens JWT é constante e será sempre "Authorization".
| Campo | Obrigatório | Tipo | Descrição |
|---|---|---|---|
type |
Verdade | Cordão | O tipo. Deve ser JwtToken |
userName |
Verdade (se userToken não for usado) |
Objeto | O par chave/valor para a userName credencial. Se userName e password forem enviados no pedido de cabeçalho, especifique a value propriedade com o nome de utilizador. Se userName e password forem enviados no pedido do corpo, especifique Key e Value. |
password |
Verdade (se userToken não for usado) |
Objeto | O par chave/valor para a credencial da palavra-passe. Se userName e password forem enviados no pedido de cabeçalho, especifique a value propriedade com o userName. Se userName e password forem enviados no pedido do corpo, especifique Key e Value. |
userToken |
Verdade (se userName não for usado) |
Cordão | O token de utilizador gerado pelo cliente para obter o token do sistema para autenticação. |
UserTokenPrepend |
Falso | Cordão | O valor que indica se deve colocar texto antes do token. Padrão: Bearer. |
NoAccessTokenPrepend |
Falso | booleano | Uma bandeira de acesso que indica que o token não deve anteceder nada. |
TokenEndpointHttpMethod |
Falso | Cordão | O método HTTP para o endpoint do token. Pode ser Get ou Post. A predefinição é Post. |
TokenEndpoint |
Verdade | Cordão | O endpoint URL que é usado para obter o token JWT. |
IsCredentialsInHeaders |
booleano | O valor que indica se deve enviar credenciais como um cabeçalho básico de autenticação (true) ou um POST corpo (false), é ignorado ao usar userToken. A predefinição é false. |
|
IsJsonRequest |
booleano | O valor que indica se deve enviar o pedido em JSON (cabeçalho Content-Type = application/json) ou em forma codificada (cabeçalho Content-Type = application/x-www-form-urlencoded). A predefinição é false. |
|
JwtTokenJsonPath |
Cordão | O valor que indica o JSONPath valor a usar para extrair o token da resposta. Por exemplo: $.access_token. |
|
JwtTokenInResponseHeader |
booleano | O valor que indica se deve extrair o token do cabeçalho da resposta em vez do corpo. A predefinição é false. |
|
JwtTokenHeaderName. |
Cordão | O valor que indica o nome do cabeçalho quando o token está no cabeçalho de resposta. A predefinição é Authorization. |
|
JwtTokenIdentifier |
Cordão | O identificador usado para extrair o JWT de uma cadeia de token prefixada. | |
QueryParameters |
Objeto | Os parâmetros personalizados de consulta a incluir ao enviar o pedido para o endpoint do token. | |
Headers |
Objeto | Os cabeçalhos personalizados a incluir ao enviar o pedido para o endpoint do token. | |
RequestTimeoutInSeconds |
Número inteiro | O pedido de tempo limite em segundos. O valor padrão é 100, com um valor máximo de 180. |
Nota
Limitações
- Requer autenticação por nome de utilizador e palavra-passe para aquisição de tokens
- Não suporta pedidos de token baseados em chaves API
- Não suporta autenticação personalizada de cabeçalhos (sem nome de utilizador e palavra-passe)
Solicitar configuração
A secção de pedidos define como o conector de dados CCF envia pedidos para a sua fonte de dados (por exemplo, o endpoint da API e com que frequência deve sondar esse endpoint).
| Campo | Obrigatório | Tipo | Descrição |
|---|---|---|---|
ApiEndpoint |
Verdade. | Cordão | Este campo determina a URL do servidor remoto e define o ponto final de onde se devem extrair dados. |
RateLimitQPS |
Número inteiro | Este campo define o número de chamadas ou consultas permitidas num segundo. | |
RateLimitConfig |
Objeto | Este campo define a configuração de limite de taxa para a API RESTful. Para saber mais, vejaRateLimitConfig o exemplo. |
|
QueryWindowInMin |
Número inteiro | Este campo define a janela de consulta disponível em minutos. O mínimo é 1 minuto. O padrão é 5 minutos. | |
HttpMethod |
Cordão | Este campo define o método API: GET(por defeito) ou POST. |
|
QueryTimeFormat |
Cordão | Este campo define o formato de data e hora que o endpoint (servidor remoto) espera. O CCF usa a data e a hora atuais sempre que essa variável é usada. Os valores possíveis são as constantes: UnixTimestamp, UnixTimestampInMills, ou qualquer outra representação válida da data e hora. Por exemplo: yyyy-MM-dd, MM/dd/yyyy HH:mm:ss.A predefinição é ISO 8601 UTC. |
|
RetryCount |
Inteiro (1...6) | Este campo define que os valores de 1 as tentativas de 6 to podem recuperar de uma falha. O valor predefinido é 3. |
|
TimeoutInSeconds |
Inteiro (1...180) | Este campo define o tempo limite do pedido em segundos. O valor predefinido é 20. |
|
IsPostPayloadJson |
booleano | Este campo determina se a POST carga útil está em formato JSON. O valor predefinido é false. |
|
Headers |
Objeto | Este campo inclui pares chave/valor que definem os cabeçalhos dos pedidos. | |
QueryParameters |
Objeto | Este campo inclui pares chave/valor que definem os parâmetros da consulta de pedido. | |
StartTimeAttributeName |
É verdade quando o EndTimeAttributeName valor é definido. |
Cordão | Este campo define o nome do parâmetro da consulta para a hora de início da consulta. Para saber mais, vejaStartTimeAttributeName o exemplo. |
EndTimeAttributeName |
É verdade quando StartTimeAttributeName está definido. |
Cordão | Este campo define o nome do parâmetro de consulta para o tempo de fim da consulta. |
QueryTimeIntervalAttributeName |
Cordão | Este campo é utilizado se o endpoint requer um formato especializado para consultar os dados num determinado período de tempo. Use esta propriedade com os QueryTimeIntervalPrepend parâmetros e.QueryTimeIntervalDelimiter Para saber mais, vejaQueryTimeIntervalAttributeName o exemplo. |
|
QueryTimeIntervalPrepend |
É verdade quando QueryTimeIntervalAttributeName está definido. |
Cordão | Referência QueryTimeIntervalAttributeName. |
QueryTimeIntervalDelimiter |
É verdade quando QueryTimeIntervalAttributeName está definido. |
Cordão | Referência QueryTimeIntervalAttributeName. |
QueryParametersTemplate |
Cordão | Este campo refere-se ao modelo de consulta a usar ao passar parâmetros em cenários avançados. Por exemplo: "queryParametersTemplate": "{'cid': 1234567, 'cmd': 'reporting', 'format': 'siem', 'data': { 'from': '{_QueryWindowStartTime}', 'to': '{_QueryWindowEndTime}'}, '{_APIKeyName}': '{_APIKey}'}". |
Quando a API requer parâmetros complexos, use queryParameters ou queryParametersTemplate. Estes comandos incluem algumas variáveis incorporadas.
| Variável incorporada | Para uso em queryParameters |
Para uso em queryParametersTemplate |
|---|---|---|
_QueryWindowStartTime |
Sim | Sim |
_QueryWindowEndTime |
Sim | Sim |
_APIKeyName |
Não | Sim |
_APIKey |
Não | Sim |
Exemplo de StartTimeAttributeName
Considere este exemplo:
StartTimeAttributeName=fromEndTimeAttributeName=untilApiEndpoint=https://www.example.com
A consulta enviada ao servidor remoto é: https://www.example.com?from={QueryTimeFormat}&until={QueryTimeFormat + QueryWindowInMin}.
Exemplo de QueryTimeIntervalAttributeName
Considere este exemplo:
QueryTimeIntervalAttributeName=intervalQueryTimeIntervalPrepend=time:QueryTimeIntervalDelimiter=..ApiEndpoint=https://www.example.com
A consulta enviada ao servidor remoto é: https://www.example.com?interval=time:{QueryTimeFormat}..{QueryTimeFormat + QueryWindowInMin}.
Exemplo do RateLimitConfig
Considere este exemplo:
ApiEndpoint
=
https://www.example.com.
"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
}
}
Quando a resposta inclui cabeçalhos de limite de taxa, o conector pode usar esta informação para ajustar a sua taxa de pedido.
Exemplos de pedidos que utilizam o Microsoft Graph como API de fonte de dados
Este exemplo consulta mensagens com um parâmetro de consulta de filtro. Para mais informações, 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 "
}
O exemplo anterior envia uma GET solicitação para https://graph.microsoft.com/v1.0/me/messages?filter=receivedDateTime gt {time of request} and receivedDateTime lt 2019-09-01T17:00:00.0000000. O carimbo temporal atualiza-se a cada queryWindowInMin vez.
Consegues os mesmos resultados com este exemplo:
"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}"
}
}
Há outra opção para situações em que a fonte de dados espera dois parâmetros de consulta (um para a hora de início e outro para a hora de fim).
Exemplo:
"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 opção envia um GET pedido para https://graph.microsoft.com/me/calendarView?startDateTime=2019-09-01T09:00:00.0000000&endDateTime=2019-09-01T17:00:00.0000000.
Para consultas complexas, use QueryParametersTemplate. Este exemplo envia um POST pedido com parâmetros no corpo:
"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}))\"}"
}
Configuração de resposta
Defina como o seu conector de dados gere as respostas usando os seguintes parâmetros:
| Campo | Obrigatório | Tipo | Descrição |
|---|---|---|---|
EventsJsonPaths |
Verdade | Lista de cadeias | Define o caminho para a mensagem no JSON de resposta. Uma expressão de caminho JSON especifica um caminho para um elemento, ou um conjunto de elementos, numa estrutura JSON. |
SuccessStatusJsonPath |
Cordão | Define o caminho para a mensagem de sucesso na resposta JSON. Quando este parâmetro é definido, o SuccessStatusValue parâmetro também deve ser definido. |
|
SuccessStatusValue |
Cordão | Define o caminho para o valor da mensagem de sucesso no JSON de resposta. | |
IsGzipCompressed |
booleano | Determina se a resposta está comprimida num ficheiro GZIP. | |
format |
Verdade | Cordão | Determina se o formato é json, csv, ou xml. |
CompressionAlgo |
Cordão | Define o algoritmo de compressões, seja multi-gzip ou deflate. Para o algoritmo de compressão GZIP, configure IsGzipCompressed para True em vez de definir um valor para este parâmetro. |
|
CsvDelimiter |
Cordão | Referências se o formato da resposta for CSV e quiser alterar o delimitador padrão de CSV de ",". |
|
HasCsvBoundary |
booleano | Indica se os dados do CSV têm um limite. | |
HasCsvHeader |
booleano | Indica se os dados CSV têm um cabeçalho. A predefinição é True. |
|
CsvEscape |
Cordão | Define um carácter de escape para uma fronteira de campo. A predefinição é "Por exemplo, um CSV com cabeçalhos id,name,avg e uma linha de dados contendo espaços como 1,"my name",5.5 requer o limite do " campo. |
|
ConvertChildPropertiesToArray |
booleano | Faz referência a um caso especial em que o servidor remoto devolve um objeto em vez de uma lista de eventos onde cada propriedade inclui dados. |
Nota
O tipo de formato CSV é analisado pela RFC4180 especificação.
Exemplos de configuração de resposta
Espera-se uma resposta do servidor em formato JSON. A resposta tem os dados solicitados no valor da propriedade. O status da propriedade
"response": {
"EventsJsonPaths ": ["$.value"],
"format": "json",
"SuccessStatusJsonPath": "$.status",
"SuccessStatusValue": "success",
"IsGzipCompressed": true
}
A resposta esperada neste exemplo se prepara para um CSV sem cabeçalho.
"response": {
"EventsJsonPaths ": ["$"],
"format": "csv",
"HasCsvHeader": false
}
Configuração de paginação
Quando a fonte de dados não pode enviar toda a carga útil de resposta de uma só vez, o conector de dados CCF precisa saber como receber partes dos dados nas páginas de resposta. Os tipos de paginação a escolher são:
| Tipo de paginação | Fator de decisão |
|---|---|
| A resposta da API tem ligações para as páginas seguintes e anteriores? | |
| A resposta da API tem um token ou cursor para as páginas seguintes e anteriores? | |
| A resposta da API suporta um parâmetro para o número de objetos a serem ignorados durante a paginação? | |
| A resposta da API suporta um parâmetro para o número de objetos a serem retornados? |
Configurar LinkHeader ou PersistentLinkHeader
O tipo de paginação mais comum é quando uma API de fonte de dados do servidor fornece URLs para as páginas de dados seguintes e anteriores. Para mais informações sobre a especificação Link Header , veja RFC 5988.
LinkHeader paginação significa que a resposta da API inclui:
- O
Linkcabeçalho de resposta HTTP. - Um caminho JSON para recuperar a ligação do corpo de resposta.
PersistentLinkHeadera paginação de tipo -tem as mesmas propriedades que LinkHeader, exceto que o cabeçalho do link persiste no armazenamento de back-end. Esta opção permite links de paginação entre janelas de consulta.
Por exemplo, algumas APIs não suportam horários de início ou de término de consultas. Em vez disso, eles suportam um cursor do lado do servidor. Podes usar tipos de página persistentes para memorizar o cursor do lado do servidor. Para obter mais informações, consulte O que é um cursor?.
Nota
Apenas uma consulta para o conector pode ser executada PersistentLinkHeader para evitar condições de corrida no cursor do lado do servidor. Este problema pode afetar a latência.
| Campo | Obrigatório | Tipo | Descrição |
|---|---|---|---|
LinkHeaderTokenJsonPath |
Falso | Cordão | Use essa propriedade para indicar onde obter o valor no corpo da resposta. Por exemplo, se a fonte de dados devolver o seguinte JSON: { nextPage: "foo", value: [{data}]}, o LinkHeaderTokenJsonPath valor é $.nextPage. |
PageSize |
Falso | Número inteiro | Use esta propriedade para determinar o número de eventos por página. |
PageSizeParameterName |
Falso | Cordão | Use este nome do parâmetro de consulta para indicar o tamanho da página. |
PagingInfoPlacement |
Falso | Cordão | Use esta propriedade para determinar como a informação de paginação é preenchida. Aceita ou QueryStringRequestBodyou. |
PagingQueryParamOnly |
Falso | booleano | Use esta propriedade para especificar parâmetros de consulta. Se definido como verdadeiro, omite todos os outros parâmetros de consulta, exceto os parâmetros de paginação. |
Seguem-se alguns exemplos:
"paging": {
"pagingType": "LinkHeader",
"linkHeaderTokenJsonPath" : "$.metadata.links.next"
}
"paging": {
"pagingType" : "PersistentLinkHeader",
"pageSizeParameterName" : "limit",
"pageSize" : 500
}
Configurar NextPageUrl
NextPageUrlpaginação do tipo -significa que a resposta da API inclui uma ligação complexa no corpo da resposta semelhante a LinkHeader, mas a URL está incluída no corpo da resposta em vez do cabeçalho.
| Campo | Obrigatório | Tipo | Descrição |
|---|---|---|---|
PageSize |
Falso | Número inteiro | O número de eventos por página. |
PageSizeParameterName |
Falso | Cordão | O nome do parâmetro de consulta corresponde ao tamanho da página. |
NextPageUrl |
Falso | Cordão | Campo que só é usado se o conector for para a API Coralogix. |
NextPageUrlQueryParameters |
Falso | Objeto | Pares chave/valor que adicionam um parâmetro de consulta personalizado a cada pedido para a página seguinte. |
NextPageParaName |
Falso | Cordão | O nome da página seguinte no pedido. |
HasNextFlagJsonPath |
Falso | Cordão | O atributo caminho para a HasNextPage bandeira. |
NextPageRequestHeader |
Falso | Cordão | O nome do cabeçalho da página seguinte no pedido. |
NextPageUrlQueryParametersTemplate |
Falso | Cordão | Campo que só é usado se o conector for para a API Coralogix. |
PagingInfoPlacement |
Falso | Cordão | Campo que determina como a informação de paginação é preenchida. Aceita ou QueryStringRequestBodyou. |
PagingQueryParamOnly |
Falso | booleano | Campo que determina parâmetros de consulta. Se definido como verdadeiro, omite todos os outros parâmetros de consulta, exceto os parâmetros de paginação. |
Exemplo:
"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 ou PersistentToken
NextPageTokena paginação do tipo -usa um token (um hash ou cursor) que representa o estado da página atual. O token é incluído na resposta da API e o cliente adiciona-o ao próximo pedido para obter a página seguinte. Esse método é freqüentemente usado quando o servidor precisa manter o estado exato entre as solicitações.
PersistentToken A paginação usa um token que persiste no lado do servidor. O servidor lembra-se do último token que o cliente recuperou e fornece o token seguinte em pedidos subsequentes. O cliente continua de onde parou, mesmo que faça novos pedidos mais tarde.
| Campo | Obrigatório | Tipo | Descrição |
|---|---|---|---|
PageSize |
Falso | Número inteiro | Número de eventos por página. |
PageSizeParameterName |
Falso | Cordão | Consulta o nome do parâmetro para o tamanho da página. |
NextPageTokenJsonPath |
Falso | Cordão | Caminho JSON para o token de página seguinte no corpo da resposta. |
NextPageTokenResponseHeader |
Falso | Cordão | Campo que especifica que, se NextPageTokenJsonPath estiver vazio, use o token neste nome de cabeçalho para a página seguinte. |
NextPageParaName |
Falso | Cordão | Campo que determina o nome da página seguinte no pedido. |
HasNextFlagJsonPath |
Falso | Cordão | Campo que define o caminho para um HasNextPage atributo flag ao determinar se restam mais páginas na resposta. |
NextPageRequestHeader |
Falso | Cordão | Campo que determina o nome do cabeçalho da próxima página no pedido. |
PagingInfoPlacement |
Falso | Cordão | Campo que determina como a informação de paginação é preenchida. Aceita ou QueryStringRequestBodyou. |
PagingQueryParamOnly |
Falso | booleano | Campo que determina parâmetros de consulta. Se definido como verdadeiro, omite todos os outros parâmetros de consulta, exceto os parâmetros de paginação. |
Exemplos:
"paging": {
"pagingType" : "NextPageToken",
"nextPageRequestHeader" : "ETag",
"nextPageTokenResponseHeader" : "ETag"
}
"paging": {
"pagingType" : "PersistentToken",
"nextPageParaName" : "gta",
"nextPageTokenJsonPath" : "$.alerts[-1:]._id"
}
Configurar deslocamento
Offseta paginação do tipo -especifica o número de páginas a saltar e um limite para o número de eventos a recuperar por página no pedido. Os clientes buscam um intervalo específico de itens do conjunto de dados.
| Campo | Obrigatório | Tipo | Descrição |
|---|---|---|---|
PageSize |
Falso | Número inteiro | Número de eventos por página. |
PageSizeParameterName |
Falso | Cordão | Consulta o nome do parâmetro para o tamanho da página. |
OffsetParaName |
Falso | Cordão | O nome do parâmetro de consulta da próxima solicitação. O CCF calcula o valor de deslocamento para cada pedido (todos os eventos ingeridos + 1). |
PagingInfoPlacement |
Falso | Cordão | Campo que determina como a informação de paginação é preenchida. Aceita ou QueryStringRequestBodyou. |
PagingQueryParamOnly |
Falso | booleano | Campo que determina parâmetros de consulta. Se definido como verdadeiro, omite todos os outros parâmetros de consulta, exceto os parâmetros de paginação. |
Exemplo:
"paging": {
"pagingType": "Offset",
"offsetParaName": "offset",
"pageSize": 50,
"pagingQueryParamOnly": true,
"pagingInfoPlacement": "QueryString"
}
Configurar CountBasedPaging
CountBasedPaginga paginação do tipo -permite ao cliente especificar o número de itens a devolver na resposta. Esta funcionalidade é útil para APIs que suportam paginação baseada num parâmetro de contagem como parte da carga útil de resposta.
| Campo | Obrigatório | Tipo | Descrição |
|---|---|---|---|
pageNumberParaName |
Verdade | Cordão | Nome do parâmetro do número da página no pedido HTTP. |
PageSize |
Falso | Número inteiro | Número de eventos por página. |
ZeroBasedIndexing |
Falso | booleano | Bandeira que indica que a contagem é baseada em zero. |
HasNextFlagJsonPath |
Falso | Cordão | O caminho JSON do flag no payload de resposta HTTP indica que há mais páginas. |
TotalResultsJsonPath |
Falso | Cordão | O caminho JSON do número total resulta na carga útil de resposta HTTP. |
PageNumberJsonPath |
Falso | Cordão | O caminho JSON do número de página na carga útil de resposta HTTP. Obrigatório se totalResultsJsonPath for fornecido. |
PageCountJsonPath |
Falso | Cordão | O caminho JSON da contagem de páginas na carga útil de resposta HTTP. Obrigatório se totalResultsJsonPath for fornecido. |
PagingInfoPlacement |
Falso | Cordão | Campo que determina como a informação de paginação é preenchida. Aceita ou QueryStringRequestBodyou. |
PagingQueryParamOnly |
Falso | booleano | Campo que determina parâmetros de consulta. Se definido como verdadeiro, omite todos os outros parâmetros de consulta, exceto os parâmetros de paginação. |
Exemplo:
"paging": {
"pagingType" : "CountBasedPaging",
"pageNumberParaName" : "page",
"pageSize" : 10,
"zeroBasedIndexing" : true,
"hasNextFlagJsonPath" : "$.hasNext",
"totalResultsJsonPath" : "$.totalResults",
"pageNumberJsonPath" : "$.pageNumber",
"pageCountJsonPath" : "$.pageCount"
}
Configuração DCR
| Campo | Obrigatório | Tipo | Descrição |
|---|---|---|---|
DataCollectionEndpoint |
Verdade | Cordão | Ponto de extremidade de recolha de dados (DCE). Por exemplo: https://example.ingest.monitor.azure.com. |
DataCollectionRuleImmutableId |
Verdade | Cordão | O ID IMUTÁVEL DCR. Encontre-o visualizando a resposta de criação do DCR ou usando a API do DCR. |
StreamName |
Verdade | Cordão | Este valor é o streamDeclaration definido no DCR. O prefixo deve começar por Custom-. |
Exemplo de conector de dados CCF
Aqui está um exemplo de todos os componentes do conector de dados CCF JSON:
{
"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": ["$"]
}
}
}