RestApiPoller若要使用無程式代碼連接器架構建立數據連接器(CCF),請使用此參考做為 Data Connectors 檔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 | 數據連接器標識碼必須是唯一的名稱,而且與name要求主體中的 參數相同。 |
| resourceGroupName | 資源群組的名稱,不區分大小寫。 |
| subscriptionId | 目標訂用帳戶的標識碼。 |
| workspaceName | 工作區 的名稱 ,而非標識符。 Regex 模式: ^[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 參數之連線的唯一名稱 |
| 種類 | 對 | 字串 | 必須是 RestApiPoller |
| etag | GUID | 保留空白以建立新的連接器。 針對更新作業,etag 必須符合現有連接器的 etag (GUID)。 | |
| properties.connectorDefinitionName | 字串 | 定義數據連接器 UI 組態的 DataConnectorDefinition 資源名稱。 如需詳細資訊,請參閱 數據連接器定義。 | |
| 性能。認證 | 對 | 巢狀 JSON | 描述用於輪詢資料的驗證屬性。 如需詳細資訊,請參閱 驗證組態。 |
| 性能。請求 | 對 | 巢狀 JSON | 描述用於輪詢資料的要求承載,例如 API 端點。 如需詳細資訊,請參閱要求設定。 |
| 性能。回應 | 對 | 巢狀 JSON | 描述輪詢資料時從 API 傳回的回應物件和巢狀訊息。 如需詳細資訊,請參閱回應設定。 |
| 性能。尋呼 | 巢狀 JSON | 描述輪詢資料時的分頁承載。 如需詳細資訊,請參閱分頁設定。 | |
| 性能。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",
}
此範例會使用預設值,併產生下列標頭: 授權:令牌123123123
"auth": {
"type": "APIKey",
"ApiKey": "123123123",
"ApiKeyName": ""
}
ApiKeyName由於 已明確設定為 "",因此結果是下列標頭:Authorization:123123123
OAuth2
無程式代碼連接器架構支援 OAuth 2.0 授權碼授與和客戶端認證。 機密和公用用戶端會使用授權碼授與類型來交換存取權杖的授權碼。 在使用者透過重新導向 URL 返回用戶端之後,應用程式會從 URL 取得授權碼,並使用此授權碼來要求存取權杖。
| 欄位 | 必要 | 類型 | 描述 |
|---|---|---|---|
| ClientId | 對 | 繩子 | 用戶端識別碼 |
| ClientSecret | 對 | 繩子 | 用戶端密碼 |
| AuthorizationCode | 當 grantType = 時為 True authorization_code |
繩子 | 如果授與類型是 authorization_code 這個域值,則為從驗證服務傳回的授權碼。 |
| 範圍 | True 表示授與 authorization_code 類型授與 client_credentials 類型的選擇性 |
繩子 | 使用者同意範圍的空間分隔清單。 如需詳細資訊,請參閱 OAuth2 範圍和許可權。 |
| RedirectUri | 當 grantType = 時為 True authorization_code |
繩子 | 重新導向的 URL 必須是 https://portal.azure.com/TokenAuthorize/ExtensionName/Microsoft_Azure_Security_Insights |
| GrantType | 對 | 繩子 |
authorization_code 或 client_credentials |
| TokenEndpoint | 對 | 繩子 | URL,以授與中有效的令牌 authorization_code 交換程式碼,或以授與中有效令牌 client_credentials 的用戶端標識碼和秘密交換程式碼。 |
| 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"
}
身份驗證流程:
傳送認證以
TokenEndpoint取得 JWT 權杖- 如果
IsCredentialsInHeaders: true:傳送帶有username:password的基本身份驗證標頭 - 如果
IsCredentialsInHeaders: false:在POST內文中傳送認證
- 如果
使用
JwtTokenJsonPath或 從回應標頭擷取權杖在後續的 API 請求中使用帶有標頭的
ApiKeyName權杖
屬性:
| 欄位 | 必要 | 類型 | 描述 |
|---|---|---|---|
| type | 對 | 繩子 | 必須是 JwtToken |
| 使用者名 | True (如果未使用 userToken ) | 物體 | 使用者名稱認證的索引鍵值組。 如果 和 userName 是在標頭要求中傳送,請password使用使用者名稱指定value屬性。 如果 和 userName 在內文請求中發送,請password指定 Key 和Value |
| 密碼 | True (如果未使用 userToken ) | 物體 | 密碼認證的索引鍵值組。 如果 和 userName 是在標頭要求中傳送,請password使用使用者名稱指定value屬性。 如果 和 userName 在內文請求中發送,請password指定 Key 和Value |
| 使用者權杖 | True (如果未使用 userName ) | 繩子 | 用戶端產生的使用者權杖,以取得系統權杖進行驗證 |
| UserToken前置 | 否 | 繩子 | 在權杖前加上文字。 範例:Bearer |
| NoAccessTokenPrepend | 否 | 布林值 | 存取旗標,以指出權杖不應在前面附加任何內容 |
| TokenEndpointHttp方法 | 否 | 繩子 | HTTP 方法來標記端點。 可以是 Get 或 Post。 預設:Post |
| TokenEndpoint | 對 | 繩子 | URL 端點以取得 JWT 權杖 |
| IsCredentialsInHeaders | 布林值 | 以基本驗證標頭 (true) 與 POST 本文 (false) 的形式傳送認證。 預設:false |
|
| IsJson請求 | 布林值 | 以 JSON (標頭 Content-Type = application/json) 與表單編碼 (標頭 Content-Type = application/x-www-form-urlencoded) 的形式傳送請求。 預設:false |
|
| JwtTokenJson路徑 | 繩子 | JSONPath 從回應中提取權杖(例如,“$.access_token”) |
|
| JwtTokenInResponse標頭 | 布林值 | 從回應標頭與本文擷取權杖。 預設:false |
|
| JwtToken標頭名稱 | 繩子 | 權杖位於回應標頭中的標頭名稱。 預設值:「Authorization” |
|
| JwtToken識別碼 | 繩子 | 用來從前置記權杖字串擷取 JWT 的識別碼 | |
| QueryParameters | 物體 | 將要求傳送至權杖端點時要包含的自訂查詢參數 | |
| 標題 | 物體 | 將要求傳送至權杖端點時要包含的自訂標頭 | |
| RequestTimeoutInSeconds | 整數 | 要求以秒為單位的逾時。 預設值: 100,最大值 180 |
身份驗證流程:
傳送認證以
TokenEndpoint取得 JWT 權杖- 如果
IsCredentialsInHeaders: true:傳送帶有username:password的基本身份驗證標頭 - 如果
IsCredentialsInHeaders: false:在POST內文中傳送認證
- 如果
使用
JwtTokenJsonPath或 從回應標頭擷取權杖在後續的 API 請求中使用帶有標頭的
ApiKeyName權杖
注意
Limitations:
- 需要使用者名稱/密碼驗證才能取得權杖
- 不支援以 API 金鑰為基礎的權杖要求
- 不支援自訂標頭驗證 (不含使用者名稱/密碼)
要求設定
要求區段會定義 CCF 數據連接器如何將要求傳送至您的數據源,例如 API 端點,以及輪詢該端點的頻率。
| 欄位 | 必要 | 類型 | 描述 |
|---|---|---|---|
| ApiEndpoint | 對 | 繩子 | 遠端伺服器的 URL。 定義要從中提取資料的端點。 |
| RateLimitQPS | 整數 | 定義一秒內允許的呼叫或查詢數目。 | |
| RateLimitConfig | 物體 | 定義 RESTful API 的速率限制設定。 請參閱 範例。 | |
| QueryWindowInMin | 整數 | 以分鐘為單位定義可用的查詢視窗。 最小值為1分鐘。 預設值為 5 分鐘。 | |
| HttpMethod | 繩子 | 定義 API 方法: GET(預設值) 或 POST |
|
| QueryTimeFormat | 繩子 | 定義端點 (遠端伺服器) 預期的日期和時間格式。 CCF 會使用目前日期和時間,無論使用這個變數的位置為何。 可能的值為常數: UnixTimestamp、 UnixTimestampInMills 或任何其他有效的日期時間表示法,例如: yyyy-MM-dd、 MM/dd/yyyy HH:mm:ss預設值為 ISO 8601 UTC |
|
| RetryCount | 整數 (1...6) |
1定義以6重試允許從失敗復原的重試。 預設值為 3。 |
|
| TimeoutInSeconds | 整數 (1...180) | 定義要求逾時,以秒為單位。 預設為 20 |
|
| IsPostPayloadJson | 布林值 | 判斷 POST 承載是否採取 JSON 格式。 預設為 false |
|
| 標題 | 物體 | 定義要求標頭的索引鍵值組。 | |
| QueryParameters | 物體 | 定義要求查詢參數的索引鍵值組。 | |
| StartTimeAttributeName | 設定時 EndTimeAttributeName 為 True |
繩子 | 定義查詢開始時間的查詢參數名稱。 請參閱 範例。 |
| EndTimeAttributeName | 設定時 StartTimeAttributeName 為 True |
繩子 | 定義查詢結束時間的查詢參數名稱。 |
| QueryTimeIntervalAttributeName | 繩子 | 如果端點需要特殊格式來查詢時間範圍內的數據,請搭配 QueryTimeIntervalPrepend 和 QueryTimeIntervalDelimiter 參數使用這個屬性。 請參閱 範例。 |
|
| 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 需要複雜的參數時,請使用 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 查詢參數。
"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 檔案中 | |
| 格式 | 對 | 繩子 |
json、csv 或 xml |
| CompressionAlgo | 繩子 | 壓縮演算法,或 multi-gzipdeflate。 針對 gzip 壓縮演算法,只要設定 IsGzipCompressed 為 True ,而不是設定此參數的值即可。 |
|
| CsvDelimiter | 繩子 | 如果回應格式為 CSV,而且您想要變更 的預設 CSV 分隔符 "," |
|
| HasCsvBoundary | 布林值 | 指出 CSV 數據是否有界限 | |
| HasCsvHeader | 布林值 | 指出 CSV 數據是否有標頭,預設值為 True |
|
| CsvEscape | 繩子 | 欄位界限的逸出字元,預設值為 "例如,具有標頭 id,name,avg 的 CSV 和包含空格的數據列,例如 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 分頁的屬性與 相同 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
Offset 分頁會指定要略過的頁數,以及要求中每個頁面要擷取的事件數目限制。 用戶端會從數據集擷取特定範圍的專案。
| 欄位 | 必要 | 類型 | 描述 |
|---|---|---|---|
| PageSize | 否 | 整數 | 每個頁面的事件數 |
| PageSizeParameterName | 否 | 繩子 | 頁面大小的查詢參數名稱 |
| OffsetParaName | 否 | 繩子 | 下一個要求查詢參數名稱。 CCF 會計算每個要求的位移值(所有擷取的事件 + 1) |
| 分頁資訊置入 | 否 | 繩子 | 分頁資訊是如何填充的。 接受「QueryString」或「RequestBody」其中一項 |
| PagingQueryParamOnly | 否 | 布林值 | 若設為 true,則會省略除分頁查詢參數外的所有其他查詢參數。 |
範例:
"paging": {
"pagingType": "Offset",
"offsetParaName": "offset",
"pageSize": 50,
"pagingQueryParamOnly": true,
"pagingInfoPlacement": "QueryString"
}
設定 CountBasedPaging
CountBasedPaging 允許用戶端指定要在回應中傳回的專案數目。 這對於支援以 count 參數為基礎的分頁作為回應承載一部分的 API 非常有用。
| 欄位 | 必要 | 類型 | 描述 |
|---|---|---|---|
| pageNumberParaName | 對 | 繩子 | HTTP 請求中頁碼的參數名稱 |
| PageSize | 否 | 整數 | 每個頁面的事件數 |
| 零基礎索引 | 否 | 布林值 | 指出計數是否從零開始的旗標 |
| HasNextFlagJsonPath | 否 | 繩子 | HTTP 回應承載中旗標的 JSON 路徑,以指出有更多頁面 |
| TotalResultsJson路徑 | 否 | 繩子 | HTTP 回應承載中結果總數的 JSON 路徑 |
| PageNumberJson路徑 | 否 | 繩子 | 如果提供 totalResultsJsonPath,則為必要。 HTTP 回應承載中頁碼的 JSON 路徑 |
| PageCountJson路徑 | 否 | 繩子 | 如果提供 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 不可變標識碼。 檢視 DCR 建立回應或使用 DCR API 來尋找它 |
| StreamName | 對 | 字串 | 此值是 streamDeclaration DCR 中定義的 (前置詞開頭必須是 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": ["$"]
}
}
}