配置轻量级监控
Elastic Stack Serverless
使用以下轻量级检查来监控网络端点的状态
- HTTP: 监控您的网站。HTTP 监控检查以确保特定端点返回正确的状态代码并显示正确的文本。
- ICMP: 检查主机的可用性。ICMP 监控使用 ICMP (v4 和 v6) 回显请求来检查您正在 ping 的主机的网络可达性。这将告诉您主机是否可用并已连接到网络,但不会告诉您主机上的服务是否正在运行。
- TCP: 监控主机上运行的服务。TCP 监控检查各个端口,以确保服务可访问且正在运行。
可以使用 Synthetics UI 或 项目监控配置轻量级监控。
要使用 UI,请转到 Kibana 中的 Synthetics UI 或您的 Observability Serverless 项目中以创建和配置监控。有关分步说明,请参阅 使用 Synthetics UI。

要使用 YAML 文件在 Synthetics 项目中创建轻量级监控,请设置 Synthetics 项目并在 lightweight
目录中的 YAML 文件中配置监控。
在每个 YAML 文件中,定义一组 monitors
来检查您的远程主机。每个 monitor
项都是 YAML 列表中的一个条目,并以短划线 (-
) 开头。您可以定义要使用的监控类型、要检查的主机以及其他可选设置。
以下示例配置了三个通过 http
、icmp
和 tcp
协议进行检查的监控,并演示了如何使用 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"
check.send: "Check"
check.receive: "Check"
schedule: '@every 60s'
- 默认 TCP 回显协议
有一些通用的监控配置选项,所有轻量级监控类型都相同。有关完整列表,请参阅通用选项。
每种监控类型还有一些特定于该类型的附加配置选项。参考
tcp
和 http
监控类型都支持 SSL/TLS 和一些代理设置。
您可以在任何位置定义 synthetic 监控时指定以下选项。这些选项对于所有监控都是相同的。每种监控类型都有特定于该监控类型的附加配置选项。
类型
-
类型:
"http"
|"icmp"
|"tcp"
必需。要运行的监控的类型。以下之一
http
: 通过 HTTP 连接,并可选择验证主机是否返回预期的响应。icmp
: 使用 ICMP(v4 和 v6)回显请求来 ping 配置的主机。需要特殊权限或 root 访问权限。tcp
: 通过 TCP 连接,并可选择通过发送和/或接收自定义负载来验证端点。
id
-
类型:字符串
必需。此配置的唯一标识符。无论对任何配置字段进行更改,此标识符都不应随对监控配置的编辑而更改。
示例:
id: uploader-service
id: http://example.net
注意查询索引的监控数据时,这是您将聚合的字段。它在导出的字段中显示为
monitor.id
。如果您未显式设置
id
,则将对监控的配置进行哈希处理,并使用生成的值。此值将随对该监控的任何选项更改而更改,从而无法在更改之间进行随时间的聚合。因此,建议您手动设置此值。
名称
-
类型:字符串
此监控的人工可读名称。
示例:
name: Uploader service
name: Example website
service.name
-
类型:字符串
此监控的 APM 服务名称。对应于
service.name
ECS 字段。在监控也使用 APM 的应用程序时设置此选项,以启用 Kibana 或 Observability Serverless 项目中 Synthetics 和 APM 数据之间的集成。
已启用
-
类型:布尔值
是否启用监控。
默认值:
true
示例:
enabled: false
计划
-
类型:持续时间
必需。任务计划。
注意分辨率小于 1 分钟的计划将保存到最接近的分钟。例如,使用 CLI 推送监控时,
@every 5s
将更改为@every 60s
。示例:从监控启动的时间开始,每 5 分钟运行一次任务。
schedule: @every 5m
超时
-
类型:持续时间
每次 ping 测试的总运行时间。这是测试连接和交换数据所允许的总时间。
默认值:
16s
示例:
timeout: 2m
标签
-
类型:字符串的列表
将与监控事件一起发送的标签列表。
示例:
tags: - tag one - tag two
tags: ["tag one", "tag two"]
模式
-
类型:
"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
警报
-
启用或禁用此监控上的警报。阅读有关警报的更多信息,请参阅警报。
status.enabled
(布尔值)- 在此监控上启用监控状态警报。
默认值:
true
示例:
yaml alert.status.enabled: true
tls.enabled
(布尔值)- 在此监控上启用 TLS 证书警报。
默认值:
true
示例:
yaml alert.tls.enabled: true
retest_on_failure
-
类型:布尔值
在监控失败时启用或禁用重新测试。默认为
true
。默认情况下,如果监控从“up”变为“down”,则会自动重新测试监控。如果重新测试的结果也为“down”,则会创建一个错误,并且如果已配置,则会发送警报。然后,监控将根据定义的计划恢复运行。使用
retestOnFailure
可以减少与瞬时问题相关的噪音。示例:
retest_on_failure: false
位置
-
类型:
SyntheticsLocationsType
的列表在哪里部署监控。您可以在多个位置部署监控,以检测这些位置之间可用性和响应时间的差异。
要列出可用位置,您可以
- 运行
elastic-synthetics locations
命令。 - 在全局搜索字段中找到
Synthetics
,然后单击创建监控。位置将列在位置中。
示例:
locations: ["japan", "india"]
locations: - japan - india
注意也可以使用Synthetics 项目配置文件中的
monitor.locations
设置此选项,或者通过使用push
上的--location
标志通过 CLI 设置此选项。通过 CLI 定义的值优先于轻量级监控配置中定义的值,而轻量级监控配置中定义的值优先于 Synthetics 项目配置文件中定义的值。
- 运行
private_locations
-
类型:字符串的列表
监控将部署到的专用位置。这些专用位置指的是由您托管和管理的位置,而
locations
由 Elastic 托管。您可以使用位置的名称来指定专用位置。要列出可用的专用位置,您可以
- 运行
elastic-synthetics locations
命令并指定部署的 Kibana URL。这将获取与部署关联的所有可用的专用位置。 - 在全局搜索字段中找到
Synthetics
,然后点击 Create monitor(创建监控)。私有位置将会在Locations(位置)中列出。
示例:
private_locations: ["Private Location 1", "Private Location 2"]
private_locations: - Private Location 1 - Private Location 2
注意也可以使用Synthetics 项目配置文件中的
monitor.privateLocations
或通过 CLI 使用push
命令上的--privateLocations
标志 进行设置。通过 CLI 定义的值优先于在轻量级监控配置中定义的值,而在轻量级监控配置中定义的值优先于在 Synthetics 项目配置文件中定义的值。
- 运行
fields(字段)
-
一个键值对列表,将随每个监控事件一起发送。
fields
会作为labels
追加到 Elasticsearch 文档中,并且这些标签会显示在 Kibana 的Monitor details(监控详情)面板中,位于 individual monitor’s Overview tab(单个监控的概览选项卡)。示例:
fields: foo: bar team: synthetics
fields.foo: bar fields.team: synthetics
此处描述的选项配置 Synthetics 以通过 HTTP 连接,并可以选择性地验证主机是否返回预期的响应。
HTTP 监控的有效选项包括所有通用选项和以下 HTTP 特定的选项
urls
-
类型:字符串
必填。要 ping 的 URL。
max_redirects
-
类型:number(数字)
Synthetics 将要遵循的总重定向次数。
默认情况下,Synthetics 不会遵循重定向,而是会报告重定向的状态。如果设置为大于
0
的数字,则 Synthetics 将遵循该数量的重定向。当此选项设置为大于
0
的值时,将不再报告monitor.ip
字段,因为跨多个 IP 的多个 DNS 请求可能会返回多个 IP。也不会记录细粒度的网络计时数据,因为对于重定向,该数据将跨越多个请求。具体来说,将省略字段http.rtt.content.us
、http.rtt.response_header.us
、http.rtt.total.us
、http.rtt.validate.us
、http.rtt.write_request.us
和dns.rtt.us
。默认值:
0
proxy_headers
- 在
CONNECT
请求期间发送到代理的其他标头。
proxy_url
-
(string(字符串))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 urls: "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
(number(数字))- 设置
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
。示例:
yaml check.response: status: [200, 201]
headers
- 类型:HTTP 标头
所需的响应标头。
body.positive
- 类型:字符串的列表
用于匹配正文输出的正则表达式列表。 只需要匹配一个表达式。
示例:
此监控检查响应正文中是否存在字符串 foo 或 Foo
yaml check.response: status: [200, 201] body: positive: - foo - Foo
body.negative
(string(字符串) 列表)- 用于对正文输出进行负向匹配的正则表达式列表。 如果匹配单个表达式,则返回匹配失败。 支持高达 100MiB 的 HTTP 响应正文。
如果响应正文中根本没有 bar 或 Bar,则此监控会成功匹配,如果响应正文中存在 bar 或 Bar,则会匹配失败
示例:
yaml check.response: status: [200, 201] body: negative: - bar - Bar
示例:
仅当正文中存在 foo 或 Foo 且正文中没有 bar 或 Bar 时,此监控才会成功匹配
yaml check.response: status: [200, 201] body: positive: - foo - Foo negative: - bar - Bar
json
- 针对作为 JSON 解析的正文执行的表达式列表。 正文大小必须小于或等于 100 MiB。
description
- 检查的描述。
expression
- 以下配置显示了当正文包含 JSON 时如何使用 gval 表达式检查响应
示例:
yaml check.response: status: [200] json: - description: check status expression: 'foo.bar == "myValue"'
此处描述的选项配置 Synthetics 以使用 ICMP(v4 和 v6)回显请求来检查配置的主机。 在大多数平台上,您必须以提升的权限执行 Synthetics 才能执行 ICMP ping。
在 Linux 上,如果设置了正确的文件功能,则普通用户可以执行 ping。 运行 sudo setcap cap_net_raw+eip /path/to/heartbeat
以授予 Synthetics 在 Linux 上的 ping 功能。 或者,您可以将 ping 权限授予用于运行 Synthetics 的用户。 要以这种方式授予 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
此处描述的选项配置 Synthetics 以通过 TCP 连接,并可以选择性地通过发送和/或接收自定义有效负载来验证端点。
TCP 监控的有效选项包括所有通用选项和以下 TCP 特定的选项
hosts
-
类型:字符串
必填。要 ping 的主机。该值可以是
- 主机名和端口,例如
localhost:12345
。 Synthetics 连接到指定主机上的端口。如果监控配置为使用 SSL,则 Synthetics 建立基于 SSL/TLS 的连接。否则,它建立 TCP 连接。 - 使用语法
scheme://<host>:[port]
的完整 URL,其中scheme
是tcp
、plain
、ssl
或tls
之一。如果指定tcp
或plain
,即使监控配置为使用 SSL,Synthetics 也会建立 TCP 连接。如果指定tls
或ssl
,则 Synthetics 建立 SSL 连接。但是,如果监控未配置为使用 SSL,则使用系统默认值(当前 Windows 上不支持)。host
是主机名。port
是端口号。
示例:
hosts: "localhost:8000"
hosts: "tcp://localhost:8000"
- 主机名和端口,例如
check
-
要发送到远程主机的可选有效负载字符串以及期望的答案。如果未指定有效负载,则假定如果连接尝试成功,则端点可用。如果指定了
send
但没有receive
,则接受任何响应。如果指定了receive
但没有send
,则不会发送有效负载,但客户端希望在连接时收到“hello 消息”或“横幅”形式的有效负载。示例:
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 将无法启动。
布尔值可以是 true
或 false
。 true
的替代名称是 yes
和 on
。 可以使用值 no
和 off
代替 false
。
enabled: true
disabled: false
数字值要求您不使用单引号或双引号输入数字。
integer: 123
negative: -1
float: 5.4
某些设置仅支持受限的数字范围。
在 YAML 中,支持多种字符串定义样式:双引号、单引号、不带引号。
双引号样式通过用 "
包围字符串来指定。 这种样式提供了对使用 \
转义不可打印字符的支持,但代价是必须转义 \
和 "
字符。
单引号样式通过用'
将字符串括起来指定。此样式不支持任何转义(使用''
引用单引号)。使用此格式时,只能使用可打印字符。
无引号样式不需要引号,但不支持任何转义,并且不能包含 YAML 中具有特殊含义的任何符号。
当定义正则表达式、事件格式字符串、Windows 文件路径或非字母符号字符时,建议使用单引号样式。
持续时间需要一个数值,带有可选的小数部分和必需的单位。有效的时间单位为 ns
、us
、ms
、s
、m
、h
。有时,基于持续时间的功能可以通过使用零或负持续时间来禁用。
duration1: 2.5s
duration2: 6h
duration_disabled: -1s
正则表达式是特殊的字符串,在加载时会被编译成正则表达式。
由于正则表达式和 YAML 都使用 \
来转义字符串中的字符,因此强烈建议在定义正则表达式时使用单引号字符串。当使用单引号字符串时,\
字符不会被 YAML 解析器解释为转义符号。