HTTP 端点输入
编辑HTTP 端点输入编辑
此功能处于测试阶段,如有更改,恕不另行通知。其设计和代码不如正式的 GA 功能成熟,按原样提供,不作任何保证。测试版功能不受官方 GA 功能支持 SLA 的约束。
HTTP 端点输入初始化一个监听 HTTP 服务器,该服务器收集包含 JSON 正文的传入 HTTP POST 请求。正文必须是对象或对象数组。任何其他数据类型都会导致 HTTP 400(错误请求)响应。对于数组,将为数组中的每个对象创建一个文档。
如果请求中发送了 Content-Encoding: gzip
标头,则支持 gzip 编码的请求正文。
例如,此输入可用于接收来自第三方应用程序或服务的传入 webhook。
可以将多个端点分配给单个地址和端口,HTTP 端点输入将根据 URL 模式配置解析请求。如果在单个地址上配置了多个端点,则它们必须具有相同的 TLS 配置,要么全部禁用,要么全部启用相同的配置。
以下是服务器可能返回的响应代码。
HTTP 响应代码 | 名称 | 原因 |
---|---|---|
200 |
确定 |
成功返回。 |
400 |
错误请求 |
如果 JSON 正文解码失败,则返回。 |
401 |
未经授权 |
基本身份验证、密钥标头或 HMAC 验证失败时返回。 |
405 |
方法不允许 |
如果使用了 POST 以外的方法,则返回。 |
406 |
不可接受 |
如果 POST 请求不包含正文,则返回。 |
415 |
不支持的媒体类型 |
如果 Content-Type 不是 application/json,则返回。或者如果 Content-Encoding 存在且不是 gzip,则返回。 |
500 |
内部服务器错误 |
如果在读取请求时发生 I/O 错误,则返回。 |
示例配置
基本示例
filebeat.inputs: - type: http_endpoint enabled: true listen_address: 192.168.1.1 listen_port: 8080
自定义响应示例
filebeat.inputs: - type: http_endpoint enabled: true listen_address: 192.168.1.1 listen_port: 8080 response_code: 200 response_body: '{"message": "success"}' url: "/" prefix: "json"
多个端点示例
filebeat.inputs: - type: http_endpoint enabled: true listen_address: 192.168.1.1 listen_port: 8080 url: "/open/" tags: [open] - type: http_endpoint enabled: true listen_address: 192.168.1.1 listen_port: 8080 url: "/admin/" basic_auth: true username: adminuser password: somepassword tags: [admin]
禁用 Content-Type 检查
filebeat.inputs: - type: http_endpoint enabled: true listen_address: 192.168.1.1 content_type: "" prefix: "json"
基本身份验证和 SSL 示例
filebeat.inputs: - type: http_endpoint enabled: true listen_address: 192.168.1.1 listen_port: 8080 ssl.enabled: true ssl.certificate: "/home/user/server.pem" ssl.key: "/home/user/server.key" ssl.verification_mode: "none" ssl.certificate_authority: "/home/user/ca.pem" basic_auth: true username: someuser password: somepassword
身份验证或检查特定标头是否包含特定值
filebeat.inputs: - type: http_endpoint enabled: true listen_address: 192.168.1.1 listen_port: 8080 secret.header: someheadername secret.value: secretheadertoken
使用 CRC 验证特定提供者的 webhook 端点
filebeat.inputs: - type: http_endpoint enabled: true listen_address: 192.168.1.1 listen_port: 8080 secret.header: someheadername secret.value: secretheadertoken crc.provider: webhookProvider crc.secret: secretToken
验证来自特定标头的 HMAC 签名
filebeat.inputs: - type: http_endpoint enabled: true listen_address: 192.168.1.1 listen_port: 8080 hmac.header: "X-Hub-Signature-256" hmac.key: "password123" hmac.type: "sha256" hmac.prefix: "sha256="
保留原始事件并在文档中包含标头
filebeat.inputs: - type: http_endpoint enabled: true listen_address: 192.168.1.1 listen_port: 8080 preserve_original_event: true include_headers: ["TestHeader"]
配置选项编辑
http_endpoint
输入支持以下配置选项以及稍后描述的通用选项。
basic_auth
编辑
为每个传入请求启用或禁用 HTTP 基本身份验证。如果启用,则还需要配置 username
和 password
。
username
编辑
如果启用了 basic_auth
,则这是用于对 HTTP 侦听器进行身份验证的用户名。需要同时设置 password
。
password
编辑
如果启用了 basic_auth
,则这是用于对 HTTP 侦听器进行身份验证的密码。需要同时设置 username
。
secret.header
编辑
要检查 secret.value
指定的特定值的标头。某些 webhook 提供包含特殊标头和密钥以标识来源的可能性。
secret.value
编辑
存储在 secret.header
指定的标头名称中的密钥。某些 webhook 提供包含特殊标头和密钥以标识来源的可能性。
hmac.header
编辑
包含 HMAC 签名的标头的名称:X-Dropbox-Signature
、X-Hub-Signature-256
等。
hmac.key
编辑
用于计算 HMAC 签名的密钥。通常,webhook 发送者提供此值。
hmac.type
编辑
用于 HMAC 比较的哈希算法。目前,唯一有效的值是 sha256
或 sha1
。
hmac.prefix
编辑
签名的前缀。某些 webhook 在 HMAC 签名之前加上一个值,例如 sha256=
。
content_type
编辑
默认情况下,输入期望传入的 POST 包含 application/json
的 Content-Type,以尝试强制传入数据为有效的 JSON。在某些情况下,当请求的来源无法做到这一点时,可以使用另一个值覆盖它或将其设置为 null。
program
编辑
输入的正常操作将正文视为单个事件(当正文是对象时)或一组事件(当正文是数组时)。如果应该以不同的方式处理正文,例如将对象数组字段中的一组事件视为一组事件,则可以通过此配置字段提供通用表达式语言 (CEL)程序。除了 CEL 标准库中的函数之外,不提供 CEL 扩展。支持 CEL 可选类型。
请注意,在评估过程中,不能在双精度浮点值中精确表示的数字将转换为字符串,以避免数据损坏。
response_code
编辑
成功时返回的 HTTP 响应代码。应在 2XX 范围内。
response_body
编辑
成功时返回的响应正文。
listen_address
编辑
如果存在多个接口,则可以设置 listen_address
以控制侦听器绑定到的 IP 地址。默认为 127.0.0.1
。
listen_port
编辑
侦听器绑定到的端口。默认为 8000。
url
编辑
此选项指定接受请求的 URL 路径。默认为 /
prefix
编辑
此选项指定传入请求将映射到的前缀。
include_headers
编辑
此选项指定应从传入请求复制并包含在文档中的 HTTP 标头列表。所有配置的标头将始终规范化以匹配传入请求的标头。例如,当 filebeat 运行时,["content-type"]
将变为 ["Content-Type"]
。
preserve_original_event
编辑
此选项在将事件发送到 Elasticsearch 之前,将传入请求的原始未修改正文作为字符串复制到 event.original 字段。
crc.provider
编辑
此选项定义使用 CRC(质询-响应检查)验证端点的 webhook 的提供程序。HTTP 端点输入负责通过生成和验证唯一令牌来确保传入 webhook 请求的真实性。通过指定 crc.provider
,您可以确保系统正确处理所选提供程序所需的特定 CRC 验证过程。
crc.secret
编辑
webhook 所有者为 CRC 验证提供的密钥令牌。设置 crc.provider
时需要使用它。
method
编辑
端点处理的 HTTP 方法。如果指定,则 method
必须为 POST
、PUT
或 PATCH
。默认方法为 POST
。如果指定了 PUT
或 PATCH
,则接受使用这些方法类型的请求,但将其视为 POST
请求,并期望其请求正文中包含请求数据。
tracer.filename
编辑
可以将 HTTP 请求记录到本地文件系统以调试配置。可以通过设置 tracer.filename
值来启用此选项。还有其他选项可用于调整日志轮换行为。
为了区分从不同输入实例生成的跟踪文件,可以在文件名中添加占位符 *
,该占位符将替换为输入实例 ID。例如,http-request-trace-*.ndjson
。
启用此选项会降低安全性,仅应用于调试目的。
tracer.maxsize
编辑
此值设置日志文件在轮换之前达到的最大大小(以兆字节为单位)。默认情况下,日志文件在轮换之前允许达到 1MB。
tracer.maxage
编辑
这指定要保留的轮换日志文件的天数。如果未设置,则将无限期地保留日志文件。
tracer.maxbackups
编辑
要保留的旧日志数量。如果未设置,则在 tracer.maxage
设置的约束下保留所有旧日志。
tracer.localtime
编辑
是否使用主机的本地时间(而不是 UTC 时间)为轮换日志文件名添加时间戳。
tracer.compress
编辑
这决定是否应 gzip 压缩轮换的日志。
指标编辑
此输入在 HTTP 监控端点 下公开指标。这些指标在 /inputs
路径下公开。它们可用于观察输入的活动。
指标 | 描述 |
---|---|
|
输入的绑定地址。 |
|
输入的 HTTP 请求路由。 |
|
输入是否正在侦听 TLS 连接。 |
|
API 错误数。 |
|
收到的事件数组数。 |
|
已发布的事件数组数。 |
|
已发布的事件数。 |
|
请求内容长度的直方图。 |
|
接收到的事件数组长度的直方图。 |
|
成功批处理时间的直方图(以纳秒为单位)(从收到到非空批处理的 ACK 时间)。 |
常用选项编辑
所有输入都支持以下配置选项。
enabled
编辑
使用 enabled
选项启用和禁用输入。默认情况下,enabled 设置为 true。
tags
编辑
Filebeat 包含在每个已发布事件的 tags
字段中的一系列标记。标记可以轻松地在 Kibana 中选择特定事件或在 Logstash 中应用条件过滤。这些标记将附加到常规配置中指定的标记列表中。
示例
filebeat.inputs: - type: http_endpoint . . . tags: ["json"]
fields
编辑
您可以指定可选字段,以向输出添加其他信息。例如,您可以添加可用于过滤日志数据的字段。字段可以是标量值、数组、字典或这些值的任何嵌套组合。默认情况下,您在此处指定的字段将在输出文档的 fields
子字典下分组。要将自定义字段存储为顶级字段,请将 fields_under_root
选项设置为 true。如果在常规配置中声明了重复字段,则其值将被此处声明的值覆盖。
filebeat.inputs: - type: http_endpoint . . . fields: app_id: query_engine_12
fields_under_root
编辑
如果此选项设置为 true,则自定义 fields 将作为顶级字段存储在输出文档中,而不是分组在 fields
子字典下。如果自定义字段名称与 Filebeat 添加的其他字段名称冲突,则自定义字段将覆盖其他字段。
processors
编辑
要应用于输入数据的一系列处理器。
有关在配置中指定处理器的信息,请参阅 处理器。
pipeline
编辑
要为此输入生成的事件设置的摄取管道 ID。
管道 ID 也可以在 Elasticsearch 输出中配置,但此选项通常会导致配置文件更简单。如果在输入和输出中都配置了管道,则使用输入中的选项。
keep_null
编辑
如果此选项设置为 true,则值为 null
的字段将在输出文档中发布。默认情况下,keep_null
设置为 false
。
index
编辑
如果存在,此格式字符串将覆盖此输入事件的索引(对于 elasticsearch 输出),或设置事件元数据的 raw_index
字段(对于其他输出)。此字符串只能引用代理名称和版本以及事件时间戳;要访问动态字段,请使用 output.elasticsearch.index
或处理器。
示例值:"%{[agent.name]}-myindex-%{+yyyy.MM.dd}"
可能会扩展为 "filebeat-myindex-2019.11.01"
。
publisher_pipeline.disable_host
编辑
默认情况下,所有事件都包含 host.name
。可以将此选项设置为 true
以禁用将此字段添加到所有事件。默认值为 false
。