驗證回應資料

本文件說明如何設定運作時間檢查,以驗證 HTTP 回應代碼和受檢查資源傳送的回應資料。根據預設,HTTP 運作時間檢查會驗證回應代碼是否為 2xx。此外,根據預設,系統不會驗證回應資料。不過,您可以修改這些設定。舉例來說,您可以設定 HTTP 運作時間檢查,接受 2xx3xx 回應代碼。針對所有運作時間檢查,您可以指定回應資料必須或不得包含的值,以便運作時間檢查成功。

這項功能僅支援 Google Cloud 專案。如要設定 App Hub,請選取 App Hub 主機專案或啟用應用程式的資料夾管理專案。

如何驗證回應資料

您可以在建立或編輯運作時間檢查時,設定 Cloud Monitoring 驗證已檢查資源的回應資料。

Google Cloud 控制台

如要建立運作時間檢查來驗證回應資料,請執行下列操作:

  1. 在 Google Cloud 控制台中,前往 「Uptime checks」頁面:

    前往「Uptime checks」(運作時間檢查)

    如果您是使用搜尋列尋找這個頁面,請選取子標題為「Monitoring」的結果

  2. 在 Google Cloud 控制台的工具列中,選取您的 Google Cloud 專案。如要設定 App Hub,請選取 App Hub 主機專案或啟用應用程式的資料夾管理專案。
  3. 按一下「建立運作時間檢查」
  4. 輸入標題,然後點選「下一步」
  5. 輸入目標,然後點選「下一步」
  6. 設定「回應驗證」

    • 如要驗證回應資料,請確認畫面上顯示「Content matching is enabled」,然後填寫與回應驗證相關的欄位。如要瞭解這些選項,請參閱本文的下一節。
    • 針對 HTTP 運作時間檢查,請設定可接受的回應代碼。根據預設,HTTP 運作時間檢查會將任何 2xx 回應標示為成功回應。
  7. 按一下「下一步」,然後完成運作時間檢查設定。

Cloud Monitoring API

如要設定運作時間檢查來驗證回應資料,請填入 UptimeCheckConfig 物件的 contentMatchers 陣列。

ContentMatcher 物件包含下列欄位:

  • matcher:說明比較方式。如需值清單,請參閱 ContentMatcherOption

    請勿使用 CONTENT_MATCHER_OPTION_UNSPECIFIED 值。

  • content:儲存要搜尋的回應資料值。值為字串常值或規則運算式。

  • jsonPathMatcher:儲存 JsonPathMatcher 物件,說明要搜尋哪個 JSONpath,以及如何執行比較。

    除非運作時間檢查是驗證特定 JSONpath,否則請省略這個欄位。

本文件的其餘部分會說明如何使用內容比對選項。

驗證回應資料的選項

本節說明您可以用來驗證已檢查資源傳送的回應的字串比對策略。針對每項策略,您可以指定值,以及在回應資料中找到該值時,運作時間檢查是否會通過或失敗。

系統可能不會搜尋已檢查資源的完整回應:

  • HTTP 和 HTTPS 運作時間檢查:搜尋前 4 MB。
  • TCP 正常運作時間檢查:搜尋前 1 MB 的內容。

搜尋常值子字串

Google Cloud 控制台

如要設定運作時間檢查,讓系統在回應資料包含文字常值子字串時通過,請使用下列設定:

  1. 在「回應內容比對類型」選單中選取「包含」
  2. 在「回應內容」欄位中輸入文字子字串。
  3. 如要驗證設定,請按一下「Test」

如要設定在回應資料包含文字子字串時,運作時間檢查作業會失敗,請使用下列設定:

  1. 在「回應內容比對類型」選單中選取「不包含」
  2. 在「回應內容」欄位中輸入文字子字串。
  3. 如要驗證設定,請按一下「Test」

Cloud Monitoring API

如要設定當回應資料包含文字值子串時,讓服務時間檢查通過,請使用下列值:

...
"contentMatchers": [
    {
      "content": "Set to the string to be matched.",
      "matcher": "CONTAINS_STRING"
    }
],
...

如要設定當回應資料包含文字常值子字串時,上線時間檢查作業會失敗,請使用下列值:

...
"contentMatchers": [
    {
      "content": "Set to the string to be matched.",
      "matcher": "NOT_CONTAINS_STRING"
    }
],
...

下表顯示不同回應資料、測試字串和測試類型的運作時間檢查狀態:

運作時間檢查狀態       
回應資料 測試字串 包含 不包含
abcd abcd 傳遞 失敗
abc abcd 失敗 傳遞
abc a 傳遞 失敗
Uptime Checks Uptime 傳遞 失敗
Uptime Checks uptime 失敗 傳遞

在前述表格中,「回應資料」欄會說明已檢查資源傳回的資料,而「測試字串」欄則會列出字串文字常值。接下來的兩個欄會指定測試類型和運作時間檢查結果。

使用規則運算式進行搜尋

Google Cloud 控制台

如要設定運作時間檢查,讓系統在回應資料符合規則運算式時通過,請使用下列設定:

  1. 在「回覆內容比對類型」選單中,選取「與規則運算式相符」
  2. 在「回應內容」欄位中輸入規則運算式。
  3. 如要驗證設定,請按一下「Test」

如要設定運作時間檢查,在回應資料符合規則運算式時失敗,請使用下列設定:

  1. 在「回應內容比對類型」選單中,選取「與規則運算式不符」
  2. 在「回應內容」欄位中輸入規則運算式。
  3. 如要驗證設定,請按一下「Test」

Cloud Monitoring API

如要設定在回應資料符合規則運算式時,讓服務時間檢查通過,請使用下列值:

...
"contentMatchers": [
    {
      "content": "Set to the regular expression to be matched.",
      "matcher": "MATCHES_REGEX"
    }
],
...

如要設定在回應資料符合規則運算式時,讓正常運作時間檢查失敗,請使用下列值:

...
"contentMatchers": [
    {
      "content": "Set to the regular expression to be matched.",
      "matcher": "NOT_MATCHES_REGEX"
    }
],
...

下表顯示不同回應資料、規則運算式和測試類型的正常運作時間檢查狀態:

運作時間檢查狀態       
回應資料 規則運算式 與規則運算式相符 與規則運算式不符
abcd abcd 傳遞 失敗
Uptime Checks [uU]ptime 傳遞 失敗
Uptime Checks [a-z]{6} 失敗 傳遞
Uptime Checks [a-zA-Z]{6} 傳遞 失敗

在前述表格中,「回應資料」欄會說明已檢查資源傳回的資料,而「規則運算式」欄則會列出規則運算式。接下來的兩個欄會指定測試類型和運作時間檢查結果。

在 JSON 回應中搜尋特定欄位

您可以設定運作時間檢查來驗證 JSONpath。選取 JSONpath 測試時,系統會將路徑值與數字、字串文字常量或規則運算式進行比較:

指定 JSONpath 時,您必須使用 $. 指定根物件,然後再附上特定欄位 ID。如果 JSON 回應包含元素陣列,請使用方括號 [] 來識別要比對的特定陣列元素。以下範例說明路徑語法:

  • $.type 與根物件的 type 欄位相符。
  • $.[0].address.city 會比對 JSON 回應第一個陣列元素中儲存的 address 物件中的 city 欄位。
  • $.content[0].phone 會比對 content 欄位的陣列第一個元素的 phone 欄位。content 欄位是根物件的子項。

您可以設定正常運作時間測試,以便比對多個欄位。請參考下列 JSON:

[
  {
    ...
    "address": {
      ...
      "city": "Gwenborough",
      "geo": {
        "lat": "-37.3159",
        "lng": "81.1496"
      }
    },
  },
  ...
]

如要比對第一個陣列元素中 geo 欄位的完整路徑,請將 JSONpath 設為 $.[0].address.geo,然後在內容欄位中輸入完整值:

{
  "lat": "-37.3159",
  "lng": "81.1496"
}

如果您想嘗試這些選項,請找出會傳回 JSON 回應的公開網站。

將 JSONpath 與數字或字串常值進行比較

Google Cloud 控制台

如要設定運作時間檢查,讓系統在回應資料中的特定 JSONpath 與字串文字相符時通過,請使用下列設定:

  1. 在「回應內容比對類型」選單中,選取「與 JSONPath 中的內容相符」
  2. 在「JSONPath」JSONPath欄位中輸入路徑。
  3. 在「回應內容」欄位中輸入數字或字串文字。
  4. 如要驗證設定,請按一下「Test」

如要設定運作時間檢查,當回應資料中的特定 JSONpath 與字串文字相符時,檢查作業就會失敗,請使用下列設定:

  1. 在「回應內容比對類型」選單中,選取「與 JSONPath 中的內容不符」
  2. 在「JSONPath」JSONPath欄位中輸入路徑。
  3. 在「回應內容」欄位中輸入數字或字串文字。
  4. 如要驗證設定,請按一下「Test」

Cloud Monitoring API

如要設定當 JSON 格式回應中的特定欄位與數字或字串文字相符時,讓正常運作時間檢查通過,請為 ContentMatcher 物件使用下列值:

...
"contentMatchers": [
    {
       "content" : "Set to a number, a boolean, or the string to be matched.",
       "matcher" : "MATCHES_JSON_PATH",
       "jsonPathMatcher" : {
           "jsonPath" : "Set to the JSONpath.",
           "jsonMatcher" : "EXACT_MATCH"
    }
],
...

如要將正常運作時間檢查設為在 JSON 格式回應中的特定欄位與數字或字串文字相符時失敗,請為 ContentMatcher 物件使用下列值:

...
"contentMatchers": [
    {
       "content" : "Set to a number, a boolean, or the string to be matched.",
       "matcher" : "NOT_MATCHES_JSON_PATH",
       "jsonPathMatcher" : {
           "jsonPath" : "Set to the JSONpath.",
           "jsonMatcher" : "EXACT_MATCH"
    }
],
...

為說明 JSONpath 字串比對測試的運作方式,請參考下列 JSON 回應資料:

{
    "name": "Sample Uptime Check",
    "type": "JSONpath",
    "content": [
        {
            "id": 1,
            "phone": "1234567890",
            "alias": "Exact",
            "enabled": true,
        },
        {
            "id": 2,
            "phone": "1234512345",
            "alias": "Regex",
            "enabled": false,
        }
    ]
}

下表顯示上一個回應的正常運作時間檢查狀態,但針對不同的路徑、測試值和測試類型:

運作時間檢查狀態       
JSONpath 測試值 JSONpath 比對 JSONpath 不符
$.type "JSONpath" 傳遞 失敗
$.name "Sample" 失敗 傳遞
$.name "Sample Uptime Check" 傳遞 失敗
$.content[0].id 1 傳遞 失敗
$.content[0].alias "Exact" 傳遞 失敗
$.content[0].enabled true 傳遞 失敗

在前述表格中,「JSONpath」欄會指出要測試的元素,「Test value」欄則會列出該元素的值。接下來的兩個資料欄會指定測試類型和運作時間檢查結果。

比較 JSONPath 和規則運算式

規則運算式比對支援字串、數字、布林值和空值 JSON 值的比對。

Google Cloud 控制台

如要設定運作時間檢查,讓系統在回應資料中的特定 JSONpath 與規則運算式相符時通過,請使用下列設定:

  1. 在「回應內容比對類型」選單中,選取「與 JSONPath 中的內容相符」
  2. 在「JSONPath」JSONPath欄位中輸入路徑。
  3. 在「回應內容」欄位中輸入規則運算式。
  4. 如要驗證設定,請按一下「Test」

如要設定運作時間檢查,當回應資料中的特定 JSONpath 與規則運算式相符時,檢查作業就會失敗,請使用下列設定:

  1. 在「回應內容比對類型」選單中,選取「與 JSONPath 中的內容不符」
  2. 在「JSONPath」JSONPath欄位中輸入路徑。
  3. 在「回應內容」欄位中輸入規則運算式。
  4. 如要驗證設定,請按一下「Test」

Cloud Monitoring API

如要設定當 JSON 格式回應中的特定欄位與規則運算式相符時,讓服務時間檢查通過,請為 ContentMatcher 物件使用下列值:

...
"contentMatchers": [
    {
       "content" : "Set to the regular expression to be matched."
       "matcher" : "MATCHES_JSON_PATH",
       "jsonPathMatcher" : {
           "jsonPath" : "Set to the JSONpath.",
           "jsonMatcher" : "REGEX_MATCH"
    }
],
...

如要將上線時間檢查設為在 JSON 格式回應中的特定欄位與規則運算式相符時失敗,請為 ContentMatcher 物件使用下列值:

...
"contentMatchers": [
    {
       "content" : "Set to the regular expression to be matched.",
       "matcher" : "NOT_MATCHES_JSON_PATH",
       "jsonPathMatcher" : {
           "jsonPath" : "Set to the JSONpath.",
           "jsonMatcher" : "REGEX_MATCH"
    }
],
...

為了說明 JSONpath 規則運作方式,請參考以下 JSON 回應資料:

{
    "name": "Sample Uptime Check",
    "type": "JSONpath",
    "content": [
        {
            "id": 1,
            "phone": "1234567890",
            "alias": "Exact",
            "enabled": true,
        },
        {
            "id": 2,
            "phone": "1234512345",
            "alias": "Regex",
            "enabled": false,
        }
    ]
}

下表顯示上一個回應的正常運作時間檢查狀態,但針對不同的路徑、規則運算式和測試類型:

運作時間檢查狀態       
JSONpath 規則運算式 JSONpath 與規則運算式相符 JSONPath 與規則運算式不符
$.type [A-Z]{4}Path 傳遞 失敗
$.name Sample 失敗 傳遞
$.name .*Sample.* 傳遞 失敗
$.content[1].id 2 傳遞 失敗
$.content[1].phone "[12345]{2}" 傳遞 失敗
$.content[1].enabled f.* 傳遞 失敗

在上一個表格中,JSONpath 欄會指出要測試的元素,而 Regex 欄會列出規則運算式。接下來的兩個資料欄會指定測試類型和運作時間檢查結果。

後續步驟