HTTP 选项

编辑

另请参阅 通用监控器选项

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

配置示例

- type: http
  id: myhost
  name: My HTTP Host
  schedule: '@every 5s'
  hosts: ["http://myhost:80"]

hosts

编辑

要 ping 的 URL 列表。

max_redirects

编辑

Heartbeat 将遵循的重定向总数。默认为 0,表示 heartbeat 不会遵循重定向,但会报告重定向的状态。如果设置为大于 0 的数字,则 heartbeat 将遵循该数量的重定向。

当此选项设置为大于零的值时,将不再报告 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 字段。

proxy_url

编辑

HTTP 代理 URL。此设置为可选。示例 http://proxy.mydomain.com:3128

proxy_headers

编辑

在 CONNECT 请求期间发送到代理的其他标头。

username

编辑

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

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

password

编辑

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

用于 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"]

另请参阅 SSL 以获取 ssl 选项的完整说明。

headers

编辑

控制 HTTP 响应标头 http.response.body.headers 字段的索引。

默认情况下启用。将 response.include_headers 设置为 false 以禁用。

response

编辑

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

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

on_error
如果在检查期间遇到错误,则包括正文。这是默认设置。
never
从不包括正文。
always
始终包含带有检查的正文。

设置 response.include_body_max_bytes 以控制存储的正文内容的最大大小。默认为 1024 字节。

check

编辑

可选的 request 发送到远程主机和预期的 response

配置示例

- type: http
  id: my-http-host
  name: My HTTP Service
  hosts: ["http://myhost:80"]
  check.request.method: HEAD
  check.response.status: [200]
  schedule: '@every 5s'

check.request 下,指定以下选项

method
要使用的 HTTP 方法。有效值为 "HEAD""GET""POST""OPTIONS"
headers
要发送的其他 HTTP 标头的字典。默认情况下,heartbeat 将设置 User-Agent 标头来标识自身。
body
可选的请求正文内容。

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

- type: http
  id: demo-service
  name: Demo Service
  schedule: '@every 5s'
  urls: ["https://127.0.0.1:8080/demo/add"]
  check.request:
    method: POST
    headers:
      'Content-Type': 'application/x-www-form-urlencoded'
    # urlencode the body:
    body: "name=first&email=someemail%40someemailprovider.com"
  check.response:
    status: [200]
    body:
      - Saved
      - saved

check.response 下,指定以下选项

status
预期状态代码列表。默认情况下,4xx 和 5xx 代码被视为 down。其他代码被视为 up
headers
所需的响应标头。
body
用于匹配正文输出的正则表达式列表。只需要匹配一个表达式。支持高达 100MiB 的 HTTP 响应正文。

配置示例:此监控器检查响应正文中是否存在字符串 savedSaved,并预期 200 或 201 状态代码

- type: http
  id: demo-service
  name: Demo Service
  schedule: '@every 5s'
  urls: ["https://127.0.0.1:8080/demo/add"]
  check.request:
    method: POST
    headers:
      'Content-Type': 'application/x-www-form-urlencoded'
    # urlencode the body:
    body: "name=first&email=someemail%40someemailprovider.com"
  check.response:
    status: [200, 201]
    body:
      - Saved
      - saved

check.response.body 下,指定以下选项:positive:: 此选项的行为与在 check.response.body 下给出正则表达式列表的行为相同。 negative:: 用于对正文输出进行负向匹配的正则表达式列表。如果匹配到单个表达式,则返回匹配失败。支持高达 100MiB 的 HTTP 响应正文。

配置示例:此监控器检查响应正文中是否存在字符串 fooFoo

- type: http
  id: demo-service
  name: Demo Service
  schedule: '@every 5s'
  urls: ["https://127.0.0.1:8080/demo/add"]
  check.request:
    method: POST
    headers:
      'Content-Type': 'application/x-www-form-urlencoded'
    # urlencode the body:
    body: "name=first&email=someemail%40someemailprovider.com"
  check.response:
    body:
      positive:
        - foo
        - Foo

配置示例:如果响应正文中根本没有 barBar,则此监控器检查匹配是否成功;如果响应正文中存在 barBar,则检查匹配是否失败

- type: http
  id: demo-service
  name: Demo Service
  schedule: '@every 5s'
  urls: ["https://127.0.0.1:8080/demo/add"]
  check.request:
    method: POST
    headers:
      'Content-Type': 'application/x-www-form-urlencoded'
    # urlencode the body:
    body: "name=first&email=someemail%40someemailprovider.com"
  check.response:
    status: [200, 201]
    body:
      negative:
        - bar
        - Bar

配置示例:仅当正文中存在 fooFoo 且正文中没有 barBar 时,此监控器才检查匹配是否成功

- type: http
  id: demo-service
  name: Demo Service
  schedule: '@every 5s'
  urls: ["https://127.0.0.1:8080/demo/add"]
  check.response:
    status: [200, 201]
    body:
      positive:
        - foo
        - Foo
      negative:
        - bar
        - Bar
json
当正文解析为 JSON 时,针对正文执行的表达式列表或 条件 语句(现在已弃用)。正文大小必须小于或等于 100 MiB。

以下配置展示了如何在正文包含 JSON 时使用 gval 表达式检查响应

- type: http
  id: demo-service
  name: Demo Service
  schedule: '@every 5s'
  hosts: ["https://127.0.0.1:9200/_/nodes/stats"]
  username: elastic
  password: changeme
  check.response:
    status: [200]
    json:
      - description: check status
        expression: 'foo.bar == "myValue"'

表达式可以比简单的相等性复杂得多。它们还可以使用 jsonpath 语法。请注意,在 gval 变体的 jsonpath 中,字符串必须用双引号 " 而不是单引号 ' 引起来。请注意,jsonpath 子表达式必须以 $. 开头,例如 '$.nodes[?(@.name=="myname")] != []' 将检查 nodes 映射是否至少有一个名为 myname 的值。

当处理以 JSON 数组的形式返回而不是对象的形式返回的根目录响应时,也可以使用 jsonpath。例如,$.[0].foo == "bar" 测试响应中的第一个项目是否具有一个名为 foo 的属性,该属性的值为“bar”。

也可以通过现在已弃用的 condition 选项检查 JSON 正文,该选项不如 expression 强大。以下配置展示了如何在正文包含 JSON 时使用 condition 语句检查响应

- type: http
  id: demo-service
  name: Demo Service
  schedule: '@every 5s'
  hosts: ["https://myhost:80"]
  check.request:
    method: GET
    headers:
      'X-API-Key': '12345-mykey-67890'
  check.response:
    status: [200]
    json:
      - description: check status
        condition:
          equals:
            status: ok

以下配置展示了如何检查多个正则表达式模式的响应

- type: http
  id: demo-service
  name: Demo Service
  schedule: '@every 5s'
  hosts: ["https://myhost:80"]
  check.request:
    method: GET
    headers:
      'X-API-Key': '12345-mykey-67890'
  check.response:
    status: [200]
    body:
      - hello
      - world

以下配置展示了如何使用多行正则表达式检查响应

- type: http
  id: demo-service
  name: Demo Service
  schedule: '@every 5s'
  hosts: ["https://myhost:80"]
  check.request:
    method: GET
    headers:
      'X-API-Key': '12345-mykey-67890'
  check.response:
    status: [200]
    body: '(?s)first.*second.*third'

运行一次模式(实验性)

编辑

您可以配置 Heartbeat 仅运行一次监控器然后退出,从而绕过调度程序。这称为通过设置 heartbeat.run_once: true 在“运行一次”模式下运行 Heartbeat。所有 Heartbeat 监控器都将忽略其计划并在启动时仅运行一次。这是一项实验性功能,可能会发生更改。

请注意,仍然需要 schedule 字段,Heartbeat 使用它来设置下一次运行何时发生的预期。该持续时间编码在 Heartbeat 输出中的 monitor.timespan 字段中。

# heartbeat.yml
heartbeat.run_once: true
heartbeat.monitors:
# your monitor config here...

发布超时(实验性)

编辑

您可以配置 Heartbeat 在经过超时时间后如果无法发布挂起的事件则退出。这是一项实验性功能,可能会发生更改。

请注意,publish_timeout 要生效,必须使用 heartbeat.run_once 标志。

# heartbeat.yml
heartbeat.publish_timeout: 30s
heartbeat.run_once: true
heartbeat.monitors:
# your monitor config here...