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 基本身份验证。如果启用,则还需要配置 usernamepassword

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-SignatureX-Hub-Signature-256 等。

hmac.key编辑

用于计算 HMAC 签名的密钥。通常,webhook 发送者提供此值。

hmac.type编辑

用于 HMAC 比较的哈希算法。目前,唯一有效的值是 sha256sha1

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 必须为 POSTPUTPATCH。默认方法为 POST。如果指定了 PUTPATCH,则接受使用这些方法类型的请求,但将其视为 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 路径下公开。它们可用于观察输入的活动。

指标 描述

bind_address

输入的绑定地址。

route

输入的 HTTP 请求路由。

is_tls_connection

输入是否正在侦听 TLS 连接。

api_errors_total

API 错误数。

batches_received_total

收到的事件数组数。

batches_published_total

已发布的事件数组数。

events_published_total

已发布的事件数。

size

请求内容长度的直方图。

batch_size

接收到的事件数组长度的直方图。

batch_processing_time

成功批处理时间的直方图(以纳秒为单位)(从收到到非空批处理的 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