加载中

配置轻量级监控

Elastic Stack Serverless

使用以下轻量级检查来监控网络端点的状态

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

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

要使用 UI,请前往 Kibana 中的 Synthetics UI 或您的 Observability Serverless 项目来创建和配置监控。有关分步说明,请参阅使用 Synthetics UI

Synthetics Create monitor UI

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

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

以下示例配置了三个通过 httpicmptcp 协议进行的监控,并演示了如何使用 TCP Echo 响应验证

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'
  1. 默认 TCP Echo 协议

有一些通用的监控配置选项,适用于所有轻量级监控类型。有关完整列表,请参阅通用选项

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

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,则会使用监控的配置哈希值生成一个值。此值会在对该监控的任何选项进行更改时发生变化,从而导致在更改之间无法进行聚合。因此,建议手动设置此值。

name

类型:字符串

此监控的可读名称。

示例:

name: Uploader service
name: Example website

service.name

类型:字符串

此监控的 APM 服务名称。对应于 service.name ECS 字段。当监控正在使用 APM 的应用程序时设置此项,以便在 Kibana 或您的 Observability Serverless 项目中实现 Synthetics 和 APM 数据之间的集成。

启用

类型:布尔值

监控是否已启用。

默认true

示例:

enabled: false

schedule

类型:持续时间

必需。任务计划。

注意

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

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

schedule: @every 5m

timeout

类型:持续时间

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

默认16s

示例:

timeout: 2m

标签

类型:字符串列表

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

示例:

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

示例:

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

locations

类型:SyntheticsLocationsType 列表

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

要列出可用位置,您可以

示例:

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

这也可以通过Synthetics 项目配置文件中的 monitor.locations 或通过 CLI 使用 push 命令的 --location 标志来设置。

通过 CLI 定义的值优先于轻量级监控配置中定义的值,而轻量级监控配置中定义的值优先于 Synthetics 项目配置文件中定义的值。

private_locations

类型:字符串列表

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

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

示例:

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 被追加到 Elasticsearch 文档中作为 labels,这些标签显示在 Kibana 的 单个监控的 *Overview* 选项卡 中的 *Monitor details* 面板中。

示例:

fields:
  foo: bar
  team: synthetics
fields.foo: bar
fields.team: synthetics

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

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

urls

类型:字符串

必需。要 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
  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

响应

控制 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

检查
请求

一个可选的 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

check.response 下,指定以下选项:

status
类型:字符串列表

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

示例:

yaml check.response: status: [200, 201]

headers
类型:HTTP 标头

必需的响应标头。

body.positive
类型:字符串列表

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

示例:

此监控检查正文是否包含字符串 fooFoo

yaml check.response: status: [200, 201] body: positive: - foo - Foo

body.negative字符串列表)
用于负匹配正文输出的正则表达式列表。如果单个表达式匹配,则返回匹配失败。支持高达 100MiB 的 HTTP 响应正文。

此监控检查是否成功匹配,前提是正文中完全没有 barBar,如果正文中存在 barBar,则检查匹配失败

示例:

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

示例:

此监控仅当正文中存在 fooFoo 并且正文中不存在 barBar 时才成功匹配

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

json
当正文被解析为 JSON 时,针对该正文执行的表达式列表。正文大小必须小于或等于 100 MiB。
description
检查的描述。
expression
以下配置显示了如何在使用 gval 表达式检查正文中包含 JSON 的响应时使用该表达式

示例:

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 来为 Linux 上的 Synthetics 授予 ping 功能。或者,您可以将 ping 权限授予用于运行 Synthetics 的用户。要通过此方式授予 ping 权限,请运行 sudo sysctl -w net.ipv4.ping_group_range='myuserid myuserid'

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

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

hosts

类型:字符串

必需。要 ping 的主机。

示例:

hosts: "myhost"

等待

类型:持续时间

在未收到响应时,发出下一个 ICMP 回显请求之前等待的时间。

默认1s

示例:

wait: 1m

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

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

hosts

类型:字符串

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

  • 主机名和端口,例如 localhost:12345 Synthetics 连接到指定主机上的端口。如果监控配置为使用 SSL,Synthetics 将建立基于 SSL/TLS 的连接。否则,它将建立 TCP 连接。
  • 使用 scheme://<host>:[port] 语法的完整 URL,其中:
    • schemetcpplainssltls 之一。如果指定了 tcpplain,则 Synthetics 将建立 TCP 连接,即使监控已配置为使用 SSL。如果指定了 tlsssl,则 Synthetics 将建立 SSL 连接。但是,如果监控未配置为使用 SSL,则将使用系统默认值(目前在 Windows 上不支持)。
    • host 是主机名。
    • port 是端口号。

示例:

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

检查

一个可选的负载字符串,用于发送到远程主机和预期的答案。如果没有指定负载,则假定连接尝试成功即可认为端点可用。如果指定了 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 解析器不会将 \ 字符解释为转义符号。

© . This site is unofficial and not affiliated with Elasticsearch BV.