Beats 输入插件
编辑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]}" } }
|
使用此处所示的 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 版本(例如 |
[@metadata][input][beats][tls][client][subject] |
[@metadata][tls_peer][subject] |
包含远程端的标识名称(例如 |
[@metadata][input][beats][tls][cipher] |
[@metadata][tls_peer][cipher_suite] |
包含使用的密码套件的名称(例如 |
丰富类别:codec_metadata
ECS `v1`,`v8` | ECS `disabled` | 描述 |
---|---|---|
[tag] |
[tag] |
包含 |
[event][original] |
不适用 |
启用 ECS 后,即使 |
Beats 输入配置选项
编辑此插件支持以下配置选项以及稍后描述的通用选项。
设置 | 输入类型 | 必需 |
---|---|---|
已弃用 |
||
已弃用 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
已弃用 |
||
是 |
||
已弃用 |
||
有效的 文件系统路径 |
否 |
|
否 |
||
否 |
||
字符串, |
否 |
|
否 |
||
否 |
||
有效的 文件系统路径 |
否 |
|
否 |
||
已弃用 |
||
否 |
||
字符串, |
已弃用 |
|
已弃用 |
||
已弃用 |
另请参阅 通用选项,了解所有输入插件支持的选项列表。
add_hostname
编辑在 6.0.0 中已弃用。
默认值已更改为 false
。在 7.0.0 中将删除此设置
- 值类型为 布尔值
- 默认值为
false
标志,用于确定是否使用 Beat 在 hostname
字段中提供的值向事件添加 host
字段。
ecs_compatibility
编辑- 值类型为 字符串
-
支持的值为
-
disabled
:在根级别添加非结构化连接元数据 -
v1
:在符合 ECS v1 的命名空间下添加结构化连接元数据 -
v8
:在符合 ECS v8 的命名空间下添加结构化连接元数据
-
-
默认值取决于正在运行的 Logstash 版本
- 当 Logstash 提供
pipeline.ecs_compatibility
设置时,其值将用作默认值 - 否则,默认值为
disabled
。
- 当 Logstash 提供
有关详细信息,请参阅 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_metadata
和 ssl_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 的直接内存来实现。
ssl
编辑在 6.6.0 中已弃用。
已替换为 ssl_enabled
- 值类型为 布尔值
- 默认值为
false
默认情况下,事件以纯文本发送。您可以通过将 ssl
设置为 true 并配置 ssl_certificate
和 ssl_key
选项来启用加密。
ssl_certificate_authorities
编辑- 值类型为 数组
- 默认值为
[]
针对这些机构验证客户端证书。您可以定义多个文件或路径。所有证书都将被读取并添加到信任库。您需要将 ssl_client_authentication
配置为 optional
或 required
才能启用验证。
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
编辑- 值可以是以下任意一个:
none
、optional
、required
- 默认值为
"none"
控制服务器在请求客户端连接中的证书方面的行为:required
强制客户端提供证书,而 optional
请求客户端证书,但不要求客户端提供证书。默认为 none
,这会禁用客户端身份验证。
启用相互 TLS 时(required
或 optional
),客户端提供的证书必须由受信任的 ssl_certificate_authorities
(CA) 签名。请注意,服务器不会验证客户端证书 CN(通用名称)或 SAN(主题备用名称)。
仅当设置了 ssl_certificate_authorities
时,才能使用此设置。
ssl_enabled
编辑- 值类型为 布尔值
- 默认值为
false
默认情况下,事件以纯文本发送。您可以通过将 ssl_enabled
设置为 true 并配置 ssl_certificate
和 ssl_key
选项来启用加密。
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_peer_metadata
编辑在 6.5.0 中已弃用。
已替换为 enrich
- 值类型为 布尔值
- 默认值为
false
允许将客户端证书信息存储在事件的元数据中。
仅当 ssl_client_authentication
设置为 optional
或 required
时,此选项才有效。
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 中已弃用。
- 值可以是以下任意一个:
none
、peer
、force_peer
- 默认值为
"none"
默认情况下,服务器不进行任何客户端验证。如果配置了 ssl_certificate_authorities
,并且未为此选项提供值或提供 none
,则它默认为 force_peer
而不是 none
。
peer
将使服务器要求客户端提供证书。如果客户端提供证书,则将对其进行验证。
force_peer
将使服务器要求客户端提供证书。如果客户端未提供证书,则连接将关闭。
启用相互 TLS 时(peer
或 force_peer
),客户端提供的证书必须由受信任的 ssl_certificate_authorities
(CA) 签名。请注意,服务器不会验证客户端证书 CN(通用名称)或 SAN(主题备用名称)。
仅当设置了 ssl_certificate_authorities
时,才能使用此设置。
tls_max_version
编辑在 6.4.0 中已弃用。
- 值类型为 数字
加密连接允许的最大 TLS 版本。该值必须是以下之一:1.1 表示 TLS 1.1,1.2 表示 TLS 1.2,1.3 表示 TLSv1.3
常用选项
编辑所有输入插件都支持这些配置选项
codec
编辑- 值类型是 编解码器
- 默认值是
"plain"
用于输入数据的编解码器。输入编解码器是一种方便的方法,可以在数据进入输入之前对其进行解码,而无需在 Logstash 管道中使用单独的过滤器。
id
编辑- 值类型是 字符串
- 此设置没有默认值。
向插件配置添加唯一的 ID
。如果未指定 ID,Logstash 将生成一个。强烈建议在配置中设置此 ID。当您有两个或多个相同类型的插件时,这特别有用,例如,如果您有两个 beats 输入。在这种情况下添加命名 ID 将有助于在使用监控 API 时监控 Logstash。
input { beats { id => "my_plugin_id" } }
id
字段中的变量替换仅支持环境变量,不支持使用来自秘密存储的值。
type
编辑- 值类型是 字符串
- 此设置没有默认值。
向此输入处理的所有事件添加 type
字段。
类型主要用于过滤器激活。
该类型作为事件本身的一部分存储,因此您也可以使用该类型在 Kibana 中搜索它。
如果您尝试在已经具有类型的事件上设置类型(例如,当您从 shipper 向 indexer 发送事件时),则新的输入将不会覆盖现有类型。在 shipper 上设置的类型会随着该事件的生命周期一直存在,即使发送到另一个 Logstash 服务器也是如此。
Beats shipper 会自动在事件上设置 type
字段。您无法在 Logstash 配置中覆盖此设置。如果您在 Logstash 中为 type
配置选项指定设置,则该设置将被忽略。