Elastic 集成过滤器插件
编辑Elastic 集成过滤器插件编辑
- 插件版本:v0.1.12
- 发布时间:2024 年 7 月 9 日
- 更新日志
有关其他版本,请参阅版本化插件文档。
获取帮助编辑
有关插件的问题,请在论坛中打开一个主题。有关错误或功能请求,请在GitHub中打开一个问题。有关 Elastic 支持的插件列表,请参阅Elastic 支持矩阵。
描述编辑
使用此过滤器在 Logstash 中处理由 Elasticsearch Ingest Node 支持的 Elastic 集成。
当您将此过滤器配置为指向 Elasticsearch 集群时,它会使用明确定义的pipeline_name
或自动检测事件的数据流及其默认管道来检测应该为每个事件执行哪个摄取管道(如果有)。
然后,它会从 Elasticsearch 加载该管道的定义,并在 Logstash 中运行该管道,而无需将事件传输到 Elasticsearch。由其摄取管道成功处理的事件将[@metadata][target_ingest_pipeline]
设置为_none
,以便 Logstash 管道中的任何下游 Elasticsearch 输出都避免在 Elasticsearch 中*再次*运行事件的默认管道。
某些多管道配置(例如通过 http(s) 进行的 logstash 到 logstash)不会维护[@metadata]
字段的状态。在这些设置中,您可能需要使用pipeline => "_none"
显式配置下游管道的 Elasticsearch 输出,以避免重新运行默认管道。
*失败*摄取管道处理的事件将被标记为_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 通信以确定应该为给定事件运行哪个摄取管道,并检索摄取管道定义本身。您必须使用以下*确切一项*配置此插件以指向 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
) - HTTP 基本身份验证:(请参阅
username
和password
)
您的请求凭据的安全性仅与其传递连接的安全性一样。它们本身既不提供隐私也不提供保密性,并且在禁用 SSL 时,攻击者可以轻松恢复它们。
最低所需权限编辑
此插件与 Elasticsearch 通信以将事件解析为管道定义,并且需要使用具有适当权限的凭据进行配置,以便从相关 API 读取。在启动阶段,此插件会确认当前用户是否具有足够的权限,包括
权限名称 | 描述 |
---|---|
|
集群操作(例如集群运行状况或状态)的只读权限。插件在检查 Elasticsearch 许可证时需要它。 |
|
对摄取管道的只读获取和模拟访问权限。插件在读取 Elasticsearch 摄取管道定义时需要它。 |
|
索引模板权限的所有操作。插件在根据事件数据流名称解析默认管道时需要它。 |
当此插件连接到禁用了安全功能的 Elasticsearch 集群或用户未提供凭据时,它无法确定匿名用户是否具有所需权限。该插件以不安全模式启动,并显示运行时错误,指示 API 权限不足,并阻止事件被摄取管道处理。
为避免这些问题,请设置用户身份验证并确保在 Elasticsearch 中启用了安全性(默认)。
支持的摄取处理器编辑
此过滤器可以运行*完全*由支持的处理器子集组成的 Elasticsearch Ingest Node 管道。它可以在适用情况下访问 Painless 和 Mustache 脚本引擎
来源 | 处理器 | 注意事项 |
---|---|---|
摄取通用 |
|
无 |
|
无 |
|
|
无 |
|
|
无 |
|
|
无 |
|
|
无 |
|
|
无 |
|
|
无 |
|
|
无 |
|
|
无 |
|
|
无 |
|
|
无 |
|
|
无 |
|
|
无 |
|
|
无 |
|
|
无 |
|
|
无 |
|
|
无 |
|
|
无 |
|
|
无 |
|
|
无 |
|
|
解析的管道*必须*完全由受支持的处理器组成 |
|
|
无 |
|
|
无 |
|
|
无 |
|
|
无 |
|
|
|
|
|
无 |
|
|
无 |
|
|
无 |
|
|
无 |
|
|
无 |
|
|
无 |
|
|
无 |
|
|
不支持旁加载自定义正则表达式文件;处理器将使用 Elasticsearch 处理器定义 中指定的默认用户代理定义。 |
|
Redact(编校) |
|
无 |
GeoIp(地理位置) |
|
需要 MaxMind GeoIP2 数据库,这些数据库可以由 Logstash 的 Geoip 数据库管理提供,或者使用 |
字段映射编辑
在执行期间,Ingest 管道使用 Logstash 事件的临时可变视图(称为 ingest 文档)进行工作。此视图包含来自事件的所有结构化字段,并进行了最少的类型转换。
它还包含 ingest 管道处理器所需的附加元数据字段。
-
_version
:一个与事件的@version
等效的long
值整数,或者是一个合理的默认值1
。 -
_ingest.timestamp
:一个与事件的@timestamp
字段等效的ZonedDateTime
。
执行完成后,将对事件进行清理,以确保 Logstash 保留字段具有预期的形状,并为任何缺少的必需字段提供合理的默认值。当 ingest 管道将保留字段设置为无法强制转换的值时,该值将在事件上的备用位置可用,如下所述。
Logstash 字段 | 类型 | 值 |
---|---|---|
|
|
ingest 文档的 |
|
字符串编码的整数 |
ingest 文档的 |
|
键/值映射 |
ingest 文档的 |
|
字符串或字符串列表 |
ingest 文档的 |
此外,当且仅当在管道执行期间设置了这些 Elasticsearch IngestDocument 元数据字段时,它们才会在生成的事件中可用。
Elasticsearch 文档元数据 | Logstash 字段 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
解析管道定义编辑
此插件使用 Elasticsearch 将管道名称解析为其管道定义。当不使用显式 pipeline_name
配置时,或者当管道使用 Reroute 处理器时,它还会使用 Elasticsearch 建立数据流名称与其各自默认管道名称的映射。
它使用命中/未命中缓存来避免为每个事件查询 Elasticsearch。它还可以更新这些缓存的映射,在它们过期之前。结果是,当 Elasticsearch 响应迅速时,此插件能够快速获取更改而不会影响其自身性能,并且它可以在 Elasticsearch 出现问题期间通过继续使用可能过时的映射或定义来保持运行。
为此,映射最多缓存 24 小时,并且每 1 分钟重新加载一次缓存值,其效果如下:
- 当重新加载的映射非空并且与其已缓存的值相同时,其生存时间将重置,以确保后续事件可以继续使用已确认未更改的值。
- 当重新加载的映射非空并且与其先前缓存的值不同时,将更新该条目,以便后续事件将使用新值。
- 当重新加载的映射新为空时,将使用新的空条目替换先前的非空映射,以便后续事件将使用空值。
- 当映射重新加载失败时,此插件将发出日志警告,但现有缓存条目保持不变,并越来越接近其到期时间。
Elastic 集成过滤器配置选项编辑
此插件支持以下配置选项以及稍后描述的通用选项。
设置 | 输入类型 | 必需 |
---|---|---|
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
字符串, |
否 |
|
否 |
cloud_auth
编辑
- 值类型为 密码
- 此设置没有默认值。
云身份验证字符串(“<用户名>:<密码>”格式)是 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(匿名 IP)
-
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 样式 的模板;如果无法解析任何引用的字段,则事件不会被路由到摄取管道。
ssl_certificate
编辑
- 值类型为 路径
- 此设置没有默认值。
- 如果存在,则还需要
ssl_key
和ssl_key_passphrase
。 - 不能与禁用 SSL 的配置结合使用
用于标识此插件到 Elasticsearch 的 PEM 编码证书或证书链的路径。
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_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。强烈建议您在配置中设置此 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
(如果存在)。第二个示例还将删除一个不需要的标签。