Elastic 集成过滤器插件
编辑Elastic 集成过滤器插件
编辑- 插件版本:v0.1.16
- 发布日期:2024-10-30
- 变更日志
其他版本请参见 版本化插件文档。
获取帮助
编辑如有任何关于插件的问题,请在 Discuss 论坛中发帖提问。如发现错误或有功能请求,请在 Github 中提交问题。有关 Elastic 支持的插件列表,请参阅 Elastic 支持矩阵。
描述
编辑使用此过滤器处理 Logstash 中由 Elasticsearch Ingest Node 提供支持的 Elastic 集成。
当您将此过滤器配置为指向 Elasticsearch 集群时,它会使用显式定义的 pipeline_name
或自动检测事件的数据流及其默认管道来检测每个事件应执行哪个 Ingest 管道(如果有)。
然后,它从 Elasticsearch 加载该管道的定义,并在 Logstash 内部运行该管道,而无需将事件传输到 Elasticsearch。成功由其 Ingest 管道处理的事件将 [@metadata][target_ingest_pipeline]
设置为 _none
,以便 Logstash 管道中的任何下游 Elasticsearch 输出都将避免在 Elasticsearch 中再次运行事件的默认管道。
某些多管道配置(例如通过 http(s) 的 logstash 到 logstash)不维护 [@metadata]
字段的状态。在这些设置中,您可能需要使用 pipeline => "_none"
显式配置下游管道的 Elasticsearch 输出,以避免重新运行默认管道。
失败的 Ingest 管道处理事件将被标记为 _ingest_pipeline_failure
,并且它们的 [@metadata][_ingest_pipeline_failure]
将填充为键/值映射的详细信息。
此插件需要最低 Java 17 和 Logstash 8.7.0 版本。
将 filter-elastic_integration
与 output-elasticsearch
配合使用
编辑Elastic 集成旨在与 数据流 和 兼容 ECS 的输出配合使用。请确保在 output-elasticsearch
插件中启用了这些功能。
- 将
data-stream
设置为true
。
(有关其他数据流设置,请查看 数据流。) - 将
ecs-compatibility
设置为v1
或v8
。
有关其他设置,请查看 output-elasticsearch
插件 文档。
最小配置
编辑您需要配置此插件以连接到 Elasticsearch,并且可能还需要提供本地 GeoIp 数据库。
filter { elastic_integration { cloud_id => "YOUR_CLOUD_ID_HERE" cloud_auth => "YOUR_CLOUD_AUTH_HERE" geoip_database_directory => "/etc/your/geoip-databases" } }
继续阅读以了解配置指南,或跳转到 完整的配置选项列表。
连接到 Elasticsearch
编辑此插件与 Elasticsearch 通信以将事件解析为管道定义,并且需要使用具有读取相关 API 的适当权限的凭据进行配置。在启动阶段,此插件会确认当前用户是否具有足够的权限,包括
- 使用以下其中一种方式连接到Elasticsearch:
- 云 ID(参见
cloud_id
)
一个或多个主机 URL 列表(参见 hosts
)
除非您明确配置此插件,否则将通过 SSL 安全地进行通信。
您可能需要配置此插件如何建立对响应服务器的信任,并且可能需要配置此插件如何呈现其自身身份或凭据。
编辑- 通过 SSL 通信时,此插件使用系统信任存储完全验证 Elasticsearch 提供的身份证明。您可以使用以下其中一种方式提供备用信任源:
- PEM 格式的受信任证书颁发机构列表(参见
ssl_certificate_authorities
)
包含受信任证书的 JKS 或 PKCS12 格式密钥库(参见 ssl_truststore_path
)
您还可以配置验证身份证明的哪些方面(参见 ssl_verification_mode
)。
编辑- 通过 SSL 通信时,您还可以配置此插件以使用以下其中一种方式向其连接到的 Elasticsearch 集群呈现基于证书的身份证明:
- PKCS8 证书/密钥对(参见
ssl_certificate
)
JKS 或 PKCS12 格式密钥库(参见 ssl_keystore_path
)
编辑- 您可以通过以下几种方式配置此插件以向 Elasticsearch 提供身份验证凭据:
- API 密钥:(参见
api_key
) - 云身份验证:(参见
cloud_auth
)
您的请求凭据的安全级别仅与传递它们的连接的安全级别一样高。它们本身既不提供隐私也不提供保密性,并且当禁用 SSL 时,攻击者可以轻松地恢复它们。
编辑此插件与 Elasticsearch 通信以将事件解析为管道定义,并且需要使用具有读取相关 API 的适当权限的凭据进行配置。在启动阶段,此插件会确认当前用户是否具有足够的权限,包括: | 权限名称 |
---|---|
|
monitor |
|
read_pipeline |
|
manage_index_templates |
索引模板上的所有操作权限。当插件根据事件数据流名称解析默认管道时需要此权限。
当此插件连接到已禁用安全功能的 Elasticsearch 集群或用户未提供凭据时,它无法确定匿名用户是否具有所需的权限。该插件将以不安全模式启动,并显示运行时错误,指示 API 权限不足,并阻止事件由 Ingest 管道处理。
为避免这些问题,请设置用户身份验证并确保已启用 Elasticsearch 中的安全功能(默认值)。
编辑此过滤器可以运行完全由支持的处理器子集组成的 Elasticsearch Ingest Node 管道。它可以在适用时访问 Painless 和 Mustache 脚本引擎。 | 来源 | 处理器 |
---|---|---|
警告 |
|
append |
|
append |
|
|
append |
|
|
append |
|
|
append |
|
|
append |
|
|
append |
|
|
append |
|
|
append |
|
|
append |
|
|
append |
|
|
append |
|
|
append |
|
|
append |
|
|
append |
|
|
append |
|
|
append |
|
|
append |
|
|
append |
|
|
append |
|
|
append |
|
|
pipeline |
|
|
append |
|
|
append |
|
|
append |
|
|
append |
|
|
script |
|
|
append |
|
|
append |
|
|
append |
|
|
append |
|
|
append |
|
|
append |
|
|
append |
|
|
user_agent |
|
不支持旁加载自定义正则表达式文件;处理器将使用Elasticsearch 处理器定义中指定的默认用户代理定义。 |
|
append |
redact |
|
需要 MaxMind GeoIP2 数据库,这些数据库可以由 Logstash 的 Geoip 数据库管理提供 *或* 使用 |
字段映射
编辑在执行过程中,Ingest pipeline 使用 Logstash 事件的临时可变 *视图*,称为 ingest 文档。此视图包含事件中所有结构化字段,并进行最少的类型转换。
它还包含 ingest pipeline 处理器所需的附加元数据字段。
-
_version
:一个long
值整数,等效于事件的@version
,或1
的合理默认值。 -
_ingest.timestamp
:一个ZonedDateTime
值,等效于事件的@timestamp
字段。
执行完成后,将对事件进行清理,以确保 Logstash 保留字段具有预期的形状,并为任何缺少的必需字段提供合理的默认值。当 ingest pipeline 将保留字段设置为无法强制转换的值时,该值将在事件的备用位置提供,如下所述。
Logstash 字段 | 类型 | 值 |
---|---|---|
|
|
ingest 文档的 |
|
字符串编码整数 |
ingest 文档的 |
|
键值映射 |
ingest 文档的 |
|
一个字符串或字符串列表 |
ingest 文档的 |
此外,如果且仅当这些 Elasticsearch IngestDocument 元数据字段在 pipeline 执行期间设置时,它们才会在生成的事件中可用。
Elasticsearch 文档元数据 | Logstash 字段 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
解析 Pipeline 定义
编辑此插件使用 Elasticsearch 将 pipeline 名称解析为其 pipeline 定义。当 *不* 使用显式的 pipeline_name
配置时,或者当 pipeline 使用 Reroute 处理器时,它还使用 Elasticsearch 建立数据流名称与其各自的默认 pipeline 名称的映射。
它使用命中/未命中缓存来避免为每个事件查询 Elasticsearch。它还致力于在这些缓存映射过期*之前*更新它们。结果是,当 Elasticsearch 响应迅速时,此插件能够快速获取更改而不会影响其自身的性能,并且它可以通过继续使用可能过时的映射或定义来承受 Elasticsearch 问题期间的中断。
为此,映射最多缓存 24 小时,并每 1 分钟重新加载一次缓存值,效果如下:
- 当重新加载的映射非空且与其已缓存的值*相同*时,其生存时间将重置,以确保后续事件可以继续使用已确认的未更改值。
- 当重新加载的映射非空且与其先前缓存的值*不同*时,将*更新*该条目,以便后续事件将使用新值。
- 当重新加载的映射新*为空*时,将用新的空条目*替换*之前的非空映射,以便后续事件将使用空值。
- 当映射的重新加载*失败*时,此插件会发出日志警告,但现有缓存条目保持不变,并越来越接近其过期时间。
Elastic 集成过滤器配置选项
编辑此插件支持以下配置选项以及稍后描述的 常用选项。
设置 | 输入类型 | 必需 |
---|---|---|
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
字符串,其中之一为 |
否 |
|
否 |
cloud_auth
编辑- 值类型为 密码
- 此设置没有默认值。
云身份验证字符串(“<用户名>:<密码>” 格式)是 username
/password
对的替代方法,可从 Elastic Cloud 网络控制台获取。
cloud_id
编辑- 值类型为 字符串
- 此设置没有默认值。
- 不能与 `
ssl_enabled
⇒false` 组合使用。
来自 Elastic Cloud 网络控制台的云 ID。
使用云 ID 连接时,与 Elasticsearch 的通信使用 SSL 保护。
更多详情,请查看 Logstash 到云文档。
geoip_database_directory
编辑- 值类型为 路径
- 此设置没有默认值。
在启用了 Geoip 数据库管理的 Logstash 进程中运行时,使用 Geoip 处理器的集成默认情况下将使用托管的 Maxmind 数据库。使用托管数据库即表示您接受并同意 MaxMind EULA。
您可以使用包含数据库文件的本地目录的路径来配置此插件。
此插件将发现提供的目录中所有带有 .mmdb
后缀的常规文件,并通过其文件名向集成 pipeline 中的 GeoIp 处理器提供每个文件。它期望找到的文件采用 MaxMind DB 格式,并具有以下数据库类型之一:
-
匿名IP
-
ASN
-
城市
-
国家
-
连接类型
-
域名
-
企业版
-
ISP
大多数集成依赖于数据库的名称*完全*相同:
-
GeoLite2-ASN.mmdb
, -
GeoLite2-City.mmdb
,或 -
GeoLite2-Country.mmdb
hosts
编辑- 值类型为 URI 列表
- 此设置没有默认值。
-
约束
- 当任何 URL 包含协议组件时,所有 URL 必须具有相同的协议。
-
https
协议主机使用 HTTPS,不能与ssl_enabled => false
组合使用。 -
http
协议主机使用不安全的 HTTP,不能与ssl_enabled => true
组合使用。 - 当任何 URL 省略端口组件时,将使用默认值
9200
。 - 当任何 URL 包含路径组件时,所有 URL 必须具有相同的路径。
要连接的 Elasticsearch 主机非空列表。
示例
-
"127.0.0.1"
-
["127.0.0.1:9200","127.0.0.2:9200"]
-
["http://127.0.0.1"]
-
["https://127.0.0.1:9200"]
-
["https://127.0.0.1:9200/subpath"]
(如果在子路径上使用代理)
使用主机列表连接时,除非另行配置,否则与 Elasticsearch 的通信使用 SSL 保护。
禁用 SSL 是危险的
此插件的安全性依赖于 SSL,以避免泄露凭据并避免运行非法的 ingest pipeline 定义。
有两种方法可以禁用 SSL:
- 提供
http
协议主机的列表 - 设置
<<plugins-{type}s-{plugin}-ssl_enabled>>=>false
pipeline_name
编辑- 值类型为 字符串
- 此设置没有默认值。
- 如果存在,则不会从事件的数据流字段自动检测事件的初始 pipeline。
- 值可以是 sprintf 风格 的模板;如果任何引用的字段无法解析,则事件将不会路由到 ingest pipeline。
ssl_certificate
编辑- 值类型为 路径
- 此设置没有默认值。
- 如果存在,
ssl_key
和ssl_key_passphrase
也是必需的。 - 不能与禁用 SSL 的配置组合使用。
PEM 编码证书或证书链的路径,用于向 Elasticsearch 标识此插件。
ssl_certificate_authorities
编辑- 值类型为 路径 列表
- 此设置没有默认值。
- 不能与禁用 SSL 的配置组合使用。
- 不能与 `
ssl_verification_mode
⇒none` 组合使用。
一个或多个定义证书颁发机构的 PEM 格式文件。
此设置可用于*覆盖*系统信任库,以验证 Elasticsearch 提供的 SSL 证书。
ssl_enabled
编辑- 值类型为 布尔值
- 此设置没有默认值。
除非以下情况,否则启用与 Elasticsearch 的安全 SSL 通信:
- 它使用
ssl_enabled => false
明确禁用;或 - 通过提供
http
协议hosts
隐式禁用。
指定 ssl_enabled => true
可以作为有用的冗余安全措施,以确保此插件无法配置为使用非 ssl 通信。
ssl_key
编辑- 值类型为 路径
- 此设置没有默认值。
- 当连接身份使用
ssl_certificate
配置时,此项为必填。 - 不能与禁用 SSL 的配置组合使用。
PKCS8 格式的 SSL 证书密钥的路径。
ssl_keystore_password
编辑- 值类型为 密码
- 此设置没有默认值。
- 当连接身份使用
ssl_keystore_path
配置时,此项为必填。 - 不能与禁用 SSL 的配置组合使用。
ssl_keystore_path
的密码。
ssl_keystore_path
编辑- 值类型为 路径
- 此设置没有默认值。
- 如果存在此项,则
ssl_keystore_password
也必须提供。 - 不能与禁用 SSL 的配置组合使用。
JKS 或 PKCS12 格式密钥库的路径,用于识别此插件与 Elasticsearch 的连接。
ssl_key_passphrase
编辑- 值类型为 密码
- 此设置没有默认值。
- 当连接身份使用
ssl_certificate
配置时,此项为必填。 - 不能与禁用 SSL 的配置组合使用。
ssl_key
的密码或口令。
ssl_truststore_path
编辑- 值类型为 路径
- 此设置没有默认值。
- 如果存在此项,则
ssl_truststore_password
为必填。 - 不能与禁用 SSL 的配置组合使用。
- 不能与 `
ssl_verification_mode
⇒none` 组合使用。
JKS 或 PKCS12 格式密钥库的路径,其中包含受信任的证书。
此设置可用于*覆盖*系统信任库,以验证 Elasticsearch 提供的 SSL 证书。
ssl_truststore_password
编辑- 值类型为 密码
- 此设置没有默认值。
- 当连接信任使用
ssl_truststore_path
配置时,此项为必填。 - 不能与禁用 SSL 的配置组合使用。
ssl_truststore_path
的密码。
通用选项
编辑所有过滤器插件都支持这些配置选项
设置 | 输入类型 | 必需 |
---|---|---|
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
add_field
编辑- 值类型为 hash
- 默认值为
{}
如果此过滤器成功,则向此事件添加任意字段。字段名称可以是动态的,并包含使用 %{field}
的事件部分。
示例
filter { elastic_integration { add_field => { "foo_%{somefield}" => "Hello world, from %{host}" } } }
# You can also add multiple fields at once: filter { elastic_integration { add_field => { "foo_%{somefield}" => "Hello world, from %{host}" "new_field" => "new_static_value" } } }
如果事件具有字段 "somefield" == "hello"
,则此过滤器成功后,如果存在,将添加字段 foo_hello
,其值为上述值,并将 %{host}
部分替换为事件中的该值。第二个示例还将添加一个硬编码字段。
add_tag
编辑- 值类型为 array
- 默认值为
[]
如果此过滤器成功,则向事件添加任意标签。标签可以是动态的,并包含使用 %{field}
语法的事件部分。
示例
filter { elastic_integration { add_tag => [ "foo_%{somefield}" ] } }
# You can also add multiple tags at once: filter { elastic_integration { add_tag => [ "foo_%{somefield}", "taggedy_tag"] } }
如果事件具有字段 "somefield" == "hello"
,则此过滤器成功后,将添加标签 foo_hello
(第二个示例当然会添加 taggedy_tag
标签)。
id
编辑- 值类型为 string
- 此设置没有默认值。
向插件配置添加唯一的 ID
。如果没有指定 ID,Logstash 将生成一个。强烈建议在配置中设置此 ID。当您有两个或多个相同类型的插件时,这尤其有用,例如,如果您有两个 elastic_integration 过滤器。在这种情况下,添加命名 ID 将有助于在使用监控 API 时监控 Logstash。
filter { elastic_integration { id => "ABC" } }
id
字段中的变量替换仅支持环境变量,不支持使用密钥存储中的值。
remove_field
编辑- 值类型为 array
- 默认值为
[]
如果此过滤器成功,则从此事件中删除任意字段。字段名称可以是动态的,并包含使用 %{field} 的事件部分 示例
filter { elastic_integration { remove_field => [ "foo_%{somefield}" ] } }
# You can also remove multiple fields at once: filter { elastic_integration { remove_field => [ "foo_%{somefield}", "my_extraneous_field" ] } }
如果事件具有字段 "somefield" == "hello"
,则此过滤器成功后,如果存在,将删除名为 foo_hello
的字段。第二个示例将删除另一个非动态字段。
remove_tag
编辑- 值类型为 array
- 默认值为
[]
如果此过滤器成功,则从事件中删除任意标签。标签可以是动态的,并包含使用 %{field}
语法的事件部分。
示例
filter { elastic_integration { remove_tag => [ "foo_%{somefield}" ] } }
# You can also remove multiple tags at once: filter { elastic_integration { remove_tag => [ "foo_%{somefield}", "sad_unwanted_tag"] } }
如果事件具有字段 "somefield" == "hello"
,则此过滤器成功后,如果存在,将删除标签 foo_hello
。第二个示例还将删除一个不需要的标签。