Http 输入插件
编辑Http 输入插件
编辑- 插件版本:v3.9.2
- 发布日期:2024-11-18
- 更新日志
对于其他版本,请参阅版本化插件文档。
获取帮助
编辑有关插件的问题,请在Discuss论坛中开一个主题。对于错误或功能请求,请在Github中打开一个问题。有关 Elastic 支持的插件列表,请参阅Elastic 支持矩阵。
描述
编辑使用此输入,您可以通过 http(s) 接收单个或多行事件。应用程序可以向此输入启动的端点发送 HTTP 请求,Logstash 将其转换为事件以进行后续处理。用户可以传递纯文本、JSON 或任何格式化数据,并在此输入中使用相应的编解码器。对于 Content-Type application/json
,使用 json
编解码器,但对于所有其他数据格式,使用 plain
编解码器。
此输入还可用于接收 webhook 请求,以与其他服务和应用程序集成。通过利用 Logstash 中提供的庞大插件生态系统,您可以直接从您的应用程序触发可操作的事件。
事件元数据和 Elastic Common Schema (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 安全地发送数据,并提供多种选项,例如验证客户端的证书。
编解码器设置
编辑此插件有两个编解码器配置选项:codec
和 additional_codecs
。
additional_codecs
中的值优先于 codec
选项中指定的值。也就是说,仅当在 additional_codecs
设置中找不到请求的内容类型的编解码器时,才会应用默认的 codec
。
Http 输入配置选项
编辑此插件支持以下配置选项以及稍后描述的常用选项。
设置 | 输入类型 | 必需 |
---|---|---|
否 |
||
已弃用 |
||
否 |
||
否 |
||
已弃用 |
||
已弃用 |
||
否 |
||
否 |
||
否 |
||
否 |
||
数字, |
否 |
|
已弃用 |
||
有效的文件系统路径 |
否 |
|
否 |
||
否 |
||
字符串, |
否 |
|
否 |
||
否 |
||
有效的文件系统路径 |
否 |
|
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
字符串, |
已弃用 |
|
否 |
||
已弃用 |
||
已弃用 |
||
否 |
||
字符串, |
已弃用 |
另请参阅常用选项,了解所有输入插件支持的选项列表。
additional_codecs
编辑- 值类型是哈希
- 默认值是
{"application/json"=>"json"}
为特定内容类型应用特定的编解码器。仅在检查此列表且未找到请求的内容类型的编解码器后,才会应用默认编解码器
ecs_compatibility
编辑- 值类型是字符串
-
支持的值为
-
disabled
:在根级别添加非结构化连接元数据 -
v1
、v8
:在[@metadata][http][header]
下添加标头。一些标头被复制到结构化的 ECS 字段http
、url
、user_agent
和host
-
控制此插件与Elastic Common Schema (ECS)的兼容性。有关详细信息,请参阅事件元数据和 Elastic Common Schema (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", }
max_pending_requests
编辑- 值类型是数字
- 默认值是 200
在被工作线程处理之前,存储在临时队列中的最大传入请求数。如果请求到达且队列已满,将立即返回 429 响应。此队列用于处理事件的微爆发并提高整体吞吐量,因此应非常小心地更改它,因为它可能导致内存压力并影响性能。如果您需要处理传入请求的定期或不可预见的峰值,请考虑为 logstash 管道启用持久队列。
response_code
编辑- 值可以是:200、201、202、204 中的任何一个
- 默认值是
200
如果请求已成功处理,则 HTTP 返回代码。
在出现错误情况时可能会出现其他返回代码,例如无效凭据 (401)、内部错误 (503) 或背压 (429)。
如果设置了 204(无内容),则响应正文将不会在响应中发送。
remote_host_target_field
编辑- 值类型是字符串
- 当 ECS 被禁用时,默认值是
"host"
- 当 ECS 被启用时,默认值是
[host][ip]
为 HTTP 请求的客户端主机指定目标字段
request_headers_target_field
编辑- 值类型是字符串
- 当 ECS 被禁用时,默认值是
"headers"
- 当 ECS 被启用时,默认值是
[@metadata][http][header]
为 HTTP 请求的客户端主机指定目标字段
ssl
编辑在 3.7.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
,禁用客户端身份验证。
仅当设置了 ssl_certificate_authorities
时,才能使用此设置。
ssl_enabled
编辑- 值类型是布尔值
- 默认值是
false
默认情况下,事件以纯文本形式发送。您可以通过将 ssl_enabled
设置为 true 并配置 ssl_certificate
和 ssl_key
选项来启用加密。
ssl_keystore_path
编辑- 值类型是路径
- 此设置没有默认值。
包含私钥和证书的密钥库文件的路径。它必须是 Java 密钥库 (jks) 或 PKCS#12 文件。
您不能同时使用此设置和 ssl_certificate
。
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 上使用 'TLSv1.1'
,例如与 Logstash 打包的 JVM,则默认情况下该协议处于禁用状态,需要通过更改 $JDK_HOME/conf/security/java.security 配置文件中的 jdk.tls.disabledAlgorithms
来手动启用。也就是说,需要从列表中删除 TLSv1.1
。
ssl_truststore_path
编辑- 值类型是路径
- 此设置没有默认值。
包含要信任的证书的密钥库的路径。它必须是 Java 密钥库 (jks) 或 PKCS#12 文件。
您不能同时使用此设置和 ssl_certificate_authorities
。
ssl_verify_mode
编辑在 3.7.0 中已弃用。
- 值可以是以下任何一个:
none
、peer
、force_peer
- 默认值为
"none"
默认情况下,服务器不进行任何客户端验证。
peer
将使服务器要求客户端提供证书。如果客户端提供证书,则将对其进行验证。
force_peer
将使服务器要求客户端提供证书。如果客户端不提供证书,则将关闭连接。
此选项需要与 ssl_certificate_authorities
和定义的 CA 列表一起使用。
tls_max_version
编辑在 3.6.0 中已弃用。
- 值类型是数字
加密连接允许的最大 TLS 版本。该值必须是以下之一:1.1 表示 TLS 1.1,1.2 表示 TLS 1.2,1.3 表示 TLSv1.3
tls_min_version
编辑在 3.6.0 中已弃用。
- 值类型是数字
加密连接允许的最小 TLS 版本。该值必须是以下之一:1.1 表示 TLS 1.1,1.2 表示 TLS 1.2,1.3 表示 TLSv1.3
verify_mode
编辑在 3.6.0 中已弃用。
已替换为 ssl_verify_mode
- 值可以是以下任何一个:
none
、peer
、force_peer
- 默认值为
"none"
设置客户端证书验证方法。有效的方法:none、peer、force_peer
通用选项
编辑所有输入插件都支持这些配置选项
codec
编辑- 值类型为 codec
- 默认值为
"plain"
用于输入数据的编解码器。输入编解码器是一种方便的方法,可以在数据进入输入之前对其进行解码,而无需在 Logstash 管道中使用单独的过滤器。