你可以利用 Codeless Connector Framework (CCF) 建立RestApiPoller資料連接器,本文作為 Microsoft Sentinel REST API for Data connectors 文件的補充。
每個資料連接器代表 Microsoft Sentinel 資料連接器的特定連接。 一個資料連接器可能有多個連接點,從不同端點擷取資料。 你可以利用本文所建立的 JSON 配置,完成 CCF 資料連接器的部署範本。
欲了解更多資訊,請參閱「為 Microsoft Sentinel 建立無程式碼連接器」。
建立或更新資料連接器
透過參考 REST API 文件中的 or create操作,找到最新的穩定或預覽版 API 版本。和 operations 的差別在於需要 value 值。updatecreateupdateupdateetag
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 參數。
要求內文
CCF 資料連接器的請求體 RestApiPoller 結構如下:
{
"name": "{{dataConnectorId}}",
"kind": "RestApiPoller",
"etag": "",
"properties": {
"connectorDefinitionName": "",
"auth": {},
"request": {},
"response": {},
"paging": "",
"dcrConfig": ""
}
}
RestApiPoller
RestApiPoller 是一個 API 輪詢器 CCF 資料連接器,你可以用來自訂資料來源的分頁、授權及請求/回應有效載荷。
| 名稱 | 必要項目 | 類型 | 描述 |
|---|---|---|---|
name |
True | 字串 | 唯一與 URI 參數相符的連線名稱。 |
kind |
True | 字串 | 價值。kind 此欄位必須設為 RestApiPoller。 |
etag |
GUID | 價值。etag 此欄位必須留空以便建立新的連接器。 更新操作時, etag 必須與現有連接器 etag (GUID) 匹配。 |
|
properties.connectorDefinitionName |
字串 | 定義資料連接器 UI 設定的資源名稱 DataConnectorDefinition 。 欲了解更多資訊,請參閱 資料連接器定義。 |
|
properties.auth |
True | 巢狀 JSON | 查詢資料的認證屬性。 欲了解更多資訊,請前往 「認證設定」。 |
properties.request |
True | 巢狀 JSON | 用於輪詢資料的請求有效載荷,例如 API 端點。 欲了解更多資訊,請前往 請求設定。 |
properties. response |
True | 巢狀 JSON | API 在輪詢資料時會回傳回應物件和巢狀訊息。 欲了解更多資訊,請前往 回應配置。 |
properties.paging |
巢狀 JSON | 輪詢資料時的分頁有效載荷。 欲了解更多資訊,請參閱 分頁設定。 | |
properties.dcrConfig |
巢狀 JSON | 資料傳送至資料收集規則時所需的參數 (DCR) 。 欲了解更多資訊,請參閱 DCR 配置。 |
認證設定
CCF 支援以下認證類型:
注意事項
CCF OAuth2 實作不支援用戶端憑證憑證。
最佳做法是,在認證部分使用參數,而非硬編碼憑證。 欲了解更多資訊,請參閱 安全機密輸入。
要建立部署範本(同樣使用參數),你需要用額外的起始 [碼 轉離本節的參數。 此步驟允許參數根據使用者與連接器的互動來分配值。 更多資訊請參見 範本表達式跳脫字元。
要啟用從 UI 輸入憑證,該 connectorUIConfig 區塊要求你在 中輸入所需的參數 instructions。 欲了解更多資訊,請參閱無碼連接器框架的資料連接器定義參考。
基本認證
| 欄位 | 必要項目 | 類型 |
|---|---|---|
UserName |
True | 字串 |
Password |
True | 字串 |
這裡有一個基本驗證的範例,使用定義在 的參數:connectorUIconfig
"auth": {
"type": "Basic",
"UserName": "[[parameters('username')]",
"Password": "[[parameters('password')]"
}
API 金鑰
| 欄位 | 必要項目 | 類型 | 描述 | 預設值 |
|---|---|---|---|---|
ApiKey |
True | 字串 | 使用者秘密金鑰。 | |
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時,為真。 |
字串 | 若授權類型為 authorization_code,該欄位值即為認證伺服器回傳的授權碼。 |
Scope |
補助金類型確實如此 authorization_code 。補助金類型為選修 client_credentials 。 |
字串 | 一份空間分隔的使用者同意範圍清單。 欲了解更多資訊,請參閱 OAuth2 的範圍與權限。 |
RedirectUri |
當值 grantType 為 authorization_code時,為真。 |
字串 | 重新導向的網址必須是 https://portal.azure.com/TokenAuthorize/ExtensionName/Microsoft_Azure_Security_Insights。 |
GrantType |
正確。 | 字串 | 補助金類型。 可以是 authorization_code 或 client_credentials。 |
TokenEndpoint |
正確。 | 字串 | 授權中交換有效憑證 authorization_code 的程式碼的 URL,或是授權中有效憑證 client_credentials 的用戶端 ID 與秘密。 |
TokenEndpointHeaders |
物件 | 一個可選的鍵值物件,用來傳送自訂標頭給權杖伺服器。 | |
TokenEndpointQueryParameters |
物件 | 一個可選的鍵值物件,用來傳送自訂查詢參數給權杖伺服器。 | |
AuthorizationEndpoint |
正確。 | 字串 | 使用者同意 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
JWT (JSON Web Token) 認證支援透過使用者名稱與密碼憑證取得憑證,並用於 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或從回應標頭中提取權杖。JWT 標記的授權標頭為常數,且永遠為「授權」。
| 欄位 | 必要項目 | 類型 | 描述 |
|---|---|---|---|
type |
True | 字串 | 那種人。 必須是 JwtToken |
userName |
如果沒用 (userToken 真的是) |
物件 | 憑證的 userName 鍵值對。 如果 userName 和 password 在標頭請求中被傳送,請以使用者名稱指定 value 屬性。 若 userName 和 password 在正體請求中被傳送,則指定 Key 和 Value。 |
password |
如果沒用 (userToken 真的是) |
物件 | 密碼憑證的鍵值對。 若 userName 標頭請求中已傳送 和 password ,則以 . 來指定 value 屬性 userName。 若 userName 和 password 在正體請求中被傳送,則指定 Key 和 Value。 |
userToken |
如果沒用 (userName 真的是) |
字串 | 用戶端產生的使用者憑證,用來取得系統憑證以進行認證。 |
UserTokenPrepend |
錯 | 字串 | 這個值表示是否要在標記前加上文字。 預設值: Bearer。 |
NoAccessTokenPrepend |
錯 | 布林值 | 一個存取標誌,表示該令牌不應置於任何前方。 |
TokenEndpointHttpMethod |
錯 | 字串 | HTTP 方法用於標記端點。 它可以是 Get 或 Post。 預設為 Post。 |
TokenEndpoint |
True | 字串 | 用來取得 JWT 標記的 URL 端點。 |
IsCredentialsInHeaders |
布林值 | 指示是否以基本認證標頭形式傳送憑證的值 () true 或實體 (POST) ,使用 false. userToken 時會忽略。 預設為 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 |
物件 | 在向權杖端點發送請求時,應包含的自訂查詢參數。 | |
Headers |
物件 | 在向權杖端點發送請求時,要包含的自訂標頭。 | |
RequestTimeoutInSeconds |
整數 | 請求超時只需幾秒鐘。 預設值為 100,最大值為 300。 |
注意事項
限制
- 取得令牌時需使用者名稱與密碼驗證
- 不支援基於 API 金鑰的令牌請求
- 不支援沒有使用者名稱和密碼 (自訂標頭認證)
請求設定
請求部分定義了 CCF 資料連接器如何向你的資料來源發送請求,例如 (API 端點,以及該端點的輪詢頻率) 。
| 欄位 | 必要項目 | 類型 | 描述 |
|---|---|---|---|
ApiEndpoint |
正確。 | 字串 | 此欄位決定遠端伺服器的網址,並定義從哪個端點擷取資料。 |
RateLimitQPS |
整數 | 此欄位定義初始請求在一秒內允許的呼叫或查詢次數。 它不適用於分頁請求。 若要限制分頁,也設定 PaginatedCallsPerSecond為 。 |
|
PaginatedCallsPerSecond |
雙倍 (0......1000) | 此欄位定義了每秒允許對 RESTful API 的分頁請求呼叫次數。 它會在每個分頁的 API 呼叫之間引入毫秒的延遲 (1000 / paginatedCallsPerSecond) 。 這種限速僅適用於分頁請求,且與 RateLimitQPS控制初始請求速率的 分開。 通常會設定相同的值,以 RateLimitQPS 尊重資料來源在所有請求中的速率限制。
0 value 表示不會套用分頁限速。 |
|
RateLimitConfig |
物件 | 此欄位定義了 RESTful API 的速率限制配置。 更多資訊請參考 RateLimitConfig 範例。 |
|
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...300) | 此欄位定義請求逾時時間為秒數。 預設值為 20。 |
|
IsPostPayloadJson |
布林值 | 此欄位決定有效載荷是否 POST 為 JSON 格式。 預設值為 false。 |
|
Headers |
物件 | 此欄位包含定義請求標頭的鍵值對。 | |
QueryParameters |
物件 | 此欄位包含定義請求查詢參數的鍵值對。 | |
StartTimeAttributeName |
當數 EndTimeAttributeName 值被設定時,這點是正確的。 |
字串 | 此欄位定義查詢開始時間的查詢參數名稱。 更多資訊請參考 StartTimeAttributeName 範例。 |
EndTimeAttributeName |
設定時 StartTimeAttributeName 是真的。 |
字串 | 此欄位定義查詢結束時間的查詢參數名稱。 |
QueryTimeIntervalAttributeName |
字串 | 當端點需要專門格式來查詢某一時間範圍的資料時,會使用此欄位。 使用這個屬性與QueryTimeIntervalPrependQueryTimeIntervalDelimiter參數。 更多資訊請參考 QueryTimeIntervalAttributeName 範例。 |
|
QueryTimeIntervalPrepend |
設定時 QueryTimeIntervalAttributeName 是真的。 |
字串 | 參考資料 QueryTimeIntervalAttributeName。 |
QueryTimeIntervalDelimiter |
設定時 QueryTimeIntervalAttributeName 是真的。 |
字串 | 參考資料 QueryTimeIntervalAttributeName。 |
QueryParametersTemplate |
字串 | 此欄位參考查詢範本,用於進階情境中傳遞參數。 例如: "queryParametersTemplate": "{'cid': 1234567, 'cmd': 'reporting', 'format': 'siem', 'data': { 'from': '{_QueryWindowStartTime}', 'to': '{_QueryWindowEndTime}'}, '{_APIKeyName}': '{_APIKey}'}"。 |
|
InitialCheckpointTimeUtc |
DateTime(UTC) | 指定在沒有儲存檢查點的情況下,第一個輪詢的查詢開始時間。 一旦檢查點在第一次成功輪詢後被持久化,該值將被忽略。 此設定僅在連接器的請求設定定義了起始時間查詢參數 (startTimeAttributeName 或 取代 {_QueryWindowStartTime} 權杖) 但未設定對應的結束時間參數時生效。 對於僅依賴分頁游標或標記的連接器則無影響。 格式:ISO 8601 UTC 日期時間 (例如, 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 查詢參數。
"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 |
True | 字串列表 | 在回應 JSON 中定義訊息的路徑。 JSON 路徑表達式指定 JSON 結構中元素或元素集合的路徑。 |
SuccessStatusJsonPath |
字串 | 定義回應 JSON 中成功訊息的路徑。 當這個參數被定義後, SuccessStatusValue 該參數也應該被定義。 |
|
SuccessStatusValue |
字串 | 定義回應 JSON 中成功訊息值的路徑。 | |
IsGzipCompressed |
布林值 | 判斷回應是否壓縮成 GZIP 檔案。 | |
format |
True | 字串 | 決定格式 json為 、 、 csv或 xml。 |
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 格式為預期。 回應中包含了房產 價值中所要求的資料。 回應屬性 狀態 指示只有當值為 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 回應包含以下其中之一:
- HTTP 回應標頭。
Link - 一個 JSON 路徑,用來從回應主體擷取連結。
PersistentLinkHeader-類型分頁具有與 LinkHeader相同的特性,但連結標頭會持續存在於後端儲存中。 此選項允許跨查詢視窗分頁連結。
例如,有些 API 不支援查詢開始時間或結束時間。 取而代之的是支援伺服器端 游標。 你可以用持久頁面類型來記住伺服器端 游標。 更多資訊請參閱 「游標是什麼?」。
注意事項
連接器只能執行 PersistentLinkHeader 一個查詢,以避免伺服器端 游標的競賽條件。 這個問題可能會影響延遲。
| 欄位 | 必要項目 | 類型 | 描述 |
|---|---|---|---|
LinkHeaderTokenJsonPath |
錯 | 字串 | 利用此特性指示回應文中該值的來源。 例如,若資料來源回傳以下 JSON: { nextPage: "foo", value: [{data}]},則值 LinkHeaderTokenJsonPath 為 $.nextPage。 |
PageSize |
錯 | 整數 | 使用此特性來決定每頁事件數量。 |
PageSizeParameterName |
錯 | 字串 | 使用此查詢參數名稱來表示頁面大小。 |
PagingInfoPlacement |
錯 | 字串 | 利用此特性來判斷分頁資訊的填充方式。 接受其中之一 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 時才會用。 |
PagingInfoPlacement |
錯 | 字串 | 這個欄位決定了分頁資訊的填充方式。 接受其中之一 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 |
錯 | 字串 | 決定請求中下一個頁面標頭名稱的欄位。 |
PagingInfoPlacement |
錯 | 字串 | 這個欄位決定了分頁資訊的填充方式。 接受其中之一 QueryString 或 RequestBody。 |
PagingQueryParamOnly |
錯 | 布林值 | 決定查詢參數的欄位。 若設為 true,則省略除分頁查詢參數外的所有其他查詢參數。 |
範例:
"paging": {
"pagingType" : "NextPageToken",
"nextPageRequestHeader" : "ETag",
"nextPageTokenResponseHeader" : "ETag"
}
"paging": {
"pagingType" : "PersistentToken",
"nextPageParaName" : "gta",
"nextPageTokenJsonPath" : "$.alerts[-1:]._id"
}
設定偏移量
Offset-type 分頁指定要跳過的頁面數,以及請求中每頁可檢索事件數量的限制。 用戶端會從資料集中擷取特定範圍的項目。
| 欄位 | 必要項目 | 類型 | 描述 |
|---|---|---|---|
PageSize |
錯 | 整數 | 每頁事件數量。 |
PageSizeParameterName |
錯 | 字串 | 頁面大小的查詢參數名稱。 |
OffsetParaName |
錯 | 字串 | 下一個請求查詢參數名稱。 CCF 計算每個請求的偏移值 (所有被攝取的事件 + 1) 。 |
PagingInfoPlacement |
錯 | 字串 | 這個欄位決定了分頁資訊的填充方式。 接受其中之一 QueryString 或 RequestBody。 |
PagingQueryParamOnly |
錯 | 布林值 | 決定查詢參數的欄位。 若設為 true,則省略除分頁查詢參數外的所有其他查詢參數。 |
例如:
"paging": {
"pagingType": "Offset",
"offsetParaName": "offset",
"pageSize": 50,
"pagingQueryParamOnly": true,
"pagingInfoPlacement": "QueryString"
}
設定 CountBasedPaging
CountBasedPaging-類型分頁允許用戶端指定回應中要回傳的項目數量。 此功能對於支援以計數參數作為回應有效載荷一部分分頁的 API 非常有用。
| 欄位 | 必要項目 | 類型 | 描述 |
|---|---|---|---|
pageNumberParaName |
True | 字串 | HTTP 請求中頁號的參數名稱。 |
PageSize |
錯 | 整數 | 每頁事件數量。 |
ZeroBasedIndexing |
錯 | 布林值 | 標記顯示計數為零。 |
HasNextFlagJsonPath |
錯 | 字串 | HTTP 回應有效載荷中表示有更多頁面的旗標的 JSON 路徑。 |
TotalResultsJsonPath |
錯 | 字串 | HTTP 回應有效載荷中總數的 JSON 路徑。 |
PageNumberJsonPath |
錯 | 字串 | HTTP 回應有效載荷中頁號的 JSON 路徑。 若提供, totalResultsJsonPath 則為必備。 |
PageCountJsonPath |
錯 | 字串 | HTTP 回應有效載荷中頁面的 JSON 路徑。 若提供, totalResultsJsonPath 則為必備。 |
PagingInfoPlacement |
錯 | 字串 | 這個欄位決定了分頁資訊的填充方式。 接受其中之一 QueryString 或 RequestBody。 |
PagingQueryParamOnly |
錯 | 布林值 | 決定查詢參數的欄位。 若設為 true,則省略除分頁查詢參數外的所有其他查詢參數。 |
例如:
"paging": {
"pagingType" : "CountBasedPaging",
"pageNumberParaName" : "page",
"pageSize" : 10,
"zeroBasedIndexing" : true,
"hasNextFlagJsonPath" : "$.hasNext",
"totalResultsJsonPath" : "$.totalResults",
"pageNumberJsonPath" : "$.pageNumber",
"pageCountJsonPath" : "$.pageCount"
}
DCR 配置
| 欄位 | 必要項目 | 類型 | 描述 |
|---|---|---|---|
DataCollectionEndpoint |
True | 字串 | 資料收集端點 (DCE) 。 例如:https://example.ingest.monitor.azure.com。 |
DataCollectionRuleImmutableId |
True | 字串 | DCR 不可變 ID。 可透過查看 DCR 建立回應或使用 DCR API 來查詢。 |
StreamName |
True | 字串 | 這個值即為 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": ["$"]
}
}
}