Beats 输入插件

编辑

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

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

对于其他版本,请参阅 版本化插件文档

获取帮助

编辑

有关插件的问题,请在 Discuss 论坛中发起主题。对于错误或功能请求,请在 Github 中提交问题。有关 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

多行事件

编辑

如果您正在发送跨越多行的事件,则需要使用 Filebeat 中提供的配置选项 处理多行事件,然后再将事件数据发送到 Logstash。您不能使用 Multiline 编解码器插件 处理多行事件。这样做会导致 Logstash 无法启动。

版本化索引

编辑

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

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

此配置会生成类似 filebeat-8.16.0-2024-11-19 的每日索引名称。

事件增强和 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]

N/A

当启用 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

有效的 filesystem 路径

ssl_certificate_authorities

数组

ssl_cipher_suites

数组

ssl_client_authentication

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

ssl_enabled

布尔值

ssl_handshake_timeout

数字

ssl_key

有效的 filesystem 路径

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 内核一个执行器线程)。

用于处理传入 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

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

要使用的 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

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

要使用的 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

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

要使用的 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,'TLSv1.3' 仅从 8u262(AdoptOpenJDK)开始支持,但要求您在 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中搜索它。

如果您尝试在已经具有类型的事件上设置类型(例如,当您从发货器发送事件到索引器时),则新的输入不会覆盖现有类型。即使发送到另一个Logstash服务器,在发货器处设置的类型也会与该事件保持关联,直到其生命周期结束。

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