Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Вы можете создать 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"
}
Следуйте этому потоку проверки подлинности:
Отправка учетных
TokenEndpointданных в для получения маркера JWT при использованииuserNameиpasswordиспользуетсяIsCredentialsInHeadersдля определения места для ввода учетных данных в запросе.- Если
IsCredentialsInHeaders: true: отправляет базовый заголовок проверки подлинности сusername:password. - Если
IsCredentialsInHeaders: false: отправляет учетные данные в текстеPOST.
- Если
Извлеките маркер с помощью
JwtTokenJsonPathили из заголовка ответа.Заголовок 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=fromEndTimeAttributeName=untilApiEndpoint=https://www.example.com
Запрос, отправляемый на удаленный сервер: https://www.example.com?from={QueryTimeFormat}&until={QueryTimeFormat + QueryWindowInMin}.
Пример QueryTimeIntervalAttributeName
Рассмотрим следующий пример:
QueryTimeIntervalAttributeName=intervalQueryTimeIntervalPrepend=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 включает в себя одно из следующих элементов:
- Заголовок
LinkHTTP-ответа. - Путь 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": ["$"]
}
}
}