Beats 输入插件编辑

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

  • 插件版本:v6.8.3
  • 发布时间:2024-04-23
  • 更新日志

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

获取帮助编辑

如果您对该插件有任何疑问,请在 论坛 中打开一个主题。对于错误或功能请求,请在 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 之前处理多行事件。您不能使用 多行编解码器插件 来处理多行事件。这样做会导致 Logstash 启动失败。

版本化索引编辑

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

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

此配置会生成类似于 filebeat-8.14.2-2024-07-08 的每日索引名称。

事件充实和 Elastic 通用架构 (ECS)编辑

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

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

  • 启用 ECS 兼容性后,将以 ECS 兼容结构添加充实字段。
  • 禁用 ECS 兼容性后,将以与此插件向后兼容的方式添加充实字段,但已知这与 Elastic 通用架构冲突。

充实类别: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

有效的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 内核 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编辑

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

要监听的端口。

ssl编辑

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

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

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

tags编辑

  • 值类型为 数组
  • 此设置没有默认值。

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

这有助于以后的处理。

type编辑

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

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

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

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

如果您尝试在已有类型的事件上设置类型(例如,当您将事件从传送器发送到索引器时),则新输入不会覆盖现有类型。在传送器设置的类型将始终保留在该事件中,即使该事件被发送到另一个 Logstash 服务器也是如此。

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