验证响应数据

本文档介绍了如何配置正常运行时间检查,以验证被检查资源发送的 HTTP 响应代码和响应数据。默认情况下,HTTP 拨测会验证响应代码是否为 2xx。此外,默认情况下,系统不会验证响应数据。不过,您可以修改这些设置。例如,您可以将 HTTP 正常运行时间检查配置为接受 2xx3xx 响应代码。对于所有拨测,您都可以指定响应数据必须或不得包含的值,以便拨测成功。

如何验证响应数据

在创建或修改正常运行时间检查时,您可以配置 Cloud Monitoring 来验证所检查资源的响应数据。

Google Cloud 控制台

如需创建用于验证响应数据的正常运行时间检查,请执行以下操作:

  1. 在 Google Cloud 控制台中,前往  拨测页面:

    前往拨测

    如果您使用搜索栏查找此页面,请选择子标题为监控的结果。

  2. 点击创建正常运行时间检查
  3. 输入标题,然后点击下一步
  4. 输入目标,然后点击下一步
  5. 配置响应验证

    • 如需验证响应数据,请确保系统显示已启用内容匹配,然后填写与响应验证相关的字段。如需了解这些选项,请参阅本文档的下一部分。
    • 对于 HTTP 拨测,请配置可接受的响应代码。默认情况下,HTTP 拨测会将任何 2xx 响应标记为成功响应。
  6. 点击下一步,完成正常运行时间检查配置。

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. 如需验证配置,请点击测试

如需配置在响应数据包含字面量子字符串时让正常运行时间检查失败,请使用以下设置:

  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} 通过 未通过

在前面的表格中,“响应数据”列描述了所检查资源返回的数据,而“正则表达式”列列出了正则表达式。接下来的两列用于指定测试类型和正常运行时间检查结果。

在 JSON 响应中搜索特定字段

您可以配置正常运行时间检查来验证 JSONpath。选择 JSONPath 测试后,该测试会将路径值与数字、字符串字面量或正则表达式进行比较:

指定 JSONPath 时,您必须使用 $. 指定根对象,然后跟随特定字段标识符。如果 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,并在 content 字段中输入完整值:

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

如果您有兴趣试用这些选项,请找到返回 JSON 响应的公共网站。例如,请参阅 JSON 测试

将 JSONpath 与数字或字符串字面量进行比较

Google Cloud 控制台

如需配置在响应数据中的特定 JSONpath 与字符串字面量匹配时让服务正常运行情况检查通过,请使用以下设置:

  1. 响应内容匹配类型菜单中,选择与 JSONPath 中的内容匹配
  2. JSONPath 字段中输入路径。
  3. 响应内容字段中输入数字或字符串字面量。
  4. 如需验证配置,请点击测试

如需配置在响应数据中的特定 JSONpath 与字符串字面量匹配时让正常运行情况检查失败,请使用以下设置:

  1. 响应内容匹配类型菜单中,选择与 JSONPath 中的内容不匹配
  2. 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 列用于标识要测试的元素,Test value 列用于列出相应值。接下来的两列用于指定测试类型和正常运行时间检查结果。

将 JSONPath 与正则表达式进行比较

正则表达式匹配支持匹配字符串、数字、布尔值和 null JSON 值。

Google Cloud 控制台

如需配置在响应数据中的特定 JSONpath 与正则表达式匹配时让正常运行情况检查通过,请使用以下设置:

  1. 响应内容匹配类型菜单中,选择与 JSONPath 中的内容匹配
  2. JSONPath 字段中输入路径。
  3. 响应内容字段中输入正则表达式。
  4. 如需验证配置,请点击测试

如需配置在响应数据中的特定 JSONpath 与正则表达式匹配时让正常运行时间检查失败,请使用以下设置:

  1. 响应内容匹配类型菜单中,选择与 JSONPath 中的内容不匹配
  2. 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 列用于列出正则表达式。接下来的两列用于指定测试类型和正常运行时间检查结果。

后续步骤