HTTP 选项
编辑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.us
、http.rtt.response_header.us
、http.rtt.total.us
、http.rtt.validate.us
、http.rtt.write_request.us
和 dns.rtt.us
将被省略。
proxy_url
编辑
HTTP 代理 URL。此设置是可选的。例如 http://proxy.mydomain.com:3128
proxy_headers
编辑
要发送到代理的附加标头,用于 CONNECT 请求。
username
编辑
用于向服务器进行身份验证的用户名。凭据与请求一起传递。此设置是可选的。
当您的 check.response
设置需要时,您需要指定凭据。例如,您可以检查 403 响应(check.response.status: [403]
),而无需设置凭据。
password
编辑
用于向服务器进行身份验证的密码。此设置是可选的。
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"]
另请参见 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
字符串发布到端点 /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
- 要与正文输出匹配的正则表达式列表。只需要一个表达式匹配。支持高达 100 MiB 的 HTTP 响应正文。
示例配置:此监控器检查响应正文中是否存在字符串 saved
或 Saved
,并期望 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
:: 要与正文输出负匹配的正则表达式列表。如果单个表达式匹配,则返回匹配失败。支持高达 100 MiB 的 HTTP 响应正文。
示例配置:此监控器检查响应正文中是否存在字符串 foo 或 Foo
- 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
示例配置:此监控器如果响应正文中完全没有 bar 或 Bar 则检查匹配成功,如果响应正文中存在 bar 或 Bar 则检查匹配失败
- 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
示例配置:此监控器仅当正文中存在 foo 或 Foo 且正文中不存在 bar 或 Bar 时检查匹配成功
- 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 语法。请注意,字符串必须用 "
(而不是用 '
)在 jsonpath 的 gval
变体中用双引号引起来。请注意,jsonpath 子表达式必须以 $.
开头,例如 '$.nodes[?(@.name=="myname")] != []'
将检查 nodes
映射是否至少包含一个名为 myname 的值。
在处理以 JSON 数组的形式(而不是对象)作为根返回的响应时,也可以使用 jsonpath。例如,$.[0].foo == "bar"
测试响应中的第一个项目是否具有值为“bar”的属性 foo
。
JSON 正文也可以通过现已弃用的 condition
选项进行检查,该选项不如 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 在无法发布挂起的事件时,在超时时间过后退出。这是一个实验性功能,可能会发生变化。
请注意,heartbeat.run_once
标志是 publish_timeout
生效的必要条件。
# heartbeat.yml heartbeat.publish_timeout: 30s heartbeat.run_once: true heartbeat.monitors: # your monitor config here...