Справочник по соединителю данных RestApiPoller для платформы соединителей без кода

Вы можете создать RestApiPoller соединитель данных с помощью платформы соединителей без кода (CCF), используя эту статью в качестве дополнения к документации по MICROSOFT SENTINEL REST API для соединителей данных.

Каждый соединитель данных представляет определенное подключение соединителя данных Microsoft Sentinel. Один соединитель данных может иметь несколько подключений, которые извлекает данные из разных конечных точек. Шаблон развертывания для соединителя данных CCF можно завершить с помощью конфигурации JSON, созданной в этой статье.

Дополнительные сведения см. в статье Создание соединителя без кода для Microsoft Sentinel.

Создание или обновление соединителей данных

Найдите последнюю стабильную или предварительную версию API, ссылаясь create на операции или update в документации по REST API. Разница между операциями и create заключается в update том, что update требуется etag значение .

PUT Метод:

https://management.azure.com/subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroupName}}/providers/Microsoft.OperationalInsights/workspaces/{{workspaceName}}/providers/Microsoft.SecurityInsights/dataConnectors/{{dataConnectorId}}?api-version={{apiVersion}}

Параметры URI

Дополнительные сведения о последней версии API см. в разделе Соединители данных: создание или обновление параметров URI.

Имя Описание
dataConnectorId Идентификатор соединителя данных. Это должно быть уникальное имя, совпадающее с параметром name в тексте запроса.
resourceGroupName Имя группы ресурсов без учета регистра.
subscriptionId Идентификатор целевой подписки.
workspaceName Имя рабочей области, а не идентификатор.
Шаблон регулярного выражения — ^[A-Za-z0-9][A-Za-z0-9-]+[A-Za-z0-9]$.
api-version Версия API, используемая для этой операции.

Текст запроса

Текст запроса для соединителя RestApiPoller данных CCF имеет следующую структуру:

{
   "name": "{{dataConnectorId}}",
   "kind": "RestApiPoller",
   "etag": "",
   "properties": {
        "connectorDefinitionName": "",
        "auth": {},
        "request": {},
        "response": {},
        "paging": "",
        "dcrConfig": ""
   }
}

RestApiPoller

RestApiPoller — это соединитель данных CCF опроса API, который можно использовать для настройки разбиения на страницы, авторизации и полезных данных запроса и ответа для источника данных.

Имя Обязательный Тип Описание
name Верно String Уникальное имя подключения, соответствующее параметру URI.
kind Верно String Значение kind . Для этого поля должно быть задано значение RestApiPoller.
etag GUID Значение etag . Это поле должно быть оставлено пустым для создания нового соединителя. Для операций etag обновления должен соответствовать существующему соединителю etag (GUID).
properties.connectorDefinitionName String Имя ресурса, определяющего DataConnectorDefinition конфигурацию пользовательского интерфейса соединителя данных. Дополнительные сведения см. в статье Определение соединителя данных.
properties.auth Верно Вложенный JSON Свойства проверки подлинности для опроса данных. Дополнительные сведения см. в разделе Настройка проверки подлинности.
properties.request Верно Вложенный JSON Полезные данные запроса для опроса данных, например конечная точка API. Дополнительные сведения см. в разделе Настройка запроса.
properties. response Верно Вложенный JSON Объект ответа и вложенное сообщение API возвращает при опросе данных. Дополнительные сведения см. в разделе Настройка ответа.
properties.paging Вложенный JSON Полезные данные разбиения на страницы при опросе данных. Дополнительные сведения см. в разделе Конфигурация разбиения на страницы.
properties.dcrConfig Вложенный JSON Обязательные параметры при отправке данных в правило сбора данных (DCR). Дополнительные сведения см. в разделе Конфигурация DCR.

Конфигурация проверки подлинности

CCF поддерживает следующие типы проверки подлинности:

Примечание.

Реализация CCF OAuth2 не поддерживает учетные данные сертификата клиента.

Рекомендуется использовать параметры в разделе проверки подлинности, а не жестко кодировать учетные данные. Дополнительные сведения см. в разделе Безопасные конфиденциальные входные данные.

Чтобы создать шаблон развертывания, в котором также используются параметры, необходимо экранировать параметры в этом разделе с дополнительным запуском [. Этот шаг позволяет параметрам назначать значение на основе взаимодействия пользователя с соединителем. Дополнительные сведения см. в разделе Escape-символы выражений шаблонов.

Чтобы включить ввод учетных данных из пользовательского интерфейса, в connectorUIConfig разделе необходимо ввести нужные параметры в instructions. Дополнительные сведения см. в справочнике по определениям соединителей данных для платформы соединителей без кода.

Обычная проверка подлинности

Поле Обязательный Тип
UserName Верно String
Password Верно String

Ниже приведен пример обычной проверки подлинности, в котором используются параметры, определенные в connectorUIconfig:

"auth": {
    "type": "Basic",
    "UserName": "[[parameters('username')]",
    "Password": "[[parameters('password')]"
}

Ключ API

Поле Обязательный Тип Описание Значение по умолчанию
ApiKey Верно String Секретный ключ пользователя.
ApiKeyName String Имя заголовка URI, содержащего ApiKey значение. Authorization
ApiKeyIdentifier String Строковое значение для добавления маркера. token
IsApiKeyInPostPayload Логический Значение, определяющее, следует ли отправлять секрет в тексте POST вместо заголовка. false

APIKey Примеры проверки подлинности:

"auth": {
    "type": "APIKey",
    "ApiKey": "[[parameters('apikey')]",
    "ApiKeyName": "X-MyApp-Auth-Header",
    "ApiKeyIdentifier": "Bearer"
}

Результатом этого примера является секрет, определенный из пользовательских входных данных, отправленных в следующем заголовке: X-MyApp-Auth-Header: Bearer apikey.

"auth": { 
    "type": "APIKey",
    "ApiKey": "123123123",
}

В этом примере используются значения по умолчанию и выводится следующий заголовок: Authorization: token 123123123.

"auth": { 
    "type": "APIKey",
    "ApiKey": "123123123",
    "ApiKeyName": ""
}

Так как ApiKeyName явно задано значение "", результатом будет следующий заголовок: Authorization: 123123123.

OAuth2

Платформа соединителя без кода поддерживает предоставление кода авторизации OAuth 2.0 и учетные данные клиента. Тип предоставления кода авторизации используется конфиденциальными и общедоступными клиентами для обмена кодом авторизации на маркер доступа.

После того как пользователь вернется к клиенту через URL-адрес перенаправления, приложение получит код авторизации из URL-адреса и будет использовать его для запроса маркера доступа.

Поле Обязательный Тип Описание
ClientId Верно. String Идентификатор клиента.
ClientSecret Верно. String Секрет клиента.
AuthorizationCode Значение true, grantType если значение равно authorization_code. String Если тип предоставления — authorization_code, это значение поля является кодом авторизации, возвращенным сервером проверки подлинности.
Scope Значение true для типа предоставления authorization_code .
Необязательный параметр для client_credentials типа предоставления.
String Разделенный пробелами список областей для согласия пользователя. Дополнительные сведения см. в разделе Области и разрешения OAuth2.
RedirectUri Значение true, grantType если значение равно authorization_code. String URL-адрес перенаправления должен иметь значение https://portal.azure.com/TokenAuthorize/ExtensionName/Microsoft_Azure_Security_Insights.
GrantType Верно. String Тип предоставления. Допустимые значения: authorization_code и client_credentials.
TokenEndpoint Верно. String URL-адрес для обмена кодом с допустимым маркером в authorization_code предоставлении или идентификатором и секретом клиента с допустимым маркером client_credentials в предоставлении.
TokenEndpointHeaders Объект Необязательный объект "ключ-значение" для отправки пользовательских заголовков на сервер маркеров.
TokenEndpointQueryParameters Объект Необязательный объект "ключ-значение" для отправки настраиваемых параметров запроса на сервер маркеров.
AuthorizationEndpoint Верно. String URL-адрес согласия пользователя для authorization_code потока.
AuthorizationEndpointHeaders Объект Необязательный объект "ключ-значение" для отправки пользовательских заголовков на сервер проверки подлинности.
AuthorizationEndpointQueryParameters Объект Необязательная пара "ключ-значение", используемая в запросе потока кода авторизации OAuth2.

Поток кода проверки подлинности можно использовать для получения данных от имени разрешений пользователя. Учетные данные клиента можно использовать для получения данных с разрешениями приложения. Сервер данных предоставляет доступ к приложению. Так как в потоке учетных данных клиента нет пользователя, конечная точка авторизации не требуется, только конечная точка маркера.

Ниже приведен пример типа предоставления 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"
}

Ниже приведен пример типа предоставления 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

Проверка подлинности веб-маркера JSON (JWT) поддерживает получение маркеров с помощью учетных данных имени пользователя и пароля и их использование для запросов API.

Основной
"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"
}
Учетные данные в тексте POST (по умолчанию)
"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"
}
Учетные данные в заголовках (обычная проверка подлинности)
"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
}
Учетные данные в заголовках (маркер пользователя)
"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"
}

Следуйте этому потоку проверки подлинности:

  1. Отправка учетных TokenEndpoint данных в для получения маркера JWT при использовании userName и passwordиспользуется IsCredentialsInHeaders для определения места для ввода учетных данных в запросе.

    • Если IsCredentialsInHeaders: true: отправляет базовый заголовок проверки подлинности с username:password.
    • Если IsCredentialsInHeaders: false: отправляет учетные данные в тексте POST .
  2. Извлеките маркер с помощью JwtTokenJsonPath или из заголовка ответа.

  3. Заголовок Authorization для маркеров JWT является константой и всегда будет иметь значение "Authorization".

Поле Обязательный Тип Описание
type Верно String Тип. Необходимое значение — JwtToken.
userName True (если userToken не используется) Объект Пара "ключ-значение" для учетных userName данных. Если userName и password отправляются в запросе заголовка value , укажите свойство с именем пользователя. Если userName и password отправляются в основном запросе, укажите Key и Value.
password True (если userToken не используется) Объект Пара "ключ-значение" для учетных данных пароля. Если userName и password отправляются в запросе заголовка value , укажите свойство с помощью userName. Если userName и password отправляются в основном запросе, укажите Key и Value.
userToken True (если userName не используется) String Маркер пользователя, созданный клиентом для получения системного маркера для проверки подлинности.
UserTokenPrepend Неверно String Значение, указывающее, следует ли добавлять текст перед маркером. Значение по умолчанию: Bearer.
NoAccessTokenPrepend Неверно Логический Флаг доступа, указывающий, что маркер не должен ничего предшествовать.
TokenEndpointHttpMethod Неверно String Метод HTTP для конечной точки токена. Это может быть Get или Post. Значение по умолчанию: Post.
TokenEndpoint Верно String Конечная точка URL-адреса, используемая для получения маркера JWT.
IsCredentialsInHeaders Логический Значение, указывающее, следует ли отправлять учетные данные в качестве базового заголовка проверки подлинности (true) или текста (POST), игнорируемого false при использовании userToken. Значение по умолчанию: false.
IsJsonRequest Логический Значение, указывающее, следует ли отправлять запрос в формате JSON (заголовок Content-Type = application/json) или в кодировке формы (заголовок Content-Type = application/x-www-form-urlencoded). Значение по умолчанию: false.
JwtTokenJsonPath String Значение, указывающее JSONPath значение, используемое для извлечения маркера из ответа. Пример: $.access_token.
JwtTokenInResponseHeader Логический Значение, указывающее, следует ли извлекать маркер из заголовка ответа по сравнению с текстом. Значение по умолчанию: false.
JwtTokenHeaderName. String Значение, указывающее имя заголовка, когда маркер находится в заголовке ответа. Значение по умолчанию: Authorization.
JwtTokenIdentifier String Идентификатор, используемый для извлечения JWT из строки маркера с префиксом.
QueryParameters Объект Настраиваемые параметры запроса, которые включаются при отправке запроса к конечной точке маркера.
Headers Объект Пользовательские заголовки, которые необходимо включить при отправке запроса к конечной точке маркера.
RequestTimeoutInSeconds Integer Время ожидания запроса в секундах. Значение по умолчанию — 100, с максимальным значением 300.

Примечание.

Ограничения

  • Требуется проверка подлинности имени пользователя и пароля для получения маркера
  • Не поддерживает запросы маркеров на основе ключа API
  • Не поддерживает пользовательскую проверку подлинности заголовка (без имени пользователя и пароля)

Конфигурация запроса

Раздел запроса определяет, как соединитель данных CCF отправляет запросы к источнику данных (например, конечная точка API и как часто опрашивает ее).

Поле Обязательный Тип Описание
ApiEndpoint Верно. String Это поле определяет URL-адрес удаленного сервера и конечную точку, из которой будут извлекаться данные.
RateLimitQPS Integer Это поле определяет количество вызовов или запросов, разрешенных в секунду для первоначального запроса. Он не применяется к запросам с разбивкой на страницы. Чтобы регулировать разбиение на страницы, также задайте .PaginatedCallsPerSecond
PaginatedCallsPerSecond Двойной (0...1000) Это поле определяет количество вызовов в секунду, разрешенное для запросов с разбивкой на страницы к API RESTful. Он вводит задержку в миллисекундах (1000 / paginatedCallsPerSecond) между каждым вызовом API с разбивкой на страницы. Это регулирование применяется только к запросам на страницы и отделяется от RateLimitQPS, который управляет начальной скоростью запросов. Как правило, для этого значения задается то же значение, что и RateLimitQPS для соблюдения ограничения скорости источника данных во всех запросах. 0 значение означает, что регулирование разбиения на страницы не применяется.
RateLimitConfig Объект Это поле определяет конфигурацию ограничения скорости для API RESTful. Дополнительные сведения см. в RateLimitConfig примере.
QueryWindowInMin Integer Это поле определяет доступное окно запроса в минутах. Минимальное значение — 1 минута. Значение по умолчанию — 5 минут.
HttpMethod String Это поле определяет метод API: GET(по умолчанию) или POST.
QueryTimeFormat String Это поле определяет формат даты и времени, который ожидает конечная точка (удаленный сервер). CCF использует текущую дату и время, где используется эта переменная. Возможными значениями являются константы: UnixTimestamp, UnixTimestampInMillsили любое другое допустимое представление даты и времени. Например, yyyy-MM-dd. MM/dd/yyyy HH:mm:ss
Значение по умолчанию: ISO 8601 UTC.
RetryCount Целое число (1...6) Это поле определяет, что значения для повторных 16 попыток могут восстанавливаться после сбоя. Значение по умолчанию — 3.
TimeoutInSeconds Целое число (1...300) Это поле определяет время ожидания запроса в секундах. Значение по умолчанию — 20.
IsPostPayloadJson Логический Это поле определяет, имеет ли полезные POST данные формат JSON. Значение по умолчанию — false.
Headers Объект Это поле содержит пары "ключ-значение", определяющие заголовки запроса.
QueryParameters Объект Это поле содержит пары "ключ-значение", определяющие параметры запроса.
StartTimeAttributeName Значение true, EndTimeAttributeName если задано значение. String Это поле определяет имя параметра запроса для времени начала запроса. Дополнительные сведения см. в StartTimeAttributeName примере.
EndTimeAttributeName Значение True, если StartTimeAttributeName задано значение . String Это поле определяет имя параметра запроса для времени окончания запроса.
QueryTimeIntervalAttributeName String Это поле используется, если для конечной точки требуется специализированный формат для запроса данных за определенный период времени. Используйте это свойство с параметрами QueryTimeIntervalPrepend и QueryTimeIntervalDelimiter . Дополнительные сведения см. в QueryTimeIntervalAttributeName примере.
QueryTimeIntervalPrepend Значение True, если QueryTimeIntervalAttributeName задано значение . String Ссылка .QueryTimeIntervalAttributeName
QueryTimeIntervalDelimiter Значение True, если QueryTimeIntervalAttributeName задано значение . String Ссылка .QueryTimeIntervalAttributeName
QueryParametersTemplate String Это поле ссылается на шаблон запроса, используемый при передаче параметров в расширенных сценариях.

Пример: "queryParametersTemplate": "{'cid': 1234567, 'cmd': 'reporting', 'format': 'siem', 'data': { 'from': '{_QueryWindowStartTime}', 'to': '{_QueryWindowEndTime}'}, '{_APIKeyName}': '{_APIKey}'}".
InitialCheckpointTimeUtc Дата и время (в формате UTC) Указывает время начала запроса для самого первого опроса, когда не существует хранимой контрольной точки. После сохранения контрольной точки после первого успешного опроса это значение игнорируется. Этот параметр вступает в силу только в том случае, если конфигурация запроса соединителя определяет параметр запроса во время начала (например startTimeAttributeName , или {_QueryWindowStartTime} маркер замены) без соответствующего параметра времени окончания. Он не влияет на соединители, которые используют исключительно курсоры или маркеры разбиения на страницы. Формат: iso 8601 UTC datetime (например, 2024-01-15T00:00:00Z).

Если API требует сложных параметров, используйте queryParameters или queryParametersTemplate. Эти команды включают некоторые встроенные переменные.

Встроенная переменная Для использования в queryParameters Для использования в queryParametersTemplate
_QueryWindowStartTime Да Да
_QueryWindowEndTime Да Да
_APIKeyName Нет Да
_APIKey Нет Да

Пример StartTimeAttributeName

Рассмотрим следующий пример:

  • StartTimeAttributeName = from
  • EndTimeAttributeName = until
  • ApiEndpoint = https://www.example.com

Запрос, отправляемый на удаленный сервер: https://www.example.com?from={QueryTimeFormat}&until={QueryTimeFormat + QueryWindowInMin}.

Пример QueryTimeIntervalAttributeName

Рассмотрим следующий пример:

  • QueryTimeIntervalAttributeName = interval
  • QueryTimeIntervalPrepend = time:
  • QueryTimeIntervalDelimiter = ..
  • ApiEndpoint = https://www.example.com

Запрос, отправляемый на удаленный сервер: https://www.example.com?interval=time:{QueryTimeFormat}..{QueryTimeFormat + QueryWindowInMin}.

Пример RateLimitConfig

Рассмотрим следующий пример:

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
  }
}

Если ответ содержит заголовки ограничения скорости, соединитель может использовать эти сведения для настройки частоты запросов.

Примеры запросов, которые используют Microsoft Graph в качестве API источника данных

В этом примере сообщения запрашивают с помощью параметра запроса фильтра. Дополнительные сведения см. в разделе Параметры запроса Microsoft API Graph.

"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 "
}

В предыдущем примере запрос отправляется GET в https://graph.microsoft.com/v1.0/me/messages?filter=receivedDateTime gt {time of request} and receivedDateTime lt 2019-09-01T17:00:00.0000000. Метка времени обновляется для каждого queryWindowInMin раза.

Те же результаты можно получить в следующем примере:

"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}"
  }
}

Существует еще один вариант для ситуаций, когда источник данных ожидает два параметра запроса (один для времени начала и один для времени окончания).

Пример:

"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",
}

Этот параметр отправляет GET запрос в https://graph.microsoft.com/me/calendarView?startDateTime=2019-09-01T09:00:00.0000000&endDateTime=2019-09-01T17:00:00.0000000.

Для сложных запросов используйте .QueryParametersTemplate В этом примере отправляется POST запрос с параметрами в тексте:

"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}))\"}"
}

Конфигурация ответа

Определите, как соединитель данных обрабатывает ответы, используя следующие параметры:

Поле Обязательный Тип Описание
EventsJsonPaths Верно Список строк Определяет путь к сообщению в json-файле ответа. Выражение пути JSON указывает путь к элементу или набору элементов в структуре JSON.
SuccessStatusJsonPath String Определяет путь к сообщению об успешном выполнении в ответе JSON. При определении SuccessStatusValue этого параметра также должен быть определен параметр .
SuccessStatusValue String Определяет путь к значению сообщения об успешном выполнении в ответе JSON.
IsGzipCompressed Логический Определяет, сжимается ли ответ в GZIP-файле.
format Верно String Определяет, является jsonли формат , csvили xml.
CompressionAlgo String Определяет алгоритм сжатия, либо multi-gzipdeflate. Для алгоритма сжатия GZIP настройте IsGzipCompressedTrue значение для вместо того, чтобы задавать значение для этого параметра.
CsvDelimiter String Ссылается, если формат ответа имеет формат CSV, и вы хотите изменить разделитель ","CSV по умолчанию для .
HasCsvBoundary Логический Указывает, имеет ли данные CSV границу.
HasCsvHeader Логический Указывает, есть ли у данных CSV заголовок. Значение по умолчанию: True.
CsvEscape String Определяет escape-символ для границы поля. Значение по умолчанию — "

Например, csv с заголовками и строкой данных, содержащей такие пробелы id,name,avg , требует 1,"my name",5.5 границы " поля.
ConvertChildPropertiesToArray Логический Ссылается на особый случай, в котором удаленный сервер возвращает объект, а не список событий, где каждое свойство содержит данные.

Примечание.

Тип формата CSV анализируется спецификацией RFC4180 .

Примеры конфигурации ответа

Ожидается ответ сервера в формате JSON. Ответ содержит запрошенные данные в значении свойства . Состояние свойства ответа указывает на прием данных только в том случае, если значение равно success.

"response": {
  "EventsJsonPaths ": ["$.value"],
  "format": "json",
  "SuccessStatusJsonPath": "$.status",
  "SuccessStatusValue": "success",
  "IsGzipCompressed": true
 }

Ожидаемый ответ в этом примере подготавливает csv-файл без заголовка.

"response": {
  "EventsJsonPaths ": ["$"],
  "format": "csv",
  "HasCsvHeader": false
 }

Конфигурация разбиения по страницам

Если источник данных не может отправить все полезные данные ответа одновременно, соединитель данных CCF должен знать, как получать части данных на страницах ответов. Типы разбиения на разбиение:

Тип разбиения по страницам Фактор принятия решений
Есть ли в ответе API ссылки на следующую и предыдущую страницы?
Есть ли в ответе API маркер или курсор для следующей и предыдущей страниц?
Поддерживает ли ответ API параметр количества объектов, которые нужно пропустить при разбиении по страницам?
Поддерживает ли ответ API параметр количества возвращаемых объектов?

Настройка LinkHeader или PersistentLinkHeader

Наиболее распространенным типом разбиения на страницы является то, что API источника данных сервера предоставляет URL-адреса на следующую и предыдущую страницы данных. Дополнительные сведения о спецификации заголовка ссылки см. в разделе RFC 5988.

LinkHeader подкачки означает, что ответ API включает в себя одно из следующих элементов:

  • Заголовок Link HTTP-ответа.
  • Путь JSON для получения ссылки из текста ответа.

PersistentLinkHeader-type paging имеет те же свойства, что и LinkHeader, за исключением того, что заголовок ссылки сохраняется во внутреннем хранилище. Этот параметр включает разбиение ссылок на разбиение по страницам в окнах запросов.

Например, некоторые API не поддерживают время начала или окончания запроса. Вместо этого они поддерживают курсор на стороне сервера. Для запоминания курсора на стороне сервера можно использовать постоянные типы страниц. Дополнительные сведения см. в разделе Что такое курсор?.

Примечание.

Только один запрос для соединителя может выполняться с, PersistentLinkHeader чтобы избежать условий гонки на курсоре на стороне сервера. Эта проблема может повлиять на задержку.

Поле Обязательный Тип Описание
LinkHeaderTokenJsonPath Неверно String Используйте это свойство, чтобы указать, где получить значение в тексте ответа.

Например, если источник данных возвращает следующий код JSON: { nextPage: "foo", value: [{data}]}, LinkHeaderTokenJsonPath значение равно $.nextPage.
PageSize Неверно Integer Используйте это свойство для определения количества событий на странице.
PageSizeParameterName Неверно String Используйте это имя параметра запроса, чтобы указать размер страницы.
PagingInfoPlacement Неверно String Используйте это свойство, чтобы определить, как заполняются сведения о разбиении на страницы. Принимает или QueryStringRequestBody.
PagingQueryParamOnly Неверно Логический Используйте это свойство для указания параметров запроса. Если задано значение true, все остальные параметры запроса, кроме параметров запроса подкачки, пропускаются.

Ниже приводятся примеры:

"paging": {
  "pagingType": "LinkHeader",
  "linkHeaderTokenJsonPath" : "$.metadata.links.next"
}
"paging": {
 "pagingType" : "PersistentLinkHeader", 
 "pageSizeParameterName" : "limit", 
 "pageSize" : 500 
}

Настройка NextPageUrl

NextPageUrl-type paging означает, что ответ API включает сложную ссылку LinkHeaderв тексте ответа, аналогичную , но URL-адрес включается в текст отклика вместо заголовка.

Поле Обязательный Тип Описание
PageSize Неверно Integer Количество событий на странице.
PageSizeParameterName Неверно String Имя параметра запроса для размера страницы.
NextPageUrl Неверно String Поле, используемое только в том случае, если соединитель предназначен для API Coralogix.
NextPageUrlQueryParameters Неверно Объект Пары "ключ-значение", которые добавляют настраиваемый параметр запроса к каждому запросу для следующей страницы.
NextPageParaName Неверно String Имя следующей страницы в запросе.
HasNextFlagJsonPath Неверно String Путь к атрибуту флага HasNextPage .
NextPageRequestHeader Неверно String Имя следующего заголовка страницы в запросе.
NextPageUrlQueryParametersTemplate Неверно String Поле, используемое только в том случае, если соединитель предназначен для API Coralogix.
PagingInfoPlacement Неверно String Поле, определяющее способ заполнения данных подкачки. Принимает или QueryStringRequestBody.
PagingQueryParamOnly Неверно Логический Поле, определяющее параметры запроса. Если задано значение true, все остальные параметры запроса, кроме параметров запроса подкачки, пропускаются.

Пример:

"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\")}" 
}

Настройка NextPageToken или PersistentToken

NextPageTokenДля разбиения на страницы -type используется маркер (хэш или курсор), представляющий состояние текущей страницы. Маркер включается в ответ API, и клиент добавляет его к следующему запросу для получения следующей страницы. Этот метод часто используется, когда серверу необходимо поддерживать точное состояние между запросами.

PersistentToken Для разбиения на страницы используется маркер, сохраняющийся на стороне сервера. Сервер запоминает последний маркер, полученный клиентом, и предоставляет следующий маркер в последующих запросах. Клиент продолжит работу с того места, где он остался, даже если он выполняет новые запросы позже.

Поле Обязательный Тип Описание
PageSize Неверно Integer Количество событий на странице.
PageSizeParameterName Неверно String Имя параметра запроса для размера страницы.
NextPageTokenJsonPath Неверно String Путь JSON для маркера следующей страницы в тексте ответа.
NextPageTokenResponseHeader Неверно String Поле, указывающее, что если NextPageTokenJsonPath значение пусто, используйте маркер в имени этого заголовка для следующей страницы.
NextPageParaName Неверно String Поле, определяющее имя следующей страницы в запросе.
HasNextFlagJsonPath Неверно String Поле, определяющее путь к атрибуту флага HasNextPage при определении того, осталось ли больше страниц в ответе.
NextPageRequestHeader Неверно String Поле, определяющее имя следующего заголовка страницы в запросе.
PagingInfoPlacement Неверно String Поле, определяющее способ заполнения данных подкачки. Принимает или QueryStringRequestBody.
PagingQueryParamOnly Неверно Логический Поле, определяющее параметры запроса. Если задано значение true, все остальные параметры запроса, кроме параметров запроса подкачки, пропускаются.

Примеры:

"paging": {
 "pagingType" : "NextPageToken", 
 "nextPageRequestHeader" : "ETag", 
 "nextPageTokenResponseHeader" : "ETag" 
}
"paging": {
 "pagingType" : "PersistentToken", 
    "nextPageParaName" : "gta", 
    "nextPageTokenJsonPath" : "$.alerts[-1:]._id" 
}

Настройка смещения

Offset-type разбиение на страницы указывает количество пропущенных страниц и ограничение на количество событий, извлекаемых для каждой страницы в запросе. Клиенты получают определенный диапазон элементов из набора данных.

Поле Обязательный Тип Описание
PageSize Неверно Integer Количество событий на странице.
PageSizeParameterName Неверно String Имя параметра запроса для размера страницы.
OffsetParaName Неверно String Имя параметра следующего запроса запроса. CCF вычисляет значение смещения для каждого запроса (все события приема + 1).
PagingInfoPlacement Неверно String Поле, определяющее способ заполнения данных подкачки. Принимает или QueryStringRequestBody.
PagingQueryParamOnly Неверно Логический Поле, определяющее параметры запроса. Если задано значение true, все остальные параметры запроса, кроме параметров запроса подкачки, пропускаются.

Пример:

"paging": {
  "pagingType": "Offset", 
  "offsetParaName": "offset",
  "pageSize": 50,
  "pagingQueryParamOnly": true,
  "pagingInfoPlacement": "QueryString"
}

Настройка CountBasedPaging

CountBasedPagingРазбиение на страницы -type позволяет клиенту указать количество элементов, возвращаемых в ответе. Эта возможность полезна для API, которые поддерживают разбиение на страницы на основе параметра count в составе полезных данных ответа.

Поле Обязательный Тип Описание
pageNumberParaName Верно String Имя параметра номера страницы в HTTP-запросе.
PageSize Неверно Integer Количество событий на странице.
ZeroBasedIndexing Неверно Логический Флаг, указывающий, что счетчик основан на нуле.
HasNextFlagJsonPath Неверно String Путь JSON к флагу в полезных данных http-ответа, который указывает на наличие дополнительных страниц.
TotalResultsJsonPath Неверно String Путь JSON общего числа результатов в полезных данных HTTP-ответа.
PageNumberJsonPath Неверно String Путь JSON к номеру страницы в полезных данных HTTP-ответа. Обязательный, если totalResultsJsonPath указан параметр .
PageCountJsonPath Неверно String Путь JSON к странице в полезных данных HTTP-ответа. Обязательный, если totalResultsJsonPath указан параметр .
PagingInfoPlacement Неверно String Поле, определяющее способ заполнения данных подкачки. Принимает или QueryStringRequestBody.
PagingQueryParamOnly Неверно Логический Поле, определяющее параметры запроса. Если задано значение true, все остальные параметры запроса, кроме параметров запроса подкачки, пропускаются.

Пример:

"paging": {
 "pagingType" : "CountBasedPaging", 
 "pageNumberParaName" : "page", 
 "pageSize" : 10, 
 "zeroBasedIndexing" : true, 
 "hasNextFlagJsonPath" : "$.hasNext", 
 "totalResultsJsonPath" : "$.totalResults", 
 "pageNumberJsonPath" : "$.pageNumber", 
 "pageCountJsonPath" : "$.pageCount"
}

Конфигурация DCR

Поле Обязательный Тип Описание
DataCollectionEndpoint Верно String Конечная точка сбора данных (DCE). Пример: https://example.ingest.monitor.azure.com.
DataCollectionRuleImmutableId Верно String Неизменяемый идентификатор DCR. Найдите его, просмотрев ответ на создание DCR или с помощью API DCR.
StreamName Верно String Это значение определяется streamDeclaration в DCR. Префикс должен начинаться с Custom-.

Пример соединителя данных CCF

Ниже приведен пример всех компонентов json соединителя данных 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": ["$"]
      }
   }
}