你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

无代码连接器框架的 RestApiPoller 数据连接器参考

若要使用无代码连接器框架(CCF)创建 RestApiPoller 数据连接器,请使用此参考作为数据 连接器文档Microsoft Sentinel REST API 的 补充。

每个 dataConnector 都表示 Microsoft Sentinel 数据连接器的一个特定连接。 一个数据连接器可能有多个连接,这些连接从不同的终结点提取数据。 使用此参考文档生成的 JSON 配置用于完成 CCF 数据连接器的部署模板。

有关详细信息,请参阅为 Microsoft Sentinel 创建无代码连接器

数据连接器 - 创建或更新

请参考 REST API 文档中的创建或更新操作来查找最新的 API 稳定版或预览版。 “创建”和“更新”操作之间的区别在于更新需要 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 数据连接器 ID 必须是唯一的名称,并且与name中的 参数相同。
resourceGroupName 资源组的名称,不区分大小写。
subscriptionId 目标订阅的 ID。
workspaceName 工作区的名称,而不是 ID
正则表达式模式:^[A-Za-z0-9][A-Za-z0-9-]+[A-Za-z0-9]$
api-version 要用于此操作的 API 版本。

请求正文

CCF 数据连接器的请求正文 RestApiPoller 具有以下结构:

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

RestApiPoller

RestApiPoller 表示 API Poller CCF 数据连接器,可在其中自定义数据源的分页、授权和请求/响应有效负载。

名称 必需 类型 描述
名字 真 实 字符串 与 URI 参数匹配的连接的唯一名称
kind 真 实 字符串 必须是 RestApiPoller
etag GUID 为创建新连接器留空。 对于更新操作,etag 必须与现有连接器的 etag (GUID) 匹配。
properties.connectorDefinitionName 字符串 定义数据连接器 UI 配置的 DataConnectorDefinition 资源的名称。 有关详细信息,请参阅数据连接器定义
properties.auth 真 实 嵌套的 JSON 描述用于轮询数据的身份验证属性。 有关详细信息,请参阅身份验证配置
properties.request 真 实 嵌套的 JSON 描述用于轮询数据的请求有效负载,例如 API 终结点。 有关详细信息,请参阅请求配置
properties.response 真 实 嵌套的 JSON 描述在轮询数据时从 API 返回的响应对象和嵌套消息。 有关详细信息,请参阅响应配置
properties.paging 嵌套的 JSON 描述轮询数据时的分页有效负载。 有关详细信息,请参阅分页配置
properties.dcrConfig 嵌套的 JSON 将数据发送到数据收集规则 (DCR) 时所需的参数。 有关详细信息,请参阅 DCR 配置

身份验证配置

CCF 支持以下身份验证类型:

注意

CCF OAuth2 实现不支持客户端证书凭据。

最佳做法是在身份验证部分中使用参数,而不是硬编码凭据。 有关详细信息,请参阅安全机密输入

若要创建同时使用参数的部署模板,需要通过额外的起始 [ 对本节中的参数进行转义。 这样,参数可以根据用户与连接器的交互来分配值。 有关详细信息,请参阅模板表达式转义字符

若要允许从 UI 输入凭据,connectorUIConfig 部分需要具有所需参数的 instructions。 有关详细信息,请参阅 无代码连接器框架的数据连接器定义参考

基本身份验证

字段 必需 类型
UserName 真 实 字符串
密码 真 实 字符串

使用 connectorUIconfig 中定义的参数进行基本身份验证的示例:

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

APIKey

字段 必需 类型 描述 默认值
ApiKey 真 实 字符串 用户密钥
ApiKeyName 字符串 包含 ApiKey 值的 Uri 标头的名称 Authorization
ApiKeyIdentifier 字符串 在令牌前添加的字符串值 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 真 实 字符串 客户端 ID
ClientSecret 真 实 字符串 客户端密码
AuthorizationCode 当 grantType = authorization_code 时为 True 字符串 如果授权类型为 authorization_code,此字段值将是从身份验证服务返回的授权代码。
范围 对于 authorization_code 授权类型,True
对于 client_credentials 授权类型,可选
字符串 用户同意的范围的空格分隔列表。 有关详细信息,请参阅 OAuth2 范围和权限
RedirectUri 当 grantType = authorization_code 时为 True 字符串 重定向的 URL 必须为 https://portal.azure.com/TokenAuthorize/ExtensionName/Microsoft_Azure_Security_Insights
GrantType 真 实 字符串 authorization_codeclient_credentials
TokenEndpoint 真 实 字符串 用于与 authorization_code 授权中的有效令牌交换代码或与 client_credentials 授权中的有效令牌交换客户端 ID 和机密的 URL。
TokenEndpointHeaders 物体 用于将自定义标头发送到令牌服务器的可选键值对象
TokenEndpointQueryParameters 物体 用于将自定义查询参数发送到令牌服务器的可选键值对象
AuthorizationEndpoint 真 实 字符串 authorization_code 流的用户同意 URL
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 Web 令牌 (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 令牌

    • 如果 IsCredentialsInHeaders: true:使用 username:password 发送基本身份验证标头
    • 如果 IsCredentialsInHeaders: false:在 POST 正文中发送凭据
  2. 使用 JwtTokenJsonPath 或从响应标头中提取令牌

  3. 在后续 API 请求中使用令牌和 ApiKeyName 标头

性能:

字段 必需 类型 描述
类型 真 实 字符串 必须是 JwtToken
userName True (如果未使用 userToken 物体 用户名凭据的键值对。 如果在 userName 标头请求中发送并 password 发送,请使用 value 用户名指定属性。 如果在 userName 正文请求中发送, password 请指定 KeyValue
password True (如果未使用 userToken 物体 密码凭据的键值对。 如果在 userName 标头请求中发送并 password 发送,请使用 value 用户名指定属性。 如果在 userName 正文请求中发送, password 请指定 KeyValue
userToken True (如果未使用 userName 字符串 客户端生成的用于获取系统令牌进行身份验证的用户令牌
UserTokenPrepend 字符串 标记前追加文本。 示例: Bearer
NoAccessTokenPrepend 布尔 用于指示令牌的访问标志不应追加任何内容
TokenEndpointHttpMethod 字符串 用于令牌终结点的 HTTP 方法。 可以是 GetPost。 默认值:Post
TokenEndpoint 真 实 字符串 用于获取 JWT 令牌的 URL 终结点
IsCredentialsInHeaders 布尔 将凭据作为基本身份验证标头 (true) 与 POST 正文 (false) 发送。 默认值:false
IsJsonRequest 布尔 将请求作为 JSON(标头 Content-Type = application/json)与表单编码(标头 Content-Type = application/x-www-form-urlencoded)发送。 默认值:false
JwtTokenJsonPath 字符串 用于从响应中提取令牌的 JSONPath(例如“$.access_token”)
JwtTokenInResponseHeader 布尔 从响应标头与正文中提取令牌。 默认值:false
JwtTokenHeaderName 字符串 令牌位于响应标头中时的标头名称。 默认值:“Authorization
JwtTokenIdentifier 字符串 用于从前缀令牌字符串中提取 JWT 的标识符
QueryParameters 物体 将请求发送到令牌终结点时要包括的自定义查询参数
标头 物体 将请求发送到令牌终结点时要包括的自定义标头
RequestTimeoutInSeconds 整数 请求超时(以秒为单位)。 默认值: 100、最大值 180

身份验证流:

  1. 发送凭据以获取 TokenEndpoint JWT 令牌

    • 如果 IsCredentialsInHeaders: true:使用 username:password 发送基本身份验证标头
    • 如果 IsCredentialsInHeaders: false:在 POST 正文中发送凭据
  2. 使用 JwtTokenJsonPath 或从响应标头中提取令牌

  3. 在后续 API 请求中使用令牌和 ApiKeyName 标头

注意

Limitations:

  • 需要用户名/密码身份验证进行令牌获取
  • 不支持基于 API 密钥的令牌请求
  • 不支持自定义标头身份验证(没有用户名/密码)

请求配置

请求部分定义 CCF 数据连接器如何将请求发送到数据源,例如 API 终结点以及轮询该终结点的频率。

字段 必需 类型 描述
ApiEndpoint 真 实 字符串 远程服务器的 URL。 定义要从中拉取数据的终结点。
RateLimitQPS 整数 定义一秒钟内允许的调用或查询次数。
RateLimitConfig 物体 定义了RESTful API的速率限制配置。 请查看示例
QueryWindowInMin 整数 定义可用的查询时段(以分钟为单位)。 最小值为 1 分钟。 默认值为 5 分钟。
HttpMethod 字符串 定义 API 方法:GET(默认)或 POST
QueryTimeFormat 字符串 定义终结点(远程服务器)预期的日期和时间格式。 无论在何处使用此变量,CCF 都使用当前日期和时间。 可能的值为常量:UnixTimestampUnixTimestampInMills 或日期时间的任何其他有效表示形式,例如:yyyy-MM-ddMM/dd/yyyy HH:mm:ss
默认为 ISO 8601 UTC
RetryCount 整数 (1...6) 定义允许从故障中恢复的重试次数为 16 次。 默认为 3
TimeoutInSeconds 整数 (1...180) 定义请求超时,以秒为单位。 默认为 20
IsPostPayloadJson 布尔 确定 POST 有效负载是否采用 JSON 格式。 默认为 false
标头 物体 定义请求头的键值对。
QueryParameters 物体 定义请求查询参数的键值对。
StartTimeAttributeName 设置 EndTimeAttributeName 时为 True 字符串 定义查询开始时间的查询参数名称。 请查看示例
EndTimeAttributeName 设置 StartTimeAttributeName 时为 True 字符串 定义查询结束时间的查询参数名称。
QueryTimeIntervalAttributeName 字符串 如果终结点需要一种专用格式来查询期限内的数据,则将此属性与 QueryTimeIntervalPrependQueryTimeIntervalDelimiter 参数配合使用。 请查看示例
QueryTimeIntervalPrepend 设置 QueryTimeIntervalAttributeName 时为 True 字符串 请参见QueryTimeIntervalAttributeName
QueryTimeIntervalDelimiter 设置 QueryTimeIntervalAttributeName 时为 True 字符串 请参见QueryTimeIntervalAttributeName
QueryParametersTemplate 字符串 在高级方案中传递参数时使用的查询模板。
br>例如:"queryParametersTemplate": "{'cid': 1234567, 'cmd': 'reporting', 'format': 'siem', 'data': { 'from': '{_QueryWindowStartTime}', 'to': '{_QueryWindowEndTime}'}, '{_APIKeyName}': '{_APIKey}'}"

当 API 需要复杂参数时,请使用 queryParametersqueryParametersTemplate,其中包括某些内置变量。

内置变量 用于 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 Graph API 查询参数

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

另一个选项是数据源需要 2 个查询参数,一个用于开始时间,另一个用于结束时间。

示例:

"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 字符串 定义响应 JSON 中成功消息的路径。 定义此参数时,还应定义 SuccessStatusValue 参数。
SuccessStatusValue 字符串 定义响应 JSON 中成功消息值的路径
IsGzipCompressed 布尔 确定响应是否压缩为 gzip 文件
format 真 实 字符串 jsoncsvxml
CompressionAlgo 字符串 压缩算法 multi-gzipdeflate。 对于 gzip 压缩算法,只需将 IsGzipCompressed 配置为 True,不为此参数设置值。
CsvDelimiter 字符串 如果响应格式为 CSV,并且需要更改默认 CSV 分隔符 ","
HasCsvBoundary 布尔 指示 CSV 数据是否具有边界
HasCsvHeader 布尔 指示 CSV 数据是否具有标头,默认为 True
CsvEscape 字符串 字段边界的转义字符,默认为 "

例如,带有标头 id,name,avg 和一行包含空格(如 1,"my name",5.5)的数据的 CSV 需要 " 字段边界。
ConvertChildPropertiesToArray 布尔 特殊情况,远程服务器返回一个对象而不是事件列表,其中每个属性都包含数据。

注意

CSV 格式类型由 RFC4180 规范进行分析。

响应配置示例

需要 JSON 格式的服务器响应,并在属性 value 中包含请求的数据。 响应属性 status 指示仅在值为 时才引入数据。success

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

本示例中的预期响应为没有标头的 CSV 做准备。

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

分页配置

当数据源无法同时发送整个响应有效负载时,CCF 数据连接器需要知道如何在响应 中接收部分数据。 分页类型从以下类型中选择:

分页类型 决策因子
  • LinkHeader
  • PersistentLinkHeader
  • NextPageUrl
API 响应是否具有指向下一页和上一页的链接?
  • NextPageToken
  • PersistentToken
API 响应是否具有下一页和上一页的令牌或游标?
API 响应是否支持分页时要跳过的对象数的参数?
API 响应是否支持要返回的对象数的参数?

配置 LinkHeader 或 PersistentLinkHeader

最常用的分页类型是服务器数据源 API 为数据的下一页和上一页提供 URL。 有关“链接标头”规范的详细信息,请参阅 RFC 5988

LinkHeader 分页意味着 API 响应包括以下任一项:

  • Link HTTP 响应头
  • 用于从响应正文中检索链接的 JSON 路径。

PersistentLinkHeader 分页的属性与 LinkHeader 相同,但链接标头保留在后端存储中。 此选项支持跨查询窗口的分页链接。 例如,某些 API 不支持查询开始时间或结束时间。 而是支持服务器端游标。 永久性页类型可用于记住服务器端游标。 有关详细信息,请参阅什么是游标?

注意

只能为具有 PersistentLinkHeader 的连接器运行一个查询,以避免服务器端游标上的争用条件。 这可能会影响延迟。

字段 必需 类型 描述
LinkHeaderTokenJsonPath 字符串 使用此属性指示在响应正文中获取值的位置。

例如,如果数据源返回以下 JSON:{ nextPage: "foo", value: [{data}]},则 LinkHeaderTokenJsonPath 将为 $.nextPage
PageSize 整数 每页的事件数
PageSizeParameterName 字符串 页面大小的查询参数名称
分页信息置入 字符串 分页信息是如何填充的。 接受“QueryString”或“RequestBody”
PagingQueryParamOnly 布尔 如果设置为 true,则会省略除分页查询参数外的所有其他查询参数。

以下是一些示例:

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

配置 NextPageUrl

NextPageUrl 分页意味着 API 响应在响应正文中包含一个与 LinkHeader 类似的复杂链接,但 URL 包含在响应正文而不是标头中。

字段 必需 类型 描述
PageSize 整数 每页的事件数
PageSizeParameterName 字符串 页面大小的查询参数名称
NextPageUrl 字符串 仅当连接器用于 Coralogix API 时
NextPageUrlQueryParameters 对象键值对 - 向下一页的每个请求中添加自定义查询参数
NextPageParaName 字符串 确定请求中的下一页名称。
HasNextFlagJsonPath 字符串 定义 HasNextPage 标志属性的路径
NextPageRequestHeader 字符串 确定请求中的下一页标头名称。
NextPageUrlQueryParametersTemplate 字符串 仅当连接器用于 Coralogix API 时
分页信息置入 字符串 分页信息是如何填充的。 接受“QueryString”或“RequestBody”
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 分页使用表示当前页状态的令牌(哈希或游标)。 令牌包含在 API 响应中,客户端将其添加到下一个请求后以提取下一页。 当服务器需要在请求之间保持准确的状态时,通常会使用此方法。

PersistentToken 分页使用保留在服务器端的令牌。 服务器会记住客户端检索的最后一个令牌,并在后续请求中提供下一个令牌。 即使客户端稍后发出新请求,也会从上次中断的地方继续。

字段 必需 类型 描述
PageSize 整数 每页的事件数
PageSizeParameterName 字符串 页面大小的查询参数名称
NextPageTokenJsonPath 字符串 响应正文中下一页令牌的 JSON 路径。
NextPageTokenResponseHeader 字符串 如果 NextPageTokenJsonPath 为空,则在下一页的标头名称中使用令牌。
NextPageParaName 字符串 确定请求中的下一页名称。
HasNextFlagJsonPath 字符串 在确定响应中是否还有更多页面时,定义 HasNextPage 标志属性的路径
NextPageRequestHeader 字符串 确定请求中的下一页标头名称。
分页信息置入 字符串 分页信息是如何填充的。 接受“QueryString”或“RequestBody”
PagingQueryParamOnly 布尔 如果设置为 true,则会省略除分页查询参数外的所有其他查询参数。

示例:

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

配置偏移

Offset 分页指定要跳过的页数,以及请求中每页检索的事件数的限制。 客户端从数据集中提取特定范围的项目。

字段 必需 类型 描述
PageSize 整数 每页的事件数
PageSizeParameterName 字符串 页面大小的查询参数名称
OffsetParaName 字符串 下一个请求查询参数名称。 CCF 计算每个请求的偏移值(所有引入的事件 + 1)
分页信息置入 字符串 分页信息是如何填充的。 接受“QueryString”或“RequestBody”
PagingQueryParamOnly 布尔 如果设置为 true,则会省略除分页查询参数外的所有其他查询参数。

示例:

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

配置 CountBasedPaging

CountBasedPaging 允许客户端指定要在响应中返回的项数。 这对于支持基于计数参数作为响应有效负载一部分的分页的 API 非常有用。

字段 必需 类型 描述
pageNumberParaName 真 实 字符串 HTTP 请求中的页码的参数名称
PageSize 整数 每页的事件数
ZeroBasedIndexing 布尔 用于指示计数是否基于零的标志
HasNextFlagJsonPath 字符串 HTTP 响应有效负载中标志的 JSON 路径,以指示有更多的页面
TotalResultsJsonPath 字符串 HTTP 响应有效负载中结果总数的 JSON 路径
PageNumberJsonPath 字符串 如果提供了 totalResultsJsonPath,则为必需。 HTTP 响应有效负载中页码的 JSON 路径
PageCountJsonPath 字符串 如果提供了 totalResultsJsonPath,则为必需。 HTTP 响应有效负载中页计数的 JSON 路径
分页信息置入 字符串 分页信息是如何填充的。 接受“QueryString”或“RequestBody”
PagingQueryParamOnly 布尔 如果设置为 true,则会省略除分页查询参数外的所有其他查询参数。

示例:

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

DCR 配置

字段 必需 类型 描述
DataCollectionEndpoint 真 实 字符串 DCE(数据收集终结点),例如:https://example.ingest.monitor.azure.com
DataCollectionRuleImmutableId 真 实 字符串 DCR 不可变 ID。 通过查看 DCR 创建响应或使用 DCR API 查找
StreamName 真 实 字符串 此值是在 DCR 中定义的 streamDeclaration(前缀必须以 Custom- 开头)

CCF 数据连接器示例

下面是 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": ["$"]
      }
   }
}