Elastic 集成过滤器插件
编辑Elastic 集成过滤器插件
编辑- 插件版本: v0.1.16
- 发布日期: 2024-10-30
- 变更日志
有关其他版本,请参阅版本化插件文档。
获取帮助
编辑有关插件的问题,请在Discuss论坛中开一个主题。对于错误或功能请求,请在Github中开一个 issue。有关 Elastic 支持的插件列表,请参阅Elastic 支持矩阵。
描述
编辑使用此过滤器在 Logstash 中处理由 Elasticsearch Ingest Node 驱动的 Elastic 集成。
当您配置此过滤器以指向 Elasticsearch 集群时,它会检测应为每个事件执行哪个 ingest 管道(如果有),使用明确定义的 pipeline_name
或自动检测事件的数据流及其默认管道。
然后,它从 Elasticsearch 加载该管道的定义,并在 Logstash 中运行该管道,而无需将事件传输到 Elasticsearch。由其 ingest 管道成功处理的事件将 [@metadata][target_ingest_pipeline]
设置为 _none
,以便 Logstash 管道中的任何下游 Elasticsearch 输出都将避免在 Elasticsearch 中再次运行事件的默认管道。
某些多管道配置(例如通过 http(s) 的 logstash-to-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 通信以确定应为给定事件运行哪个 ingest 管道,并检索 ingest 管道定义本身。您必须配置此插件以使用以下其中一种方式指向 Elasticsearch
除非您显式配置此插件,否则通信将通过 SSL 安全地进行。
您可能需要配置此插件如何建立对响应的服务器的信任,并且可能需要配置此插件如何呈现其自身的身份或凭据。
SSL 信任配置
编辑通过 SSL 通信时,此插件使用系统信任存储完全验证 Elasticsearch 提供的身份证明。您可以使用以下其中一种方式提供备用信任源
- PEM 格式的可信任证书颁发机构列表(请参阅
ssl_certificate_authorities
) - 包含可信任证书的 JKS 或 PKCS12 格式的密钥库(请参阅
ssl_truststore_path
)
您还可以配置验证身份证明的哪些方面(请参阅ssl_verification_mode
)。
SSL 身份配置
编辑通过 SSL 通信时,您还可以配置此插件,以使用以下其中一种方式向其连接的 Elasticsearch 集群提供基于证书的身份证明
- PKCS8 证书/密钥对(请参阅
ssl_certificate
) - JKS 或 PKCS12 格式的密钥库(请参阅
ssl_keystore_path
)
请求身份
编辑您可以配置此插件以通过以下几种方式之一向 Elasticsearch 提供身份验证凭据
- ApiKey:(请参阅
api_key
) - Cloud Auth:(请参阅
cloud_auth
) - HTTP 基本身份验证:(请参阅
username
和password
)
您的请求凭据的安全性仅与传递它们的连接一样安全。它们本身既不提供隐私也不提供保密,并且在禁用 SSL 时很容易被对手恢复。
最低所需权限
编辑此插件与 Elasticsearch 通信以将事件解析为管道定义,并且需要使用具有适当权限的凭据进行配置,以便从相关的 API 中读取。在启动阶段,此插件会确认当前用户是否具有足够的权限,包括
权限名称 | 描述 |
---|---|
|
用于集群操作(例如集群运行状况或状态)的只读权限。插件在检查 Elasticsearch 许可证时需要它。 |
|
对 ingest 管道的只读获取和模拟访问。当插件读取 Elasticsearch ingest 管道定义时,需要此权限。 |
|
对索引模板的所有操作权限。当插件根据事件数据流名称解析默认管道时,需要此权限。 |
当插件连接到已禁用安全功能的 Elasticsearch 集群或用户未提供凭据时,此插件无法确定匿名用户是否具有所需的权限。该插件以不安全模式启动,并显示运行时错误,指示 API 权限不足,并阻止 ingest 管道处理事件。
为了避免这些问题,请设置用户身份验证并确保启用 Elasticsearch 中的安全性(默认)。
支持的 Ingest 处理器
编辑此过滤器可以运行完全由支持的处理器子集组成的 Elasticsearch Ingest Node 管道。它可以访问 Painless 和 Mustache 脚本引擎(如果适用)
来源 | 处理器 | 注意事项 |
---|---|---|
Ingest Common |
|
无 |
|
无 |
|
|
无 |
|
|
无 |
|
|
无 |
|
|
无 |
|
|
无 |
|
|
无 |
|
|
无 |
|
|
无 |
|
|
无 |
|
|
无 |
|
|
无 |
|
|
无 |
|
|
无 |
|
|
无 |
|
|
无 |
|
|
无 |
|
|
无 |
|
|
无 |
|
|
无 |
|
|
解析的管道必须完全由支持的处理器组成 |
|
|
无 |
|
|
无 |
|
|
无 |
|
|
无 |
|
|
|
|
|
无 |
|
|
无 |
|
|
无 |
|
|
无 |
|
|
无 |
|
|
无 |
|
|
无 |
|
|
不支持侧加载自定义正则表达式文件;处理器将使用 Elasticsearch 处理器定义中指定的默认用户代理定义。 |
|
Redact |
|
无 |
GeoIp |
|
需要 MaxMind GeoIP2 数据库,这些数据库可以由 Logstash 的 Geoip 数据库管理提供,或者使用 |
字段映射
编辑在执行期间,Ingest 管道使用一个称为 ingest 文档的 Logstash 事件的临时可变视图。此视图包含事件中所有结构化的字段,并进行最少的类型转换。
它还包含 ingest 管道处理器所需的其他元数据字段
-
_version
: 一个long
类型整数值,等效于事件的@version
,或一个合理的默认值1
。 -
_ingest.timestamp
: 一个ZonedDateTime
类型值,等效于事件的@timestamp
字段
执行完成后,会对事件进行清理,以确保 Logstash 保留字段具有预期的形状,并为任何缺失的必需字段提供合理的默认值。当 ingest 管道将保留字段设置为无法强制转换的值时,该值将按如下所述在事件的备用位置中提供。
Logstash 字段 | 类型 | 值 |
---|---|---|
|
|
Ingest 文档的 |
|
字符串编码的整数 |
Ingest 文档的 |
|
键/值映射 |
Ingest 文档的 |
|
一个字符串或一个字符串列表 |
Ingest 文档的 |
此外,这些 Elasticsearch IngestDocument 元数据字段只有在管道执行期间设置时才会在生成的事件中提供
Elasticsearch 文档元数据 | Logstash 字段 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
解析管道定义
编辑此插件使用 Elasticsearch 将管道名称解析为其管道定义。当配置没有显式的 pipeline_name
时,或者当管道使用重定向处理器时,它还会使用 Elasticsearch 来建立数据流名称与其各自默认管道名称的映射关系。
它使用命中/未命中缓存来避免为每个事件查询 Elasticsearch。它还会努力在这些缓存的映射过期之前更新它们。结果是,当 Elasticsearch 响应迅速时,此插件能够快速获取更改而不会影响其自身的性能,并且它可以承受 Elasticsearch 问题的时期,而不会因继续使用可能过时的映射或定义而中断。
为了实现这一点,映射最多缓存 24 小时,并且缓存的值每 1 分钟重新加载一次,效果如下:
- 当重新加载的映射为非空,并且与其已缓存的值相同时,它的生存时间会重置,以确保后续事件可以继续使用已确认未更改的值
- 当重新加载的映射为非空,并且与之前缓存的值不同时,条目会更新,以便后续事件将使用新值
- 当重新加载的映射为空时,之前的非空映射将替换为一个新的空条目,以便后续事件将使用空值
- 当映射的重新加载失败时,此插件会发出日志警告,但现有的缓存条目不会更改,并且会更接近其过期时间。
Elastic Integration 过滤器配置选项
编辑此插件支持以下配置选项以及稍后描述的 通用选项。
设置 | 输入类型 | 必需 |
---|---|---|
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
字符串,以下值之一: |
否 |
|
否 |
cloud_auth
编辑- 值类型为 密码
- 此设置没有默认值。
云身份验证字符串(“<username>:<password>”格式)是 username
/password
对的替代方案,可以从 Elastic Cloud Web 控制台中获取。
cloud_id
编辑- 值类型为 字符串
- 此设置没有默认值。
- 不能与 `
ssl_enabled
⇒false` 组合使用。
云 ID,来自 Elastic Cloud Web 控制台。
使用云 ID 连接时,与 Elasticsearch 的通信将使用 SSL 进行保护。
有关更多详细信息,请查看 Logstash 到云的文档。
geoip_database_directory
编辑- 值类型为 路径
- 此设置没有默认值。
在启用 Geoip 数据库管理的 Logstash 进程中运行时,使用 Geoip 处理器的集成将默认使用托管的 Maxmind 数据库。使用托管数据库即表示您接受并同意 MaxMind EULA。
您也可以使用包含数据库文件的本地目录的路径配置此插件。
此插件将发现所提供目录中所有带有 .mmdb
后缀的常规文件,并通过其文件名使其在集成管道中的 GeoIp 处理器中可用。它希望找到的文件采用 MaxMind DB 格式,并具有以下数据库类型之一:
-
AnonymousIp
-
ASN
-
City
-
Country
-
ConnectionType
-
Domain
-
Enterprise
-
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 管道定义。
有两种方法可以禁用 SSL
- 提供一个
http
协议主机列表 - 设置
<<plugins-{type}s-{plugin}-ssl_enabled>>=>false
pipeline_name
编辑- 值类型为 字符串
- 此设置没有默认值。
- 如果存在,则不会从事件的数据流字段自动检测事件的初始管道。
- 值可以是 sprintf 样式的模板;如果无法解析任何引用的字段,则事件将不会路由到 ingest 管道。
ssl_certificate
编辑- 值类型为 路径
- 此设置没有默认值。
- 如果存在,还需要
ssl_key
和ssl_key_passphrase
。 - 不能与禁用 SSL 的配置组合使用
用于向 Elasticsearch 标识此插件的 PEM 编码证书或证书链的路径。
ssl_certificate_authorities
编辑- 值类型是 path 的列表
- 此设置没有默认值。
- 不能与禁用 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 的配置组合使用
用于向 Elasticsearch 标识此插件的 JKS 或 PKCS12 格式的密钥库的路径。
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
编辑- 值类型为 哈希
- 默认值为
{}
如果此过滤器成功,则将任意字段添加到此事件。字段名称可以是动态的,并使用 %{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
编辑- 值类型为 数组
- 默认值为
[]
如果此过滤器成功,则将任意标签添加到事件。标签可以是动态的,并使用 %{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
编辑- 值类型为 字符串
- 此设置没有默认值。
向插件配置添加唯一的 ID
。如果未指定 ID,Logstash 将生成一个。强烈建议在配置中设置此 ID。当您有两个或多个相同类型的插件时,这尤其有用,例如,如果您有 2 个 elastic_integration 过滤器。在这种情况下添加命名 ID 将有助于在使用监控 API 时监控 Logstash。
filter { elastic_integration { id => "ABC" } }
id
字段中的变量替换仅支持环境变量,不支持使用来自秘密存储的值。
remove_field
编辑- 值类型为 数组
- 默认值为
[]
如果此过滤器成功,则从事件中删除任意字段。字段名称可以是动态的,并使用 %{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
编辑- 值类型为 数组
- 默认值为
[]
如果此过滤器成功,则从事件中删除任意标签。标签可以是动态的,并使用 %{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
,则会删除该标签。第二个示例也会删除一个不想要的、令人伤心的标签。