Beats 输入插件

编辑

input-elastic_agent 插件是 input-beats 插件的下一代。它们目前共享代码和 通用代码库

  • 插件版本:v6.9.1
  • 发布日期:2024-11-18
  • 更新日志

有关其他版本,请参阅版本化插件文档

获取帮助

编辑

有关插件的问题,请在 Discuss 论坛中开启一个主题。对于错误或功能请求,请在 Github 中开启一个 issue。有关 Elastic 支持的插件列表,请查阅 Elastic 支持矩阵

描述

编辑

此输入插件使 Logstash 能够接收来自 Beats 框架的事件。

以下示例展示了如何配置 Logstash 以侦听端口 5044 上的传入 Beats 连接并索引到 Elasticsearch 中。

input {
  beats {
    port => 5044
  }
}

output {
  elasticsearch {
    hosts => ["https://127.0.0.1:9200"]
    index => "%{[@metadata][beat]}-%{[@metadata][version]}" 
  }
}

%{[@metadata][beat]} 将索引名称的第一部分设置为元数据字段的值,而 %{[@metadata][version]} 将第二部分设置为 Beat 版本。例如:metricbeat-6.1.6。

使用此处所示的 Logstash 配置索引到 Elasticsearch 中的事件将类似于 Beats 直接索引到 Elasticsearch 中的事件。

如果未使用 ILM,则将 index 设置为 %{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd},以便 Logstash 根据来自 Beats 的事件的 @timestamp 值每天创建一个索引。

内存使用

编辑

此插件除了堆内存外,还使用“堆外”直接内存。默认情况下,JVM 的堆外直接内存限制与堆大小相同。例如,设置 -Xmx10G 而不设置直接内存限制将为堆分配 10GB,并为直接内存分配额外的 10GB,总共分配 20GB。您可以使用 Logstash JVM 设置中的 -XX:MaxDirectMemorySize 设置直接内存量。考虑将直接内存设置为堆大小的一半。将直接内存设置得太低会降低摄取性能。

请确保堆和直接内存的总和不超过服务器上的可用总内存,以避免 OutOfDirectMemoryError。

多行事件

编辑

如果您正在传输跨越多行的事件,则需要在将事件数据发送到 Logstash 之前使用 Filebeat 中可用的配置选项来处理多行事件。您不能使用 多行编解码器插件来处理多行事件。这样做会导致 Logstash 启动失败。

版本化索引

编辑

为了最大限度地减少未来模式更改对 Elasticsearch 中现有索引和映射的影响,请配置 Elasticsearch 输出以写入版本化索引。您为 index 设置指定的模式控制索引名称。

index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
%{[@metadata][beat]}
将索引名称的第一部分设置为 beat 元数据字段的值,例如,filebeat
%{[@metadata][version]}
将名称的第二部分设置为 Beat 版本,例如,8.17.0
%{+YYYY.MM.dd}
将名称的第三部分设置为基于 Logstash @timestamp 字段的日期。

此配置会导致每日索引名称类似 filebeat-8.17.0-2024-12-12

事件丰富和 Elastic Common Schema (ECS)

编辑

解码 Beats 事件时,此插件会使用有关事件源的元数据来丰富每个事件,从而使此信息在进一步处理期间可用。您可以使用 enrich 选项来激活或停用各个丰富类别。

这些丰富字段的位置取决于是否启用了 ECS 兼容模式

  • 当 ECS 兼容性启用时,丰富字段将添加到与 ECS 兼容的结构中。
  • 当 ECS 兼容性禁用时,丰富字段将以与此插件向后兼容的方式添加,但已知与 Elastic Common Schema 冲突。

丰富类别:source_metadata

ECS `v1`,`v8` ECS `disabled` 描述

[@metadata][input][beats][host][name]

[host]

Beat 主机的名称或地址

[@metadata][input][beats][host][ip]

[@metadata][ip_address]

连接到此输入的 Beats 客户端的 IP 地址

丰富类别:ssl_peer_metadata

ECS `v1`,`v8` ECS `disabled` 描述

[@metadata][tls_peer][status]

[@metadata][tls_peer][status]

包含“已验证”或“未验证”标签;在启用 SSL 时可用。

[@metadata][input][beats][tls][version_protocol]

[@metadata][tls_peer][protocol]

包含使用的 TLS 版本(例如 TLSv1.2);在 SSL 状态为“已验证”时可用

[@metadata][input][beats][tls][client][subject]

[@metadata][tls_peer][subject]

包含远程端的标识名称(例如 CN=artifacts-no-kpi.elastic.co);在 SSL 状态为“已验证”时可用

[@metadata][input][beats][tls][cipher]

[@metadata][tls_peer][cipher_suite]

包含使用的密码套件的名称(例如 TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256);在 SSL 状态为“已验证”时可用

丰富类别:codec_metadata

ECS `v1`,`v8` ECS `disabled` 描述

[tag]

[tag]

包含 beats_input_codec_XXX_applied,其中 XXX 是编解码器的名称

[event][original]

不适用

启用 ECS 后,即使 [event][original] 字段在正在处理的事件上不存在,此插件的默认编解码器也能确保使用按处理方式的字节填充该字段。

Beats 输入配置选项

编辑

此插件支持以下配置选项以及稍后描述的通用选项

设置 输入类型 必需

add_hostname

布尔值

已弃用

cipher_suites

数组

已弃用

client_inactivity_timeout

数字

ecs_compatibility

字符串

enrich

字符串

event_loop_threads

数字

executor_threads

数字

host

字符串

include_codec_tag

布尔值

已弃用

port

数字

ssl

布尔值

已弃用

ssl_certificate

有效的 文件系统路径

ssl_certificate_authorities

数组

ssl_cipher_suites

数组

ssl_client_authentication

字符串["none", "optional", "required"]之一

ssl_enabled

布尔值

ssl_handshake_timeout

数字

ssl_key

有效的 文件系统路径

ssl_key_passphrase

密码

ssl_peer_metadata

布尔值

已弃用

ssl_supported_protocols

数组

ssl_verify_mode

字符串["none", "peer", "force_peer"]之一

已弃用

tls_max_version

数字

已弃用

tls_min_version

数字

已弃用

另请参阅 通用选项,了解所有输入插件支持的选项列表。

 

add_hostname

编辑

在 6.0.0 中已弃用。

默认值已更改为 false。在 7.0.0 中将删除此设置

标志,用于确定是否使用 Beat 在 hostname 字段中提供的值向事件添加 host 字段。

cipher_suites

编辑

在 6.4.0 中已弃用。

已替换为 ssl_cipher_suites

要使用的密码套件列表,按优先级列出。

client_inactivity_timeout

编辑
  • 值类型为 数字
  • 默认值为 60

在 X 秒不活动后关闭空闲客户端。

ecs_compatibility

编辑
  • 值类型为 字符串
  • 支持的值为

    • disabled:在根级别添加非结构化连接元数据
    • v1:在符合 ECS v1 的命名空间下添加结构化连接元数据
    • v8:在符合 ECS v8 的命名空间下添加结构化连接元数据
  • 默认值取决于正在运行的 Logstash 版本

    • 当 Logstash 提供 pipeline.ecs_compatibility 设置时,其值将用作默认值
    • 否则,默认值为 disabled

有关详细信息,请参阅 ECS 映射

enrich

编辑
  • 值类型为 字符串

    • 也可以提供 数组
    • 配置哪些丰富应用于每个事件
    • 默认值为 [codec_metadata, source_metadata],此插件的未来版本可能会扩展该值以包括其他丰富。
    • 支持的值为

      丰富 描述

      codec_metadata

      关于编解码器如何将字节序列转换为此事件的信息,例如使用了哪个编解码器。此外,如果没有明确指定编解码器,则从 enrich排除 codec_metadata 将禁用此插件的 ecs_compatibility

      source_metadata

      关于事件来源的信息,例如此输入接收事件的入站连接的 IP 地址

      ssl_peer_metadata

      关于我们接收事件的 SSL 对等方 的详细信息,例如在建立与此输入的连接时提供的 SSL 客户端证书中的身份信息

      all

      包含所有可用丰富信息的别名(包括此插件未来版本中引入的额外丰富信息)

      none

      排除所有可用丰富信息的别名。 请注意,使用此选项显式定义编解码器不会禁用 ecs_compatibility,而是依赖于管道或编解码器 ecs_compatibility 配置。

示例

此配置禁用所有丰富信息

input {
  beats {
    port => 5044
    enrich => none
  }
}

或者,显式启用 source_metadatassl_peer_metadata(禁用所有其他信息)

input {
  beats {
    port => 5044
    enrich => [source_metadata, ssl_peer_metadata]
  }
}

event_loop_threads

编辑
  • 值类型为 数字
  • 默认为 0。

当设置为 0 时,实际默认值为 available_processors * 2

这是一个专家级设置,通常不需要设置。Beats 插件基于非阻塞机制实现,需要多个事件循环和执行器线程。事件循环线程负责与客户端通信(接受传入连接、排队/出队任务和响应),而执行器线程处理任务。此配置旨在限制或增加为事件循环创建的线程数。如果您需要设置执行器线程计数,请参阅 executor_threads 配置。

executor_threads

编辑
  • 值类型为 数字
  • 默认值等于 CPU 核心数(每个 CPU 核心 1 个执行器线程)。

用于处理传入 Beats 请求的线程数。默认情况下,Beats 输入创建的线程数等于 CPU 核心数。这些线程处理传入连接、从已建立的套接字读取数据以及执行与网络连接管理相关的大部分任务。解析 Lumberjack 协议会卸载到专用的线程池。

通常,您不需要修改此设置。如果您发送非常大的事件并观察到“OutOfDirectMemory”异常,您可能希望将此数字减少到 CPU 核心数的一半或 1/4。此更改减少了将批量数据解压缩到直接内存中的线程数。但是,这只是一种缓解措施,因为正确的解决方案可能需要调整 Logstash 部署的大小,可以通过增加 Logstash 节点的数量或增加 JVM 的直接内存来实现。

host

编辑
  • 值类型为 字符串
  • 默认值为 "0.0.0.0"

要监听的 IP 地址。

include_codec_tag

编辑

在 6.5.0 中已弃用。

已替换为 enrich

port

编辑
  • 这是一个必需的设置。
  • 值类型为 数字
  • 此设置没有默认值。

要监听的端口。

在 6.6.0 中已弃用。

已替换为 ssl_enabled

默认情况下,事件以纯文本发送。您可以通过将 ssl 设置为 true 并配置 ssl_certificatessl_key 选项来启用加密。

ssl_certificate

编辑
  • 值类型为 path
  • 此设置没有默认值。

要使用的 SSL 证书。

ssl_certificate_authorities

编辑
  • 值类型为 数组
  • 默认值为 []

针对这些机构验证客户端证书。您可以定义多个文件或路径。所有证书都将被读取并添加到信任库。您需要将 ssl_client_authentication 配置为 optionalrequired 才能启用验证。

ssl_cipher_suites

编辑
  • 值类型为 数组
  • 默认值为 ['TLS_AES_256_GCM_SHA384', 'TLS_AES_128_GCM_SHA256', 'TLS_CHACHA20_POLY1305_SHA256', 'TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384', 'TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384', 'TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256', 'TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256', 'TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256', 'TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256', 'TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384', 'TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384', 'TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256', 'TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256']

要使用的密码套件列表,按优先级列出。此默认列表适用于 OpenJDK 11.0.14 及更高版本。对于旧版本的 JDK,默认列表仅包含该版本支持的套件。例如,旧版本不支持 ChaCha20 系列密码。

ssl_client_authentication

编辑
  • 值可以是以下任意一个:noneoptionalrequired
  • 默认值为 "none"

控制服务器在请求客户端连接中的证书方面的行为:required 强制客户端提供证书,而 optional 请求客户端证书,但不要求客户端提供证书。默认为 none,这会禁用客户端身份验证。

启用相互 TLS 时(requiredoptional),客户端提供的证书必须由受信任的 ssl_certificate_authorities (CA) 签名。请注意,服务器不会验证客户端证书 CN(通用名称)或 SAN(主题备用名称)。

仅当设置了 ssl_certificate_authorities 时,才能使用此设置。

ssl_enabled

编辑

默认情况下,事件以纯文本发送。您可以通过将 ssl_enabled 设置为 true 并配置 ssl_certificatessl_key 选项来启用加密。

ssl_handshake_timeout

编辑
  • 值类型为 数字
  • 默认值为 10000

不完整的 SSL 握手超时的毫秒数

ssl_key

编辑
  • 值类型为 path
  • 此设置没有默认值。

要使用的 SSL 密钥。此密钥必须为 PKCS8 格式且采用 PEM 编码。您可以使用 openssl pkcs8 命令完成转换。例如,将 PEM 编码的 PKCS1 私钥转换为 PEM 编码的非加密 PKCS8 密钥的命令是

openssl pkcs8 -inform PEM -in path/to/logstash.key -topk8 -nocrypt -outform PEM -out path/to/logstash.pkcs8.key

ssl_key_passphrase

编辑
  • 值类型为 password
  • 此设置没有默认值。

要使用的 SSL 密钥密码。

ssl_peer_metadata

编辑

在 6.5.0 中已弃用。

已替换为 enrich

允许将客户端证书信息存储在事件的元数据中。

仅当 ssl_client_authentication 设置为 optionalrequired 时,此选项才有效。

ssl_supported_protocols

编辑
  • 值类型为 数组
  • 允许的值为:'TLSv1.1''TLSv1.2''TLSv1.3'
  • 默认值取决于所使用的 JDK。对于最新的 Logstash,默认值为 ['TLSv1.2', 'TLSv1.3']'TLSv1.1' 不被认为是安全的,仅为旧应用程序提供。

建立与 HTTP 端点的连接时使用的允许 SSL/TLS 版本列表。

对于 Java 8,仅自 8u262 (AdoptOpenJDK) 起支持 'TLSv1.3',但要求您在 Logstash 中设置 LS_JAVA_OPTS="-Djdk.tls.client.protocols=TLSv1.3" 系统属性。

如果您配置插件在任何最近的 JVM(例如与 Logstash 打包的 JVM)上使用 'TLSv1.1',则默认情况下禁用该协议,并且需要通过更改 $JDK_HOME/conf/security/java.security 配置文件中的 jdk.tls.disabledAlgorithms 手动启用。也就是说,需要从列表中删除 TLSv1.1

ssl_verify_mode

编辑

在 6.6.0 中已弃用。

已替换为 ssl_client_authentication

  • 值可以是以下任意一个:nonepeerforce_peer
  • 默认值为 "none"

默认情况下,服务器不进行任何客户端验证。如果配置了 ssl_certificate_authorities,并且未为此选项提供值或提供 none,则它默认为 force_peer 而不是 none

peer 将使服务器要求客户端提供证书。如果客户端提供证书,则将对其进行验证。

force_peer 将使服务器要求客户端提供证书。如果客户端未提供证书,则连接将关闭。

启用相互 TLS 时(peerforce_peer),客户端提供的证书必须由受信任的 ssl_certificate_authorities (CA) 签名。请注意,服务器不会验证客户端证书 CN(通用名称)或 SAN(主题备用名称)。

仅当设置了 ssl_certificate_authorities 时,才能使用此设置。

tls_max_version

编辑

在 6.4.0 中已弃用。

已替换为 ssl_supported_protocols

加密连接允许的最大 TLS 版本。该值必须是以下之一:1.1 表示 TLS 1.1,1.2 表示 TLS 1.2,1.3 表示 TLSv1.3

tls_min_version

编辑

在 6.4.0 中已弃用。

已替换为 ssl_supported_protocols

加密连接允许的最小 TLS 版本。该值必须是以下之一:1.1 表示 TLS 1.1,1.2 表示 TLS 1.2,1.3 表示 TLS 1.3

常用选项

编辑

所有输入插件都支持这些配置选项

设置 输入类型 必需

add_field

hash

codec

codec

enable_metric

布尔值

id

字符串

tags

数组

type

字符串

add_field

编辑
  • 值类型是 哈希
  • 默认值是 {}

向事件添加字段

codec

编辑

用于输入数据的编解码器。输入编解码器是一种方便的方法,可以在数据进入输入之前对其进行解码,而无需在 Logstash 管道中使用单独的过滤器。

enable_metric

编辑

禁用或启用此特定插件实例的指标记录,默认情况下我们会记录所有可以记录的指标,但您可以禁用特定插件的指标收集。

  • 值类型是 字符串
  • 此设置没有默认值。

向插件配置添加唯一的 ID。如果未指定 ID,Logstash 将生成一个。强烈建议在配置中设置此 ID。当您有两个或多个相同类型的插件时,这特别有用,例如,如果您有两个 beats 输入。在这种情况下添加命名 ID 将有助于在使用监控 API 时监控 Logstash。

input {
  beats {
    id => "my_plugin_id"
  }
}

id 字段中的变量替换仅支持环境变量,不支持使用来自秘密存储的值。

tags

编辑
  • 值类型是 数组
  • 此设置没有默认值。

向您的事件添加任意数量的标签。

这有助于后续处理。

type

编辑
  • 值类型是 字符串
  • 此设置没有默认值。

向此输入处理的所有事件添加 type 字段。

类型主要用于过滤器激活。

该类型作为事件本身的一部分存储,因此您也可以使用该类型在 Kibana 中搜索它。

如果您尝试在已经具有类型的事件上设置类型(例如,当您从 shipper 向 indexer 发送事件时),则新的输入将不会覆盖现有类型。在 shipper 上设置的类型会随着该事件的生命周期一直存在,即使发送到另一个 Logstash 服务器也是如此。

Beats shipper 会自动在事件上设置 type 字段。您无法在 Logstash 配置中覆盖此设置。如果您在 Logstash 中为 type 配置选项指定设置,则该设置将被忽略。