HTTP 过滤器插件
编辑HTTP 过滤器插件编辑
- 插件版本:v1.5.1
- 发布日期:2024-01-11
- 变更日志
有关其他版本,请参阅 版本化插件文档.
获取帮助编辑
如果您对插件有任何疑问,请在 Discuss 论坛中发布主题。对于错误或功能请求,请在 Github 中创建问题。有关 Elastic 支持的插件列表,请参阅 Elastic 支持矩阵.
描述编辑
HTTP 过滤器提供与外部 Web 服务/REST API 的集成。
与 Elastic Common Schema (ECS) 的兼容性编辑
该插件包含根据 ECS 兼容性模式 更改的合理默认值。当针对 ECS 版本时,标头设置为 @metadata
,并且 target_body
是一个必需选项。请参阅 target_body
和 target_headers
.
HTTP 过滤器配置选项编辑
此插件支持以下配置选项,以及后面描述的 通用选项。
设置 | 输入类型 | 必需 |
---|---|---|
字符串、数组或哈希 |
否 |
|
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
是 |
||
否 |
还有一些与 HTTP 连接相关的配置选项
设置 | 输入类型 | 必需 |
---|---|---|
否 |
||
有效的文件系统路径 |
已弃用 |
|
有效的文件系统路径 |
已弃用 |
|
有效的文件系统路径 |
已弃用 |
|
否 |
||
否 |
||
否 |
||
否 |
||
有效的文件系统路径 |
已弃用 |
|
已弃用 |
||
已弃用 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
路径列表 |
否 |
|
字符串列表 |
否 |
|
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
字符串,其中之一为 |
否 |
|
有效的文件系统路径 |
已弃用 |
|
已弃用 |
||
已弃用 |
||
否 |
||
否 |
另请参阅 通用选项,了解所有过滤器插件支持的选项列表。
body
编辑
要发送的 HTTP 请求的主体。
将 body
作为 json 发送的示例
http { body => { "key1" => "constant_value" "key2" => "%{[field][reference]}" } body_format => "json" }
body_format
编辑
- 值类型可以是
"json"
或"text"
- 默认值为
"text"
如果设置为 "json"
并且 body
是 数组 或 哈希 类型,则主体将被序列化为 JSON。否则,它将按原样发送。
ecs_compatibility
编辑
- 值类型是 字符串
-
支持的值为
-
disabled
:不使用与 ECS 兼容的字段名称(例如,响应标头默认情况下会针对headers
字段) -
v1
、v8
:避免可能与 Elastic Common Schema (ECS) 冲突的字段名称(例如,标头将作为元数据添加)
-
-
默认值取决于运行的 Logstash 版本
- 当 Logstash 提供
pipeline.ecs_compatibility
设置时,其值将用作默认值 - 否则,默认值为
disabled
。
- 当 Logstash 提供
控制此插件与 Elastic Common Schema (ECS) 的兼容性。此设置的值会影响 target_body
和 target_headers
的默认值。
target_body
编辑
- 值类型是 哈希
-
默认值取决于是否启用了
ecs_compatibility
- ECS 兼容性已禁用:`"[body]"
- ECS 兼容性已启用:没有默认值,需要显式指定
定义用于放置 HTTP 响应主体的目标字段。
target_headers
编辑
- 值类型是 哈希
-
默认值取决于是否启用了
ecs_compatibility
- ECS 兼容性已禁用:
"[headers]"
- ECS 兼容性已启用:
"[@metadata][filter][http][response][headers]"
- ECS 兼容性已禁用:
定义用于放置 HTTP 响应标头的目标字段。
HTTP 过滤器连接选项编辑
automatic_retries
编辑
- 值类型是 数字
- 默认值为
1
客户端应重试失败 URL 的次数。我们强烈建议在启用 keepalive 时不要将此值设置为零。某些服务器会错误地过早结束 keepalive,需要重试!注意:如果设置了 retry_non_idempotent
,则只重试 GET、HEAD、PUT、DELETE、OPTIONS 和 TRACE 请求。
client_cert
编辑
在 1.5.0 中已弃用。
已替换为 ssl_certificate
- 值类型是 路径
- 此设置没有默认值。
如果您想使用客户端证书(注意,大多数人都不想这样做),请在此处设置 x509 证书的路径
keepalive
edit
- 值类型为 boolean
- 默认值为
true
启用此选项以启用 HTTP keepalive 支持。我们强烈建议将 automatic_retries
设置为至少 1,以修复与损坏的 keepalive 实现的交互。
keystore
edit
在 1.5.0 中已弃用。
已替换为 ssl_keystore_path
- 值类型是 路径
- 此设置没有默认值。
如果您需要使用自定义密钥库 (.jks
),请在此处指定。这与 .pem 密钥不兼容!
keystore_password
edit
在 1.5.0 中已弃用。
- 值类型为 password
- 此设置没有默认值。
在此处指定密钥库密码。请注意,大多数使用 keytool 创建的 .jks 文件都需要密码!
keystore_type
edit
在 1.5.0 中已弃用。
已替换为 ssl_keystore_type
- 值类型是 字符串
- 默认值为
"JKS"
在此处指定密钥库类型。可以是 JKS
或 PKCS12
。默认值为 JKS
proxy
edit
- 值类型是 字符串
- 此设置没有默认值。
如果您想使用 HTTP 代理。这支持多种配置语法
- 代理主机格式:
http://proxy.org:1234
- 代理主机格式:
{host => "proxy.org", port => 80, scheme => 'http', user => 'username@host', password => 'password'}
- 代理主机格式:
{url => 'http://proxy.org:1234', user => 'username@host', password => 'password'}
retry_non_idempotent
edit
- 值类型为 boolean
- 默认值为
false
如果启用了 automatic_retries
,这将导致非幂等 HTTP 动词(如 POST)被重试。
ssl_certificate
edit
- 值类型是 路径
- 此设置没有默认值。
用于对客户端进行身份验证的 SSL 证书。此证书应为 OpenSSL 风格的 X.509 证书文件。
仅当设置了 ssl_key
时,才能使用此设置。
ssl_key
edit
- 值类型是 路径
- 此设置没有默认值。
与 ssl_certificate
对应的 OpenSSL 风格的 RSA 私钥。
仅当设置了 ssl_certificate
时,才能使用此设置。
ssl_supported_protocols
edit
- 值类型是 字符串
- 允许的值为:
'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_verification_mode
edit
- 值类型是 字符串
- 支持的值为:
full
、none
- 默认值为
full
控制服务器证书的验证。 full
选项验证提供的证书是否由受信任的颁发机构 (CA) 签名,以及服务器的主机名(或 IP 地址)是否与证书中标识的名称匹配。
none
设置不执行服务器证书的任何验证。此模式会禁用 SSL/TLS 的许多安全优势,应谨慎考虑后才使用。它主要用作尝试解决 TLS 错误时的临时诊断机制。强烈建议不要在生产环境中使用 none
。
truststore
edit
在 1.5.0 中已弃用。
已替换为 ssl_truststore_path
- 值类型是 路径
- 此设置没有默认值。
如果您需要使用自定义信任库 (.jks
),请在此处指定。这与 .pem 证书不兼容!
truststore_password
edit
在 1.5.0 中已弃用。
- 值类型为 password
- 此设置没有默认值。
在此指定信任库密码。请注意,大多数使用 keytool 创建的 .jks 文件都需要密码!
truststore_type
edit
在 1.5.0 中已弃用。
已替换为 ssl_truststore_type
- 值类型是 字符串
- 默认值为
"JKS"
在此指定信任库类型。可以选择 JKS
或 PKCS12
。默认值为 JKS
user
edit
- 值类型是 字符串
- 此设置没有默认值。
用于所有请求的 HTTP 身份验证用户名。请注意,您也可以为每个 URL 设置此选项。如果您设置了此选项,则还必须设置 password
选项。
validate_after_inactivity
edit
- 值类型是 数字
- 默认值为
200
在检查过时连接以确定是否需要保持活动请求之前等待的时间。如果您经常遇到连接错误,请考虑将此值设置为低于默认值,甚至设置为 0。
此客户端基于 Apache Commons。以下是 Apache Commons 文档 对此选项的描述:“定义在将持久连接租赁给消费者之前必须重新验证的非活动时间(以毫秒为单位)。传递给此方法的非正值将禁用连接验证。此检查有助于检测在保持非活动状态时已变得过时的(半关闭)连接。”
通用选项edit
以下配置选项受所有过滤器插件支持
设置 | 输入类型 | 必需 |
---|---|---|
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
add_field
edit
- 值类型为 哈希
- 默认值为
{}
如果此过滤器成功,则将任何任意字段添加到此事件。字段名称可以是动态的,并使用 %{field}
包含事件的一部分。
示例
filter { http { add_field => { "foo_%{somefield}" => "Hello world, from %{host}" } } }
# You can also add multiple fields at once: filter { http { add_field => { "foo_%{somefield}" => "Hello world, from %{host}" "new_field" => "new_static_value" } } }
如果事件具有字段 "somefield" == "hello"
,则此过滤器在成功时将添加字段 foo_hello
(如果存在),其值为上述值,并且 %{host}
部分将替换为事件中的该值。第二个示例还将添加一个硬编码字段。
add_tag
edit
- 值类型为 数组
- 默认值为
[]
如果此过滤器成功,则将任意标签添加到事件。标签可以是动态的,并使用 %{field}
语法包含事件的一部分。
示例
filter { http { add_tag => [ "foo_%{somefield}" ] } }
# You can also add multiple tags at once: filter { http { add_tag => [ "foo_%{somefield}", "taggedy_tag"] } }
如果事件具有字段 "somefield" == "hello"
,则此过滤器在成功时将添加标签 foo_hello
(第二个示例当然会添加 taggedy_tag
标签)。
id
edit
- 值类型为 字符串
- 此设置没有默认值。
在插件配置中添加一个唯一的 ID
。如果未指定 ID,Logstash 将生成一个。强烈建议您在配置中设置此 ID。当您有两个或多个相同类型的插件时,这尤其有用,例如,如果您有两个 http 过滤器。在这种情况下,添加一个命名 ID 将有助于在使用监控 API 时监控 Logstash。
filter { http { id => "ABC" } }
id
字段中的变量替换仅支持环境变量,不支持使用来自密钥存储的值。
remove_field
edit
- 值类型为 数组
- 默认值为
[]
如果此过滤器成功,则从此事件中删除任意字段。字段名称可以是动态的,并使用 %{field} 示例包含事件的一部分
filter { http { remove_field => [ "foo_%{somefield}" ] } }
# You can also remove multiple fields at once: filter { http { remove_field => [ "foo_%{somefield}", "my_extraneous_field" ] } }
如果事件具有字段 "somefield" == "hello"
,则此过滤器在成功时将删除名为 foo_hello
的字段(如果存在)。第二个示例将删除一个额外的非动态字段。
remove_tag
edit
- 值类型为 数组
- 默认值为
[]
如果此过滤器成功,则从事件中删除任意标签。标签可以是动态的,并使用 %{field}
语法包含事件的一部分。
示例
filter { http { remove_tag => [ "foo_%{somefield}" ] } }
# You can also remove multiple tags at once: filter { http { remove_tag => [ "foo_%{somefield}", "sad_unwanted_tag"] } }
如果事件具有字段 "somefield" == "hello"
,则此过滤器在成功时将删除标签 foo_hello
(如果存在)。第二个示例也将删除一个令人沮丧的、不必要的标签。