Http 输入插件编辑

  • 插件版本: v3.8.1
  • 发布日期: 2024-04-23
  • 变更日志

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

获取帮助编辑

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

描述编辑

使用此输入,您可以通过 http(s) 接收单行或多行事件。应用程序可以向此输入启动的端点发送 HTTP 请求,Logstash 会将其转换为事件以供后续处理。用户可以传递纯文本、JSON 或任何格式化的数据,并使用相应的编解码器与此输入一起使用。对于 Content-Type application/json,将使用 json 编解码器,但对于所有其他数据格式,将使用 plain 编解码器。

此输入还可以用于接收 webhook 请求以与其他服务和应用程序集成。通过利用 Logstash 中提供的庞大插件生态系统,您可以直接从您的应用程序触发可操作的事件。

事件元数据和 Elastic 通用模式 (ECS)编辑

除了解码事件之外,此输入还会将包含连接信息的 HTTP 标头添加到每个事件中。当 ECS 兼容性被禁用时,标头存储在 headers 字段中,这可能会在后续处理中造成混淆和模式冲突。当启用 ECS 时,我们可以确保管道在整个事件生命周期中都能访问此元数据,而不会污染顶层命名空间。

以下是 ECS 兼容性模式如何影响输出。

ECS `disabled` ECS `v1`,`v8` 可用性 描述

[host]

[host][ip]

始终

主机 IP 地址

[headers]

[@metadata][input][http][request][headers]

始终

完整的 HTTP 标头

[headers][http_version]

[http][version]

始终

HTTP 版本

[headers][http_user_agent]

[user_agent][original]

始终

客户端用户代理

[headers][http_host]

[url][domain] 和 [url][port]

始终

主机域和端口

[headers][request_method]

[http][method]

始终

HTTP 方法

[headers][request_path]

[url][path]

始终

查询路径

[headers][content_length]

[http][request][body][bytes]

始终

请求内容长度

[headers][content_type]

[http][request][mime_type]

始终

请求 MIME 类型

阻塞行为编辑

HTTP 协议不善于处理长时间运行的请求。此插件将在 Logstash 出现积压时返回 429(繁忙)错误,或者超时请求。

如果遇到 429 错误,客户端应该休眠,以指数方式退避,并带有一些随机抖动,然后重试他们的请求。

如果 Logstash 队列被阻塞并且有可用的 HTTP 输入线程,此插件将被阻塞。这会导致大多数 HTTP 客户端超时。在这种情况下,发送的事件仍将被处理。这种行为不是最佳的,将在将来的版本中更改。将来,此插件将在队列繁忙时始终返回 429,并且在队列繁忙时不会超时。

安全编辑

此插件支持标准 HTTP 基本身份验证标头来识别请求者。您可以在向此输入发送数据时传入用户名和密码组合。

您还可以设置 SSL 并通过 https 安全地发送数据,并提供多种选项,例如验证客户端的证书。

编解码器设置编辑

此插件有两个用于编解码器的配置选项:codecadditional_codecs

additional_codecs 中的值优先于在 codec 选项中指定的值。也就是说,只有在 additional_codecs 设置中没有找到与请求内容类型匹配的编解码器时,才会应用默认的 codec

Http 输入配置选项编辑

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

设置 输入类型 必需

additional_codecs

哈希

cipher_suites

数组

已弃用

ecs_compatibility

字符串

主机

字符串

密钥库

路径

已弃用

keystore_password

密码

已弃用

密码

密码

端口

数字

max_pending_requests

数字

response_headers

哈希

response_code

数字,其中之一为 [200, 201, 202, 204]

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_keystore_password

密码

ssl_keystore_path

路径

ssl_keystore_type

字符串

ssl_supported_protocols

数组

ssl_truststore_password

密码

ssl_truststore_path

路径

ssl_truststore_type

字符串

ssl_verify_mode

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

已弃用

线程

数字

tls_max_version

数字

已弃用

tls_min_version

数字

已弃用

用户

字符串

verify_mode

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

已弃用

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

 

additional_codecs编辑

  • 值类型为 哈希
  • 默认值为 {"application/json"=>"json"}

为特定内容类型应用特定编解码器。只有在检查完此列表并且没有找到与请求内容类型匹配的编解码器后,才会应用默认编解码器。

cipher_suites编辑

在 3.6.0 中已弃用。

已替换为 ssl_cipher_suites

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

ecs_compatibility编辑

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

    • disabled:在根级别添加非结构化连接元数据
    • v1,v8:标头添加到 [@metadata][http][header] 下。一些标头被复制到结构化的 ECS 字段 httpurluser_agenthost

控制此插件与 Elastic 通用模式 (ECS) 的兼容性。有关详细信息,请参阅 事件元数据和 Elastic 通用模式 (ECS)

示例输出:ECS 已禁用

{
    "@version" => "1",
    "headers" => {
           "request_path" => "/twitter/tweet/1",
            "http_accept" => "*/*",
           "http_version" => "HTTP/1.1",
         "request_method" => "PUT",
              "http_host" => "localhost:8080",
        "http_user_agent" => "curl/7.64.1",
         "content_length" => "5",
           "content_type" => "application/x-www-form-urlencoded"
    },
    "@timestamp" => 2021-05-28T19:27:28.609Z,
    "host" => "127.0.0.1",
    "message" => "hello"
}

示例输出:ECS 已启用

{
    "@version" => "1",
    "user_agent" => {
        "original" => "curl/7.64.1"
    },
    "http" => {
        "method" => "PUT",
        "request" => {
            "mime_type" => "application/x-www-form-urlencoded",
            "body" => {
                "bytes" => "5"
            }
        },
        "version" => "HTTP/1.1"
    },
    "url" => {
          "port" => "8080",
        "domain" => "snmp1",
          "path" => "/twitter/tweet/1"
    },
    "@timestamp" => 2021-05-28T23:32:38.222Z,
    "host" => {
        "ip" => "127.0.0.1"
    },
    "message" => "hello",
}

host编辑

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

要绑定的主机或 IP

keystore编辑

在 3.7.0 中已弃用。

使用 ssl_keystore_path 代替

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

用于验证客户端证书的 JKS 密钥库

keystore_password编辑

在 3.7.0 中已弃用。

使用 ssl_keystore_password 代替

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

设置密钥库密码

password编辑

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

用于基本身份验证的密码

port编辑

  • 值类型为 数字
  • 默认值为 8080

要绑定的 TCP 端口

max_content_length编辑

  • 值类型为 数字
  • 默认值为 104857600

HTTP 请求的最大内容(以字节为单位)。默认值为 100mb。

max_pending_requestsedit

  • 值类型为 数字
  • 默认值为 200

在由工作线程处理之前,存储在临时队列中的传入请求的最大数量。如果请求到达并且队列已满,则会立即返回 429 响应。此队列存在是为了处理事件的微突发并提高整体吞吐量,因此应非常谨慎地更改它,因为它会导致内存压力并影响性能。如果您需要处理周期性或不可预见的传入请求峰值,请考虑为 logstash 管道启用持久队列。

response_codeedit

  • 值可以是以下任何一个:200、201、202、204
  • 默认值为 200

如果请求成功处理,则为 HTTP 返回代码。

在发生错误条件的情况下,可能会发生其他返回代码,例如无效凭据 (401)、内部错误 (503) 或背压 (429)。

如果设置了 204(无内容),则响应正文不会在响应中发送。

response_headersedit

  • 值类型为 哈希
  • 默认值为 {"Content-Type"=>"text/plain"}

指定一组自定义响应头

remote_host_target_fieldedit

  • 值类型为 字符串
  • 当 ECS 禁用时,默认值为 "host"
  • 当 ECS 启用时,默认值为 [host][ip]

为 http 请求的客户端主机指定目标字段

request_headers_target_fieldedit

  • 值类型为 字符串
  • 当 ECS 禁用时,默认值为 "headers"
  • 当 ECS 启用时,默认值为 [@metadata][http][header]

为 http 请求的客户端主机指定目标字段

ssledit

在 3.7.0 中已弃用。

ssl_enabled 替换

  • 值类型为 boolean
  • 默认值为 false

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

ssl_certificateedit

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

要使用的 SSL 证书。

ssl_certificate_authoritiesedit

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

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

ssl_cipher_suitesedit

  • 值类型为 数组
  • 默认值为 ['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_authenticationedit

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

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

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

ssl_enablededit

  • 值类型为 boolean
  • 默认值为 false

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

ssl_handshake_timeoutedit

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

不完整的 ssl 握手超时的时间(以毫秒为单位)

ssl_keyedit

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

要使用的 SSL 密钥。注意:此密钥需要使用 PKCS8 格式,您可以使用 OpenSSL 将其转换,以获取更多信息。

ssl_key_passphraseedit

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

要使用的 SSL 密钥密码。

ssl_keystore_pathedit

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

包含私钥和证书的密钥库文件的路径。它必须是 Java 密钥库 (jks) 或 PKCS#12 文件。

您不能同时使用此设置和 ssl_certificate

ssl_keystore_typeedit

  • 值可以是以下任何一个:jkspkcs12
  • 如果未提供,则将从密钥库文件名推断出该值。

密钥库文件的格式。它必须是 jkspkcs12

ssl_keystore_passwordedit

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

设置 JKS 密钥库密码

ssl_supported_protocolsedit

  • 值类型为 数组
  • 允许的值为:'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_truststore_passwordedit

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

设置信任库密码

ssl_truststore_pathedit

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

包含要信任的证书的密钥库的路径。它必须是 Java 密钥库 (jks) 或 PKCS#12 文件。

您不能同时使用此设置和 ssl_certificate_authorities

ssl_truststore_typeedit

  • 值可以是以下任何一个:jkspkcs12
  • 如果未提供,则将从信任库文件名推断出该值。

信任库文件的格式。它必须是 jkspkcs12

ssl_verify_modeedit

在 3.7.0 中已弃用。

ssl_client_authentication 替换

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

默认情况下,服务器不会执行任何客户端验证。

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

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

此选项需要与 ssl_certificate_authorities 和定义的 CA 列表一起使用。

threadsedit

  • 值类型为 数字
  • 默认值为处理器数量

用于接受连接和处理请求的线程数

tls_max_versionedit

在 3.6.0 中已弃用。

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

tls_min_versionedit

在 3.6.0 中已弃用。

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

useredit

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

基本身份验证的用户名

verify_modeedit

在 3.6.0 中已弃用。

ssl_verify_mode 替换

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

设置客户端证书验证方法。有效方法:none、peer、force_peer

通用选项edit

以下配置选项受所有输入插件支持

设置 输入类型 必需

add_field

哈希

codec

codec

enable_metric

布尔值

id

字符串

tags

数组

type

字符串

详情edit

 

add_fieldedit

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

向事件添加字段

codecedit

  • 值类型为 codec
  • 默认值为 "plain"

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

enable_metricedit

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

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

idedit

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

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

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

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

tagsedit

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

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

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

typeedit

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

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

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

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

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