Partilhar via


Referência do conector de dados RestApiPoller para o Codeless Connector Framework

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:

  1. Enviar credenciais para TokenEndpoint obter o token JWT, ao usar userName e password, IsCredentialsInHeaders é usado para determinar onde colocar as credenciais no pedido.

    • Se IsCredentialsInHeaders: true: Envia um cabeçalho básico de autenticação com username:password.
    • Se IsCredentialsInHeaders: false: Envia credenciais num POST corpo.
  2. Extraia o token usando JwtTokenJsonPath ou a partir do cabeçalho de resposta.

  3. 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 = from
  • EndTimeAttributeName = until
  • ApiEndpoint = 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 = interval
  • QueryTimeIntervalPrepend = 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 Link cabeç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": ["$"]
      }
   }
}