Tcp 输入插件

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

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

获取帮助

编辑

如果您对插件有任何疑问,请在 Discuss 论坛中发起主题讨论。如遇错误或功能请求,请在 Github 中提交问题。有关 Elastic 支持的插件列表,请参阅 Elastic 支持矩阵

描述

编辑

通过 TCP 套接字读取事件。

与 stdin 和文件输入类似,每个事件都假定为一行文本。

可以接受来自客户端的连接或连接到服务器,具体取决于 mode

接受 log4j2 日志

编辑

Log4j2 可以通过套接字发送 JSON,我们可以结合使用它和我们的 tcp 输入来接收日志。

首先,我们需要配置您的应用程序以通过套接字以 JSON 格式发送日志。以下 log4j2.xml 可以完成此任务。

请注意,您需要更改此配置中的 hostport 设置以匹配您的需求。

<Configuration>
  <Appenders>
     <Socket name="Socket" host="localhost" port="12345">
       <JsonLayout compact="true" eventEol="true" />
    </Socket>
  </Appenders>
  <Loggers>
    <Root level="info">
      <AppenderRef ref="Socket"/>
    </Root>
  </Loggers>
</Configuration>

要在 Logstash 中接收此日志,您需要使用 tcp 输入和日期过滤器

input {
  tcp {
    port => 12345
    codec => json
  }
}

并添加一个日期过滤器来获取 log4j2 的 timeMillis 字段并将其用作事件时间戳

filter {
  date {
    match => [ "timeMillis", "UNIX_MS" ]
  }
}

事件元数据和 Elastic 通用架构 (ECS)

编辑

除了解码事件之外,此输入还会将有关 TCP 连接本身的元数据添加到每个事件中。当应用程序配置为将事件直接发送到此输入的 TCP 侦听器而不包含有关自身的信息时,这可能会有所帮助。

从历史上看,这些元数据被添加到各种非标准的顶级字段中,这可能在后续流程中造成混淆和架构冲突。通过 ECS 兼容模式,我们可以确保管道在整个事件生命周期中仍然可以访问这些元数据,而不会污染顶级命名空间。

元数据组 ecs: v1, v8 ecs: disabled

接收事件的 TCP 连接的源元数据,包括发送方的名称、IP 和出站端口。

[@metadata][input][tcp][source][name]

[host]

[@metadata][input][tcp][source][ip]

[@metadata][ip_address]

[@metadata][input][tcp][source][port]

[port]

来自代理 TCP 连接的代理元数据。在通过代理接收事件且 proxy_protocol => true 时可用。

[@metadata][input][tcp][proxy][ip]

[proxy_host]

[@metadata][input][tcp][proxy][port]

[proxy_port]

来自安全 TCP 连接的 SSL 主题元数据。在 ssl_enabled => truessl_client_authentication => 'optional' or 'required' 时可用。

[@metadata][input][tcp][ssl][subject]

[sslsubject]

例如,Elastic 通用架构为事件发生的主机保留了 顶级 host 字段。如果事件缺少此元数据,则可以从已添加到事件的源 TCP 连接元数据中将其复制到此处。

filter {
  if [@metadata][input][tcp][source] and ![host] {
    mutate {
      copy => {
        "[@metadata][input][tcp][source][name]" => "[host][name]"
        "[@metadata][input][tcp][source][ip]"   => "[host][ip]"
      }
    }
  }
}

Tcp 输入配置选项

编辑

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

设置 输入类型 必需

dns_reverse_lookup_enabled

布尔值

ecs_compatibility

字符串

host

字符串

mode

字符串,以下之一 ["server", "client"]

port

数字

proxy_protocol

布尔值

ssl_cert

有效的系统文件路径

已弃用

ssl_certificate

有效的系统文件路径

ssl_certificate_authorities

数组

ssl_cipher_suites

字符串

ssl_client_authentication

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

ssl_enable

布尔值

已弃用

ssl_enabled

布尔值

ssl_extra_chain_certs

数组

ssl_key

有效的系统文件路径

ssl_key_passphrase

密码

ssl_supported_protocols

字符串

ssl_verification_mode

字符串,以下之一 ["full", "none"]

ssl_verify

布尔值

已弃用

tcp_keep_alive

布尔值

另请参阅 常用选项,以获取所有输入插件支持的选项列表。

 

dns_reverse_lookup_enabled

编辑

可以通过禁用此设置来避免 DNS 反向查找。如果禁用,则添加到事件的地址元数据将包含 TCP 层中指定的源地址,并且 IP 将不会解析为主机名。

ecs_compatibility

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

    • disabled:在根级别添加非结构化连接元数据
    • v1,v8:在 [@metadata][input][tcp] 下添加结构化连接元数据
  • 默认值取决于正在运行的 Logstash 版本

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

控制此插件与 Elastic 通用架构 (ECS) 的兼容性。此设置的值会影响 TCP 连接元数据在事件上的放置位置

host

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

当 mode 为 server 时,侦听的地址。当 mode 为 client 时,要连接到的地址。

mode

编辑
  • 值可以是以下任何一个:serverclient
  • 默认值为 "server"

操作模式。 server 侦听客户端连接,client 连接到服务器。

port

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

当 mode 为 server 时,侦听的端口。当 mode 为 client 时,要连接到的端口。

proxy_protocol

编辑

代理协议支持,目前仅支持 v1 http://www.haproxy.org/download/1.5/doc/proxy-protocol.txt

ssl_cert

编辑

在 6.4.0 中已弃用。

ssl_certificate 替换

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

PEM 格式证书的路径。此证书将呈现给连接的客户端。

ssl_certificate

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

PEM 格式证书的路径。此证书将呈现给 TLS 连接的另一端。

ssl_certificate_authorities

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

根据这些颁发机构验证客户端证书或证书链。您可以定义多个文件或路径。所有证书都将被读取并添加到信任存储区。

ssl_cipher_suites

编辑
  • 值类型为 字符串
  • 默认值包括 JDK启用的 *所有* 密码套件,并且取决于 JDK 配置

支持的密码套件因使用的 Java 版本而异,条目类似于 TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384。有关更多信息,请参阅 Oracle 的 JDK SunJSSE 提供程序文档 和支持的 Java 密码套件名称 表格。

要检查本地支持的密码套件,请运行以下脚本:$LS_HOME/bin/ruby -e 'p javax.net.ssl.SSLServerSocketFactory.getDefault.getSupportedCipherSuites'

ssl_client_authentication

编辑
  • 值可以是以下任何一个:noneoptionalrequired
  • 默认值为 required

控制服务器在请求客户端连接证书方面的行为:none 禁用客户端身份验证。required 强制客户端出示证书,而 optional 请求客户端证书,但客户端无需出示证书。

启用双向 TLS(optionalrequired)时,客户端出示的证书必须由受信任的 ssl_certificate_authorities (CA) 签名。请注意,服务器不会验证客户端证书 CN(通用名称)或 SAN(主体备用名称)。

此设置仅在 modeserverssl_certificate_authorities 已设置时才能使用。

ssl_enable

编辑

在 6.4.0 中已弃用。

ssl_enabled 替换

启用 SSL(必须设置才能使其他 ssl_ 选项生效)。

ssl_enabled

编辑

启用 SSL(必须设置才能使其他 ssl_ 选项生效)。

ssl_extra_chain_certs

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

一组指向额外 X509 证书的路径。这些路径与证书一起用于构建呈现给客户端的证书链。

ssl_key

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

指定证书对应的私钥路径(PEM 格式)。

ssl_key_passphrase

编辑
  • 值类型为 password
  • 默认值为 nil

私钥的 SSL 密钥口令。

ssl_supported_protocols

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

建立安全连接时允许使用的 SSL/TLS 版本列表。

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

ssl_verification_mode

编辑
  • 值可以是以下任何一个:fullnone
  • 默认值为 full

定义如何在 TLS 连接中验证另一方提供的证书。

full 验证服务器证书的颁发日期是否在 not_before 和 not_after 日期范围内;链接到受信任的证书颁发机构 (CA),并且主机名或 IP 地址与证书中的名称匹配。

none 不执行证书验证。

仅当 modeclient 时才能使用此设置。

将证书验证设置为 none 会禁用 SSL/TLS 的许多安全优势,这非常危险。有关禁用证书验证的更多信息,请阅读 https://www.cs.utexas.edu/~shmat/shmat_ccs12.pdf

ssl_verify

编辑

在 6.4.0 中已弃用。

已由 ssl_client_authenticationssl_verification_mode 替换。

针对 CA 验证 SSL 连接另一端的身份。对于输入,将字段 sslsubject 设置为客户端证书的字段。

tcp_keep_alive

编辑

指示套接字使用 TCP 保活。如果为 true,则底层套接字将使用操作系统的默认保活设置。如果为 false,则不会为底层套接字配置任何保活设置。

通用选项

编辑

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

设置 输入类型 必需

add_field

hash

codec

codec

enable_metric

布尔值

id

字符串

tags

数组

type

字符串

add_field

编辑
  • 值类型为 hash
  • 默认值为 {}

向事件添加字段。

codec

编辑
  • 值类型为 codec
  • 默认值为 "line"

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

enable_metric

编辑
  • 值类型为 boolean
  • 默认值为 true

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

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

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

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

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

tags

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

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

这可以帮助以后进行处理。

type

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

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

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

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

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