驗證回應資料

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

這項功能僅支援 Google Cloud 專案。 如果是 App Hub 設定,請選取 App Hub 主專案或管理專案。

如何驗證回應資料

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

Google Cloud 控制台

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

  1. 前往 Google Cloud 控制台的「運作時間檢查」頁面:

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

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

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

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

Cloud Monitoring API

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

ContentMatcher 物件包含下列欄位:

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

    請勿使用 CONTENT_MATCHER_OPTION_UNSPECIFIED 值。

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

  • jsonPathMatcher:儲存 JsonPathMatcher 物件,說明要搜尋的 JSON 路徑,以及如何執行比較。

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

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

驗證回應資料的選項

本節說明可用於驗證受檢查資源所傳送回應的字串比對策略。針對每項策略,您要指定值,並指出在回應資料中找到該值時,運作時間檢查會通過還是失敗。

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

  • HTTP 和 HTTPS 運作時間檢查:系統會搜尋前 4 MB 的資料。
  • TCP 運作時間檢查:搜尋前 1 MB 的內容。

搜尋字串常值子字串

Google Cloud 控制台

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

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

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

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

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. 如要驗證設定,請按一下「測試」

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

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

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} 傳遞 失敗

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

在 JSON 回應中搜尋特定欄位

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

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

  • $.type 與根物件的 type 欄位相符。
  • $.[0].address.city 與儲存在 JSON 回應第一個陣列元素中的 address 物件的 city 欄位相符。
  • $.content[0].phonecontent 欄位第一個陣列元素的 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 回應的公開網站。

將 JSON 路徑與數字或字串常值比較

Google Cloud 控制台

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

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

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

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

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」欄會指出要測試的元素,「測試值」欄則會列出值。接下來兩欄會指定測試類型和運作時間檢查結果。

比較 JSONPath 與規則運算式

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

Google Cloud 控制台

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

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

如要設定運作時間檢查,在回應資料中的特定 JSON 路徑與規則運算式相符時失敗,請使用下列設定:

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

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」欄位則會列出規則運算式。接下來兩欄會指定測試類型和運作時間檢查結果。

後續步驟