配置轻量级监控编辑

在 Synthetics 应用程序中,您可以使用以下轻量级检查来监控网络端点的状态

  • HTTP: 监控您的网站。HTTP 监控检查以确保特定端点返回正确的状态代码并显示正确的文本。
  • ICMP: 检查您的主机的可用性。ICMP 监控使用 ICMP(v4 和 v6)回声请求来检查您正在 ping 的主机的网络可达性。这将告诉您主机是否可用并连接到网络,但不会告诉您主机上的服务是否正在运行。
  • TCP: 监控您的主机上运行的服务。TCP 监控检查各个端口以确保服务可访问且正在运行。

轻量级监控可以使用 Synthetics 应用程序项目监控 进行配置。

Synthetics 应用程序编辑

要在 Synthetics 应用程序中使用 UI,请转到 Kibana 中的 Synthetics 应用程序以创建和配置监控。有关分步说明,请参阅 使用 Synthetics 应用程序

Synthetics Create monitor UI

项目监控编辑

要使用 YAML 文件创建项目监控,请 设置项目 并在 lightweight 目录中的 YAML 文件中配置监控。

在每个 YAML 文件中,定义一组 monitors 来检查您的远程主机。每个 monitor 项目是 YAML 列表中的一个条目,以破折号 (-) 开头。您可以定义要使用的监控类型、要检查的主机以及其他可选设置。

以下示例配置了三个监控,它们通过 httpicmptcp 协议进行检查,并演示了如何使用 TCP 回声响应验证

heartbeat.monitors:
- type: http
  name: Todos Lightweight
  id: todos-lightweight
  urls: "https://elastic.github.io/synthetics-demo/"
  schedule: '@every 1m'
- type: icmp
  id: ping-myhost
  name: My Host Ping
  hosts: "myhost"
  schedule: '@every 5m'
- type: tcp
  id: myhost-tcp-echo
  name: My Host TCP Echo
  hosts: "myhost:777"  # default TCP Echo Protocol
  check.send: "Check"
  check.receive: "Check"
  schedule: '@every 60s'

有一些常见的监控配置选项,这些选项对于所有轻量级监控类型都是相同的。有关完整列表,请参阅 常用选项

每种监控类型还具有特定于该类型的其他配置选项。请参阅

tcphttp 监控类型都支持 SSL/TLS 和一些代理设置。

常用选项编辑

在定义合成监控时,您可以在任何位置指定以下选项。这些选项对于所有监控都是相同的。每种监控类型都具有特定于该监控类型的其他配置选项。

选项(类型) 描述

type
("http" | "icmp" | "tcp")

必需. 要运行的监控类型。其中之一

  • http: 通过 HTTP 连接,并可选地验证主机是否返回预期响应。
  • icmp: 使用 ICMP(v4 和 v6)回声请求 ping 配置的主机。需要特殊权限或 root 访问权限。
  • tcp: 通过 TCP 连接,并可选地通过发送和/或接收自定义有效负载来验证端点。

id
(字符串)

必需. 此配置的唯一标识符。无论对监控配置进行任何更改,无论对任何配置字段进行任何更改,此标识符都不应更改。

示例:

id: uploader-service
id: http://example.net

当针对索引的监控数据进行查询时,这是您将要聚合的字段。它在导出的字段中显示为 monitor.id

如果您没有显式设置 id,则监控的配置将被哈希,并将使用生成的 value。此 value 将随着此监控的任何选项更改而更改,从而使随时间推移的聚合在更改之间变得不可能。因此,建议您手动设置此 value。

name
(字符串)

此监控的人类可读名称。

示例:

name: Uploader service
name: Example website

service.name
(字符串)

此监控的 APM 服务名称。对应于 service.name ECS 字段。在监控也使用 APM 的应用程序时设置此选项,以启用 Kibana 中 Synthetics 和 APM 数据之间的集成。

enabled
(布尔值)

监控是否启用。

默认值: true

示例:

enabled: false

schedule
(持续时间)

必需. 任务计划。

分辨率小于 1 分钟的计划将保存到最接近的分钟。例如,@every 5s 将在使用 CLI 推送监控时更改为 @every 60s

示例:
从监控启动时间开始,每 5 分钟运行一次任务。

schedule: @every 5m

timeout
(持续时间)

每次 ping 测试的总运行时间。这是允许用于测试连接和交换数据的总时间。

默认值: 16s

示例:

timeout: 2m

tags
(字符串 列表)

将与监控事件一起发送的标签列表。

示例:

tags:
  - tag one
  - tag two
tags: ["tag one", "tag two"]

mode
("any" | "all")

运行监控的两种模式之一

  • any: 监控仅 ping 主机的一个 IP 地址。
  • all: 监控 ping 主机的所有可解析 IP 地址。

默认值: any

示例:
如果您使用的是 DNS 负载均衡器,并且想要 ping 指定主机名的每个 IP 地址,则应使用 all

ipv4
(布尔值)

如果配置了主机名,是否使用 ipv4 协议 ping。

默认值: true

示例:

ipv4: false

ipv6
(布尔值)

如果配置了主机名,是否使用 ipv6 协议 ping。

默认值: true

示例:

ipv6: false

alert

启用或禁用此监控的警报。有关警报的更多信息,请参阅 警报

status.enabled (布尔值)

启用此监控的监控状态警报。

默认值: true

示例:

alert.status.enabled: true
tls.enabled (布尔值)

启用此监控的 TLS 证书警报。

默认值: true

示例:

alert.tls.enabled: true

retest_on_failure
(布尔值)

启用或禁用监控失败时的重新测试。默认值为 true

默认情况下,如果监控从“正常”变为“故障”,则会自动重新测试监控。如果重新测试的结果也是“故障”,则会创建一个错误,并且如果已配置,则会发送警报。然后,监控将根据定义的计划恢复运行。使用 retestOnFailure 可以减少与瞬态问题相关的噪音。

示例:

retest_on_failure: false

locations
(SyntheticsLocationsType 列表)

在何处部署监控。您可以在多个位置部署监控,以检测这些位置之间的可用性和响应时间差异。

要列出可用位置,您可以

示例:

locations: ["japan", "india"]
locations:
  - japan
  - india

这也可以使用以下方法设置
monitor.locations 在项目配置文件中
或通过 CLI 使用 push 上的 --location 标志

通过 CLI 定义的 value 优先于在轻量级监控配置中定义的 value,
并且在轻量级监控配置中定义的 value 优先于在项目配置文件中定义的 value。

private_locations
(字符串 列表)

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

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

  • 运行 elastic-synthetics locations 命令 并指定部署的 Kibana URL。这将获取与部署关联的所有可用私有位置。
  • 转到 Synthetics管理 并单击 创建监控。私有位置将在位置中列出。

示例:

private_locations: ["Private Location 1", "Private Location 2"]
private_locations:
  - Private Location 1
  - Private Location 2

这也可以使用以下方法设置
monitor.privateLocations 在项目配置文件中
或通过 CLI 使用 push 上的 --privateLocations 标志

通过 CLI 定义的 value 优先于在轻量级监控配置中定义的 value,
并且在轻量级监控配置中定义的 value 优先于在项目配置文件中定义的 value。

HTTP 选项编辑

此处描述的选项配置 Synthetics 通过 HTTP 连接,并可选地验证主机是否返回预期响应。

HTTP 监控的有效选项包括 所有通用选项 以及以下 HTTP 特定选项

选项(类型) 描述

hosts
(字符串)

必需. 要 ping 的 URL。

max_redirects
(数字)

Synthetics 将遵循的重定向总数。

默认情况下,Synthetics 不会遵循重定向,但会报告重定向的状态。如果设置为大于 0 的数字,Synthetics 将遵循该数量的重定向。

当此选项设置为大于 0 的值时,将不再报告 monitor.ip 字段,因为跨多个 IP 的多个 DNS 请求可能会返回多个 IP。细粒度的网络计时数据也不会被记录,因为重定向数据将跨越多个请求。具体来说,字段 http.rtt.content.ushttp.rtt.response_header.ushttp.rtt.total.ushttp.rtt.validate.ushttp.rtt.write_request.usdns.rtt.us 将被省略。

默认: 0

proxy_headers

CONNECT 请求期间发送到代理的附加标头。

proxy_url
(字符串)

HTTP 代理 URL。此设置是可选的。

示例:

http://proxy.mydomain.com:3128

username
(字符串)

用于向服务器进行身份验证的用户名。凭据与请求一起传递。此设置是可选的。

当您的 check.response 设置需要时,您需要指定凭据。例如,您可以检查 403 响应(check.response.status: [403])而无需设置凭据。

password
(字符串)

用于向服务器进行身份验证的密码。此设置是可选的。

ssl
(SSL)

与 HTTPS 端点一起使用的 TLS/SSL 连接设置。如果您未指定设置,则使用系统默认值。

示例:

- type: http
  id: my-http-service
  name: My HTTP Service
  hosts: "https://myhost:443"
  schedule: '@every 5s'
  ssl:
    certificate_authorities: ['/etc/ca.crt']
    supported_protocols: ["TLSv1.0", "TLSv1.1", "TLSv1.2"]

headers
(布尔值)

控制 HTTP 响应标头 http.response.body.headers 字段的索引。将 response.include_headers 设置为 false 以禁用。

默认值: true

response

控制 HTTP 响应正文内容索引到 http.response.body.contents 字段。

include_body ("on_error" | "never" | "always")

response.include_body 设置为以下列出的选项之一。

  • on_error: 如果在检查期间遇到错误,则包含正文。这是默认值。
  • never: 从不包含正文。
  • always: 始终包含检查的正文。
include_body_max_bytes (数字)

设置 response.include_body_max_bytes 以控制存储的正文内容的最大大小。

默认: 1024

check

request

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

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

示例: 此监控器将 x-www-form-urlencoded 字符串 POST 到端点 /demo/add

check.request:
  method: POST
  headers:
    'Content-Type': 'application/x-www-form-urlencoded'
  # urlencode the body:
  body: "name=first&email=someemail%40someemailprovider.com"
response

预期的 response

check.response 下,指定以下选项

status (字符串 列表)

预期的状态码列表。默认情况下,4xx 和 5xx 代码被认为是 down。其他代码被认为是 up

示例:

check.response:
  status: [200, 201]
headers (HTTP 标头)
必需的响应标头。
body.positive (字符串 列表)

要匹配正文输出的正则表达式列表。只需要匹配一个表达式。

示例:

此监控器检查响应正文中是否存在字符串 *foo* 或 *Foo*

check.response:
  status: [200, 201]
  body:
    positive:
      - foo
      - Foo
body.negative (字符串 列表)

要负匹配正文输出的正则表达式列表。如果单个表达式匹配,则返回匹配失败。支持最大 100 MiB 的 HTTP 响应正文。

此监控器检查如果响应正文中根本没有 *bar* 或 *Bar*,则检查匹配成功,如果响应正文中存在 *bar* 或 *Bar*,则检查匹配失败

示例:

check.response:
  status: [200, 201]
  body:
    negative:
      - bar
      - Bar

示例:

此监控器仅当正文中存在 *foo* 或 *Foo* 且正文中不存在 *bar* 或 *Bar* 时检查匹配成功

check.response:
  status: [200, 201]
  body:
    positive:
      - foo
      - Foo
    negative:
      - bar
      - Bar
json

在以 JSON 解析时,针对正文执行的表达式列表。
正文大小必须小于或等于 100 MiB。

description
检查的描述。
expression

以下配置显示了如何使用
gval 表达式
当正文包含 JSON 时

示例:

check.response:
  status: [200]
  json:
    - description: check status
      expression: 'foo.bar == "myValue"'

ICMP 选项edit

此处描述的选项配置 Synthetics 使用 ICMP(v4 和 v6)回声请求来检查配置的主机。在大多数平台上,您必须以提升的权限执行 Synthetics 才能执行 ICMP ping。

在 Linux 上,如果设置了正确的文件功能,普通用户可以执行 ping。运行 sudo setcap cap_net_raw+eip /path/to/heartbeat 以授予 Synthetics 在 Linux 上的 ping 功能。或者,您可以授予用于运行 Synthetics 的用户的 ping 权限。要以这种方式授予 ping 权限,请运行 sudo sysctl -w net.ipv4.ping_group_range='myuserid myuserid'

其他平台可能需要 Synthetics 以 root 或管理员身份运行才能执行 ping。

ICMP 监控的有效选项包括 所有通用选项 以及以下 ICMP 特定选项

选项(类型) 描述

hosts
(字符串)

必需. 要 ping 的主机。

示例:

hosts: "myhost"

wait
(持续时间)

如果未收到响应,则在发出另一个 ICMP 回声请求之前等待的持续时间。

默认: 1s

示例:

wait: 1m

TCP 选项edit

此处描述的选项配置 Synthetics 通过 TCP 连接,并可选地通过发送和/或接收自定义有效负载来验证端点。

TCP 监控的有效选项包括 所有通用选项 以及以下 TCP 特定选项

选项(类型) 描述

hosts
(字符串)

必需. 要 ping 的主机。该值可以是

  • 主机名和端口,例如 localhost:12345
    Synthetics 连接到指定主机上的端口。如果监控器 配置为使用 SSL,Synthetics 将建立基于 SSL/TLS 的连接。否则,它将建立 TCP 连接。
  • 使用语法 scheme://<host>:[port] 的完整 URL,其中

    • schemetcpplainssltls 之一。如果指定了 tcpplain,即使监控器配置为使用 SSL,Synthetics 也会建立 TCP 连接。如果指定了 tlsssl,Synthetics 将建立 SSL 连接。但是,如果监控器未配置为使用 SSL,则使用系统默认值(目前在 Windows 上不支持)。
    • host 是主机名。
    • port 是端口号。

示例:

hosts: "localhost:8000"
hosts: "tcp://127.0.0.1:8000"

check

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

示例:

check.send: 'Hello World'
check.receive: 'Hello World'
check:
  send: 'Hello World'
  receive: 'Hello World'

proxy_url

连接到服务器时要使用的 SOCKS5 代理的 URL。该值必须是方案为 socks5:// 的 URL。

如果 SOCKS5 代理服务器需要客户端身份验证,则可以在 URL 中嵌入用户名和密码。

使用代理时,主机名将在代理服务器上解析,而不是在客户端上解析。您可以通过设置 proxy_use_local_resolver 选项来更改此行为。

示例:

需要客户端身份验证的代理 URL

proxy_url: socks5://user:password@socks5-proxy:2233

proxy_use_local_resolver
(布尔值)

一个布尔值,用于确定是否在本地解析主机名,而不是在代理服务器上解析。默认值为 false,这意味着名称解析发生在代理服务器上。

默认: false

ssl
(SSL)

TLS/SSL 连接设置。如果监控器 配置为使用 SSL,它将尝试进行 SSL 握手。如果未配置 check,监控器将只检查它是否可以建立 SSL/TLS 连接。此检查可能会在 TCP 级别或证书验证期间失败。

示例:

ssl:
  certificate_authorities: ['/etc/ca.crt']
  supported_protocols: ["TLSv1.0", "TLSv1.1", "TLSv1.2"]

另请参阅 配置 SSL,以获取 ssl 选项的完整描述。

数据类型参考编辑

配置设置的值将根据 Synthetics 的要求进行解释。如果一个值无法被正确解释为所需类型 - 例如,当需要数字时给出了字符串 - Synthetics 将无法启动。

布尔值编辑

布尔值可以是 truefalsetrue 的替代名称是 yeson。除了 false 之外,还可以使用 nooff

enabled: true
disabled: false
数字编辑

数字值要求您输入数字,不带单引号或双引号。

integer: 123
negative: -1
float: 5.4

某些设置只支持有限的数字范围。

字符串编辑

YAML 中,支持多种字符串定义样式:双引号、单引号、无引号。

双引号样式通过用 " 将字符串括起来来指定。这种样式支持使用 \ 转义不可打印字符,但需要转义 \" 字符。

单引号样式通过用 ' 将字符串括起来来指定。这种样式不支持任何转义(使用 '' 来引用单引号)。使用此形式时,只能使用可打印字符。

无引号样式不需要引号,但不支持任何转义,也不能包含 YAML 中具有特殊含义的任何符号。

在定义正则表达式、事件格式字符串、Windows 文件路径或非字母符号字符时,建议使用单引号样式。

持续时间编辑

持续时间需要一个数字值,该值带有可选的小数部分和必需的单位。有效的计时单位是 nsusmssmh。有时,基于持续时间的特性可以通过使用零或负持续时间来禁用。

duration1: 2.5s
duration2: 6h
duration_disabled: -1s
正则表达式编辑

正则表达式是特殊字符串,在加载时被编译成正则表达式。

由于正则表达式和 YAML 使用 \ 来转义字符串中的字符,因此强烈建议在定义正则表达式时使用单引号字符串。当使用单引号字符串时,\ 字符不会被 YAML 解析器解释为转义符号。