Webhook 操作
Elastic Stack Serverless
使用 webhook
操作向任何 Web 服务发送请求。 Webhook 操作同时支持 HTTP 和 HTTPS 连接。 有关支持的属性,请参见 Webhook 操作属性。
您可以在 actions
数组中配置 webhook 操作。 使用 webhook
关键字指定特定于操作的属性。
以下代码段显示了一个简单的 webhook 操作定义
"actions" : {
"my_webhook" : {
"transform" : { ... },
"throttle_period" : "5m",
"webhook" : {
"method" : "POST",
"host" : "mylisteningserver",
"port" : 9200,
"path": "/{{ctx.watch_id}}",
"body" : "{{ctx.watch_id}}:{{ctx.payload.hits.total}}"
}
}
}
- 操作的 ID
- 一个可选的 转换,用于在执行
webhook
操作之前转换有效负载 - 操作的可选 节流周期(在本例中为 5 分钟)
- 连接到主机时要使用的 HTTP 方法
- 要连接的主机
- 要连接的端口
- HTTP 请求中要使用的路径 (URI)
- 与请求一起发送的正文
您可以将基本身份验证用于向安全 Web 服务发送请求。 例如,以下 webhook
操作在 GitHub 中创建一个新 issue
"actions" : {
"create_github_issue" : {
"transform": {
"script": "return ['title':'Found errors in \\'contact.html\\'', 'body' : 'Found ' + ctx.payload.hits.total + ' errors in the last 5 minutes', 'assignee' : 'web-admin', 'labels' : ['bug','sev2']]"
},
"webhook" : {
"method" : "POST",
"url" : "https://api.github.com/repos/<owner>/<repo>/issues",
"body": "{{#toJson}}ctx.payload{{/toJson}}",
"auth" : {
"basic" : {
"username" : "<username>",
"password" : "<password>"
}
}
}
}
}
- 用于创建 issue 的用户的用户名和密码
注意
默认情况下,用户名和密码都以纯文本形式存储在 .watches
索引中。 启用 Elasticsearch 安全功能后,Watcher 可以在存储密码之前对其进行加密。
在向启用了 Elasticsearch 安全功能的集群提交请求时,您还可以使用基于 PKI 的身份验证。 当您使用基于 PKI 的身份验证而不是 HTTP 基本身份验证时,您无需在 Watch 本身中存储任何身份验证信息。 要使用基于 PKI 的身份验证,请配置 Watcher 的 SSL 密钥设置,路径为 elasticsearch.yml
。
您可以使用 params
字段指定要随请求一起发送的查询参数。 此字段仅包含一个对象,其中键用作参数名称,而值用作参数值
"actions" : {
"my_webhook" : {
"webhook" : {
"method" : "POST",
"host" : "mylisteningserver",
"port" : 9200,
"path": "/alert",
"params" : {
"watch_id" : "{{ctx.watch_id}}"
}
}
}
}
- 参数值可以包含模板化的字符串。
您可以使用 headers
字段指定要随请求一起发送的请求标头。 此字段仅包含一个对象,其中键用作标头名称,而值用作标头值
"actions" : {
"my_webhook" : {
"webhook" : {
"method" : "POST",
"host" : "mylisteningserver",
"port" : 9200,
"path": "/alert/{{ctx.watch_id}}",
"headers" : {
"Content-Type" : "application/yaml"
},
"body" : "count: {{ctx.payload.hits.total}}"
}
}
}
- 标头值可以包含模板化的字符串。
名称 | 必需 | 默认 | 描述 |
---|---|---|---|
scheme |
否 | http | 连接方案。 有效值为:http 或 https 。 |
host |
是 | - | 要连接的主机。 |
port |
是 | - | HTTP 服务正在侦听的端口。 |
path |
否 | - | URL 路径。 该路径可以是静态文本,也可以包含 Mustache 模板。 URL 查询字符串参数必须通过 request.params 属性指定。 |
method |
否 | get | HTTP 方法。 有效值为:head 、get 、post 、put 和 delete 。 |
headers |
否 | - | HTTP 请求标头。 标头值可以是静态文本,也可以包含 Mustache 模板。 |
params |
否 | - | URL 查询字符串参数。 参数值可以是静态文本,也可以包含 Mustache 模板。 |
auth |
否 | - | 与身份验证相关的 HTTP 标头。 目前,仅支持基本身份验证。 |
body |
否 | - | HTTP 请求正文。 正文可以是静态文本,也可以包含 Mustache 模板。 如果未指定,则发送空正文。 |
proxy.host |
否 | - | 连接到主机时要使用的代理主机。 |
proxy.port |
否 | - | 连接到主机时要使用的代理端口。 |
connection_timeout |
否 | 10s | 用于设置 HTTP 连接的超时。 如果在此时间内无法建立连接,则操作将超时并失败。 |
read_timeout |
否 | 10s | 用于从 HTTP 连接读取数据的超时。 如果在此时间内未收到任何响应,则操作将超时并失败。 |
url |
否 | - | 用于将请求方案、主机、端口和路径指定为单个字符串的快捷方式。 例如,http://example.org/foo/my-service 。 |