添加监控 API编辑

使用指定的属性创建新的监控。监控可以是以下类型之一:HTTP、TCP、ICMP 或浏览器。根据监控类型,必填字段和默认字段可能有所不同。

请求编辑

POST <kibana 主机>:<端口>/api/synthetics/monitors

POST <kibana 主机>:<端口>/s/<空间 ID>/api/synthetics/monitors

先决条件编辑

您必须对 可观察性 部分中 合成监控 功能拥有 all 权限 Kibana 功能权限.

请求正文编辑

请求正文应包含要创建的监控的属性。必填字段和默认字段根据监控类型而有所不同。

通用字段:

name
(必填,字符串):监控的名称。
type
(必填,字符串):监控类型(例如,httptcpicmpbrowser)。
schedule

(可选,数字):监控的计划时间(以分钟为单位)。支持的值为 13510153060120240

  • HTTP、TCP 和 ICMP 监控的默认值为 3 分钟。
  • 浏览器监控的默认值为 10 分钟。
locations

(Array<SyntheticsLocationsType>) 部署监控的位置。监控可以在多个位置部署,以便您可以检测这些位置之间的可用性和响应时间差异。

要列出可用位置,您可以

  • 使用部署的 Kibana URL 运行 {locations-command}[elastic-synthetics locations] 命令。
  • 转到 合成监控管理 并单击 创建监控。位置将在 位置 中列出。
private_locations (Array<string>)

将监控部署到的 私有位置。这些私有位置是指您托管和管理的位置,而 locations 是由 Elastic 托管的。您可以使用位置名称指定私有位置。

要列出可用的私有位置,您可以

  • 使用部署的 Kibana URL 运行 {locations-command}[elastic-synthetics locations] 命令。
  • 转到 合成监控设置 并单击 私有位置。私有位置将在表格中列出。

您可以提供 locationsprivate_locations,或两者兼而有之。至少需要一个。

enabled
(可选,布尔值,默认值:true):是否启用监控。
tags
(可选,字符串数组):标签数组。
alert
(可选,对象,默认值:{ status: { enabled: true }, tls: { enabled: true } }):警报配置。
service.name
(可选,字符串):APM 服务名称。
timeout
(可选,数字,默认值:16):监控超时时间(以秒为单位),如果监控未在此时间内完成,则会失败。
namespace
(可选,字符串,默认值:"default"):命名空间字段应为小写且不包含空格。命名空间不得包含以下任何字符:*\/?"<>|、空格、,#:-
params
(可选,字符串):监控参数。
retest_on_failure
(可选,布尔值,默认值:true):启用或禁用监控失败时的重新测试。默认情况下,如果监控从“正常”变为“故障”,则会自动重新测试监控。如果重新测试的结果也是“故障”,则会创建错误,如果已配置,则会发送警报。然后,监控将根据定义的计划恢复运行。使用 retest_on_failure 可以减少与瞬态问题相关的噪音。

HTTP 监控字段:

url
(必填,字符串):要监控的 URL。
ssl
(可选,对象):用于 HTTPS 端点的 TLS/SSL 连接设置。如果您未指定设置,则使用系统默认值。有关完整的 SSL 选项,请参见 https://elastic.ac.cn/guide/en/beats/heartbeat/current/configuration-ssl.html
max_redirects
(可选,数字,默认值:0):要遵循的最大重定向次数。
mode

(可选,字符串,默认值:"any"):监控的模式。可以是 "all" 或 "any"。如果您使用 DNS 负载均衡器并希望 ping 指定主机名的每个 IP 地址,则应使用 all。

  • any:监控仅 ping 主机名的一个 IP 地址。
  • all:监控 ping 主机名的所有可解析 IP。
ipv4
(可选,布尔值,默认值:true):是否使用 ipv4 协议 ping。
ipv6
(可选,布尔值,默认值:true):是否使用 ipv6 协议 ping。
username
(可选,字符串):用于对服务器进行身份验证的用户名。凭据将与请求一起传递。
password
(可选,字符串):用于对服务器进行身份验证的密码。凭据将与请求一起传递。
proxy_headers
(可选,对象):在 CONNECT 请求期间发送到代理的附加标头。
proxy_url
(可选,字符串):此监控要使用的代理的 URL。
response
(可选,对象):控制 HTTP 响应正文内容索引到 http.response.body.contents 字段。
response.include_body

(可选,布尔值,默认值:true):控制 HTTP 响应正文内容索引到 http.response.body.contents 字段。

  • include_body ("on_error" | "never" | "always", 默认值:on_error) 将 response.include_body 设置为以下选项之一。

    • on_error:如果在检查期间遇到错误,则包含正文。这是默认值。
    • never:从不包含正文。
    • always:始终包含正文。
  • include_body_max_bytes (可选,数字,默认值:1024) 设置 response.include_body_max_bytes 以控制存储的正文内容的最大大小。
check

(可选,对象):检查请求设置。

  • request 要发送到远程主机的可选请求。在 check.request 下,指定以下选项

    • method ("HEAD" | "GET" | "POST" | "OPTIONS"):要使用的 HTTP 方法。
    • headers (可选,对象):要发送的附加 HTTP 标头的字典。默认情况下,合成监控会设置 User-Agent 标头以标识自身。
    • body (可选,字符串):可选的请求正文内容。

      Example: This POSTs an x-www-form-urlencoded string to the endpoint
      {
        "check": {
          "request": {
            "method": "POST",
            "headers": {
              "Content-Type": "application/x-www-form-urlencoded"
            },
            "body": "name=first&email=someemail%40someemailprovider.com"
          }
        }
      }
  • response 预期的响应。在 check.response 下,指定以下选项

    • status 预期状态代码的列表。默认情况下,4xx 和 5xx 代码被视为故障。其他代码被视为正常。
    • headers (可选,对象):预期 HTTP 标头的字典。如果未找到标头,则检查失败。
    • body.positive:要与正文输出匹配的正则表达式列表。只需要一个表达式匹配即可。示例:此监控检查响应正文中是否存在字符串 foo 或 Foo
    • body.negative:要与正文输出负匹配的正则表达式列表。如果单个表达式匹配,则返回匹配失败。支持高达 100 MiB 的 HTTP 响应正文。此监控检查如果响应正文中根本不存在 bar 或 Bar,则匹配成功,如果响应正文中存在 bar 或 Bar,则匹配失败
    • json:在将正文解析为 JSON 时对正文执行的表达式列表。正文大小必须小于或等于 100 MiB。

      • description (字符串):检查的描述。
      • expression (字符串):以下配置显示了当正文包含 JSON 时如何使用 gval 表达式检查响应

TCP 监控字段:

host
(必填,字符串):要监控的主机;它可以是 IP 地址或主机名。主机可以使用冒号(例如,“example.com:9200”)包含端口。
ssl
(可选,对象):用于 HTTPS 端点的 TLS/SSL 连接设置。如果您未指定设置,则使用系统默认值。有关完整的 SSL 选项,请参见 https://elastic.ac.cn/guide/en/beats/heartbeat/current/configuration-ssl.html
check

要发送到远程主机的可选有效负载字符串以及预期的答案。如果未指定有效负载,则如果连接尝试成功,则假定端点可用。如果指定 send 但未指定 receive,则任何响应都被视为正常。如果指定 receive 但未指定 send,则不会发送任何有效负载,但客户端期望在连接时收到“hello 消息”或“横幅”形式的有效负载。

  • send (可选,字符串):check.send: Hello World
  • receive (可选,字符串):check.receive: Hello World
proxy_url
(可选,字符串):连接到服务器时要使用的 SOCKS5 代理的 URL。该值必须是使用 socks5:// 方案的 URL。如果 SOCKS5 代理服务器需要客户端身份验证,则可以在 URL 中嵌入用户名和密码。使用代理时,主机名将在代理服务器上解析,而不是在客户端上解析。您可以通过设置 proxy_use_local_resolver 选项来更改此行为。
proxy_use_local_resolver
(可选,布尔值,默认值:false):一个布尔值,用于确定是否在本地解析主机名,而不是在代理服务器上解析主机名。默认值为 false,这意味着名称解析在代理服务器上进行。

ICMP 监控字段:

host
(必填,字符串):要 ping 的主机。
wait
(可选,数字,默认值:1):等待时间(以秒为单位)。

浏览器监控字段:

inline_script
(必填,字符串):内联脚本。
screenshots
(可选,字符串,默认值:"on"):屏幕截图选项,可以是 "on"、"off" 或 "only-on-failure"。
synthetics_args
(可选,数组):合成监控代理 CLI 参数。
ignore_https_errors
(可选,布尔值,默认值:false):是否忽略 HTTPS 错误。
playwright_options
(可选,对象):Playwright 选项。

示例编辑

以下是一些创建不同类型监控器的示例

HTTP 监控器:创建 HTTP 监控器以检查网站的可用性。

POST /api/synthetics/monitors
{
  "type": "http",
  "name": "Website Availability",
  "url": "https://example.com",
  "tags": ["website", "availability"],
  "locations": ["united_kingdom"]
}

TCP 监控器:创建 TCP 监控器以监控服务器的可用性。

POST /api/synthetics/monitors
{
  "type": "tcp",
  "name": "Server Availability",
  "host": "example.com",
  "private_locations": ["my_private_location"]
}

ICMP 监控器:创建 ICMP 监控器以执行 ping 检查。

POST /api/synthetics/monitors
{
  "type": "icmp",
  "name": "Ping Test",
  "host": "example.com",
  "locations": ["united_kingdom"]
}

浏览器监控器:创建浏览器监控器以检查网站。

POST /api/synthetics/monitors
{
  "type": "browser",
  "name": "Example journey",
  "inline_script": "step('Go to https://google.com.co', () => page.goto('https://www.google.com'))",
  "locations": ["united_kingdom"]
}