HTTP 端点输入
编辑HTTP 端点输入
编辑HTTP 端点输入初始化一个监听 HTTP 服务器,该服务器收集包含 JSON 主体的传入 HTTP POST 请求。主体必须是对象或对象数组,否则可以提供一个通用表达式语言表达式,将 JSON 主体转换为这些类型。任何其他数据类型将导致 HTTP 400(错误请求)响应。对于数组,将为数组中的每个对象创建一个文档。
如果请求发送时带有 Content-Encoding: gzip
标头,则支持 gzip 编码的请求主体。
此输入例如可用于接收来自第三方应用程序或服务的传入 Webhook。
可以将多个端点分配给单个地址和端口,并且 HTTP 端点输入将根据 URL 模式配置解析请求。如果在单个地址上配置了多个端点,则它们必须都具有相同的 TLS 配置,要么全部禁用,要么全部启用并具有相同的配置。
以下是来自服务器的可能响应代码。
HTTP 响应代码 | 名称 | 原因 |
---|---|---|
200 |
OK |
成功返回。 |
400 |
错误请求 |
如果 JSON 主体解码失败或 |
401 |
未授权 |
当基本身份验证、秘密标头或 HMAC 验证失败时返回。 |
405 |
不允许的方法 |
如果使用 POST 以外的方法,则返回此响应。 |
406 |
不可接受 |
如果 POST 请求不包含主体,则返回此响应。 |
415 |
不支持的媒体类型 |
如果 Content-Type 不是 application/json。或者如果存在 Content-Encoding 并且不是 gzip,则返回此响应。 |
500 |
内部服务器错误 |
如果在读取请求时发生 I/O 错误,则返回此响应。 |
503 |
服务不可用 |
如果请求主体的长度将使飞行中的总字节数超出配置的 |
504 |
网关超时 |
如果在所需的超时时间内无法确认请求发布,则返回此响应。 |
当提供带有持续时间的 URL 查询参数 wait_for_completion_timeout
时,端点将强制执行端到端 ACK。例如,https://127.0.0.1:8080/?wait_for_completion_timeout=1m
将等待最多 1 分钟,以将事件发布到集群,然后返回用户定义的消息。如果发布未在超时持续时间内完成,则 HTTP 响应将具有 504 网关超时状态代码。持续时间的语法是一个数字,后跟单位,单位可以是 h、m 和 s。不接受其他 HTTP 查询。如果提供了另一个查询参数或持续时间语法不正确,则请求将失败并返回 HTTP 400“错误请求”状态。
配置示例
基本示例
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 prefix: "."
多个端点示例
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"]
通用表达式语言示例
filebeat.inputs: - type: http_endpoint enabled: true listen_address: 192.168.1.1 listen_port: 8080 program: | obj.records.map(r, { "requestId": obj.requestId, "timestamp": string(obj.timestamp), "event": r, })
此示例将允许处理 JSON 主体,该主体是一个包含多个事件的对象,每个事件都应作为单独的文档摄取,并具有公共时间戳和请求 ID
{ "requestId": "ed4acda5-034f-9f42-bba1-f29aea6d7d8f", "timestamp": 1578090901599, "records": [ { "data": "event record 1" }, { "data": "event record 2" } ] }
配置选项
编辑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 签名可以编码为十六进制或 base64。
hmac.key
编辑用于计算 HMAC 签名的密钥。通常,Webhook 发送者会提供此值。
hmac.type
编辑用于 HMAC 比较的哈希算法。目前,唯一有效的值是 sha256
或 sha1
。
hmac.prefix
编辑签名的前缀。某些 Webhook 会使用一个值作为 HMAC 签名的前缀,例如 sha256=
。
content_type
编辑默认情况下,输入希望传入的 POST 请求包含 application/json
的 Content-Type,以尝试强制传入的数据为有效的 JSON。在某些情况下,当请求的来源无法执行此操作时,可以使用另一个值覆盖它或将其设置为 null。
max_in_flight_bytes
编辑在任何给定时间允许的请求主体长度的总和。如果为非零值,则输入会将此值与包含 wait_for_completion_timeout
请求查询的请求的飞行中请求主体长度之和进行比较,并将返回 503 HTTP 状态代码,以及使用 retry_after
选项配置的 Retry-After 标头。此选项的默认值为零,表示没有限制。
retry_after
编辑如果请求超出 max_in_flight_bytes
限制,则对客户端的响应将包含一个 Retry-After 标头,指定客户端应等待多少秒才能再次重试。此选项的默认值为 10 秒。
program
编辑当主体是一个对象时,输入的正常操作会将主体视为单个事件,当主体是一个数组时,则会将主体视为一组事件。如果主体应以不同的方式处理,例如,应将对象数组字段中的一组事件作为一组事件处理,则可以通过此配置字段提供一个通用表达式语言 (CEL)程序。CEL 程序中的对象名称为 obj
。除了 CEL 标准库中的函数之外,不提供任何 CEL 扩展。支持 CEL 可选类型。
请注意,在评估期间,无法在双精度浮点值中精确表示的数字将转换为字符串以避免数据损坏。
response_code
编辑成功后返回的 HTTP 响应代码。应在 2XX 范围内。
response_body
编辑成功后返回的响应主体。
listen_address
编辑如果存在多个接口,则可以设置 listen_address
来控制侦听器绑定到的 IP 地址。默认为 127.0.0.1
。
listen_port
编辑侦听器绑定到的端口。默认为 8000。
url
编辑此选项指定接受请求的 URL 路径。默认为 /
prefix
编辑此选项指定传入的请求将映射到的前缀。如果 prefix
为 ".
",则请求将映射到结果文档的根。
include_headers
编辑此选项指定应从传入请求复制并包含在文档中的 HTTP 标头列表。所有配置的标头将始终规范化以匹配传入请求的标头。例如,["content-type"]
在 Filebeat 运行时将变为 ["Content-Type"]
。
preserve_original_event
编辑此选项将传入请求的原始未修改主体作为字符串复制到 event.original 字段中,然后再将事件发送到 Elasticsearch。
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.enabled
编辑可以记录 HTTP 请求到本地文件系统以进行调试配置。通过将 tracer.enabled
设置为 true 并设置 tracer.filename
值来启用此选项。还可以使用其他选项来调整日志轮换行为。要删除现有日志,请在不取消设置文件名选项的情况下将 tracer.enabled
设置为 false。
启用此选项会损害安全性,应仅用于调试。
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 时间)。 |
|
以纳秒为单位的成功批次 ACK 所用时间的直方图(非空批次的处理器启动时间到 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
子字典下。如果自定义字段名称与 Filebeat 添加的其他字段名称冲突,则自定义字段将覆盖其他字段。
processors
编辑要应用于输入数据的处理器列表。
有关在配置中指定处理器的信息,请参阅 处理器。
pipeline
编辑为此输入生成的事件设置的摄取管道 ID。
也可以在 Elasticsearch 输出中配置管道 ID,但此选项通常会产生更简单的配置文件。如果管道在输入和输出中都进行了配置,则使用输入中的选项。
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
。