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_integrationoutput-elasticsearch 配合使用

编辑

Elastic 集成旨在与 数据流兼容 ECS 的输出配合使用。请确保在 output-elasticsearch 插件中启用了这些功能。

有关其他设置,请查看 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 信任配置

  • 通过 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 提供身份验证凭据:
  • API 密钥:(参见 api_key
  • 云身份验证:(参见 cloud_auth

HTTP 基本身份验证:(参见 usernamepassword

您的请求凭据的安全级别仅与传递它们的连接的安全级别一样高。它们本身既不提供隐私也不提供保密性,并且当禁用 SSL 时,攻击者可以轻松地恢复它们。

编辑

最低所需权限

此插件与 Elasticsearch 通信以将事件解析为管道定义,并且需要使用具有读取相关 API 的适当权限的凭据进行配置。在启动阶段,此插件会确认当前用户是否具有足够的权限,包括: 权限名称

描述

monitor

用于集群操作(例如集群运行状况或状态)的只读权限。插件在检查 Elasticsearch 许可证时需要此权限。

read_pipeline

对 Ingest 管道的只读获取和模拟访问。插件读取 Elasticsearch Ingest 管道定义时需要此权限。

manage_index_templates

索引模板上的所有操作权限。当插件根据事件数据流名称解析默认管道时需要此权限。

当此插件连接到已禁用安全功能的 Elasticsearch 集群或用户未提供凭据时,它无法确定匿名用户是否具有所需的权限。该插件将以不安全模式启动,并显示运行时错误,指示 API 权限不足,并阻止事件由 Ingest 管道处理。

为避免这些问题,请设置用户身份验证并确保已启用 Elasticsearch 中的安全功能(默认值)。

编辑

支持的 Ingest 处理器

此过滤器可以运行完全由支持的处理器子集组成的 Elasticsearch Ingest Node 管道。它可以在适用时访问 Painless 和 Mustache 脚本引擎。 来源 处理器

警告

Ingest 通用

append

append

bytes

append

communityid

append

convert

append

csv

append

date

append

dateindexname

append

dissect

append

dotexpander

append

drop

append

fail

append

fingerprint

append

foreach

append

grok

append

gsub

append

htmlstrip

append

join

append

json

append

keyvalue

append

lowercase

append

networkdirection

pipeline

解析的管道必须完全由受支持的处理器组成

append

registereddomain

append

remove

append

rename

append

reroute

script

lang 必须为 painless(默认值)

append

set

append

sort

append

split

append

trim

append

uppercase

append

uri_parts

append

urldecode

user_agent

不支持旁加载自定义正则表达式文件;处理器将使用Elasticsearch 处理器定义中指定的默认用户代理定义。

Redact

append

redact

GeoIp

需要 MaxMind GeoIP2 数据库,这些数据库可以由 Logstash 的 Geoip 数据库管理提供 *或* 使用 geoip_database_directory 配置。

字段映射

编辑

在执行过程中,Ingest pipeline 使用 Logstash 事件的临时可变 *视图*,称为 ingest 文档。此视图包含事件中所有结构化字段,并进行最少的类型转换。

它还包含 ingest pipeline 处理器所需的附加元数据字段。

  • _version:一个 long 值整数,等效于事件的 @version,或 1 的合理默认值。
  • _ingest.timestamp:一个 ZonedDateTime 值,等效于事件的 @timestamp 字段。

执行完成后,将对事件进行清理,以确保 Logstash 保留字段具有预期的形状,并为任何缺少的必需字段提供合理的默认值。当 ingest pipeline 将保留字段设置为无法强制转换的值时,该值将在事件的备用位置提供,如下所述。

Logstash 字段 类型

@timestamp

时间戳

ingest 文档的 @timestampevent.created_ingest.timestamp_now 字段的第一个可强制转换的值;或当前时间戳。当 ingest 文档具有无法强制转换的 @timestamp 值时,它将在事件的 _@timestamp 字段中可用。

@version

字符串编码整数

ingest 文档的 @version_version 字段的第一个可强制转换的值;或当前时间戳。当 ingest 文档具有无法强制转换的 @version 值时,它将在事件的 _@version 字段中可用。

@metadata

键值映射

ingest 文档的 @metadata;或空映射。当 ingest 文档具有无法强制转换的 @metadata 值时,它将在事件的 _@metadata 字段中可用。

标签

一个字符串或字符串列表

ingest 文档的 tags。当 ingest 文档具有无法强制转换的 tags 值时,它将在事件的 _tags 字段中可用。

此外,如果且仅当这些 Elasticsearch IngestDocument 元数据字段在 pipeline 执行期间设置时,它们才会在生成的事件中可用。

Elasticsearch 文档元数据 Logstash 字段

_id

[@metadata][_ingest_document][id]

_index

[@metadata][_ingest_document][index]

_routing

[@metadata][_ingest_document][routing]

_version

[@metadata][_ingest_document][version]

_version_type

[@metadata][_ingest_document][version_type]

_ingest.timestamp

[@metadata][_ingest_document][timestamp]

解析 Pipeline 定义

编辑

此插件使用 Elasticsearch 将 pipeline 名称解析为其 pipeline 定义。当 *不* 使用显式的 pipeline_name 配置时,或者当 pipeline 使用 Reroute 处理器时,它还使用 Elasticsearch 建立数据流名称与其各自的默认 pipeline 名称的映射。

它使用命中/未命中缓存来避免为每个事件查询 Elasticsearch。它还致力于在这些缓存映射过期*之前*更新它们。结果是,当 Elasticsearch 响应迅速时,此插件能够快速获取更改而不会影响其自身的性能,并且它可以通过继续使用可能过时的映射或定义来承受 Elasticsearch 问题期间的中断。

为此,映射最多缓存 24 小时,并每 1 分钟重新加载一次缓存值,效果如下:

  • 当重新加载的映射非空且与其已缓存的值*相同*时,其生存时间将重置,以确保后续事件可以继续使用已确认的未更改值。
  • 当重新加载的映射非空且与其先前缓存的值*不同*时,将*更新*该条目,以便后续事件将使用新值。
  • 当重新加载的映射新*为空*时,将用新的空条目*替换*之前的非空映射,以便后续事件将使用空值。
  • 当映射的重新加载*失败*时,此插件会发出日志警告,但现有缓存条目保持不变,并越来越接近其过期时间。

Elastic 集成过滤器配置选项

编辑

此插件支持以下配置选项以及稍后描述的 常用选项

api_key

编辑
  • 值类型为 密码
  • 此设置没有默认值。

用于向 Elasticsearch 身份验证此插件的 API 密钥的编码形式。

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

password

编辑
  • 值类型为 密码
  • 此设置没有默认值。
  • 当请求身份验证使用 username 配置时,这是必需的。

使用 HTTP 基本身份验证连接到 Elasticsearch 时的密码。

pipeline_name

编辑
  • 值类型为 字符串
  • 此设置没有默认值。
  • 如果存在,则不会从事件的数据流字段自动检测事件的初始 pipeline。
  • 值可以是 sprintf 风格 的模板;如果任何引用的字段无法解析,则事件将不会路由到 ingest pipeline。

ssl_certificate

编辑
  • 值类型为 路径
  • 此设置没有默认值。
  • 如果存在,ssl_keyssl_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

编辑

JKS 或 PKCS12 格式密钥库的路径,其中包含受信任的证书。

此设置可用于*覆盖*系统信任库,以验证 Elasticsearch 提供的 SSL 证书。

ssl_truststore_password

编辑
  • 值类型为 密码
  • 此设置没有默认值。
  • 当连接信任使用 ssl_truststore_path 配置时,此项为必填。
  • 不能与禁用 SSL 的配置组合使用。

ssl_truststore_path 的密码。

ssl_verification_mode

编辑
  • 值类型为 字符串
  • 此设置没有默认值。
  • 不能与禁用 SSL 的配置组合使用。

Elasticsearch 提供的证书的验证级别。

默认情况下,Elasticsearch 提供的 SSL 证书将进行完全验证。

  • 可用模式

    • none:不执行任何验证,隐式信任此插件连接到的任何服务器(不安全)
    • certificate:验证服务器提供的证书是否由受信任的证书颁发机构签名,以及服务器是否能够证明其拥有相关的私钥(安全性较低)
    • full(默认):执行与 certificate 相同的验证,并验证提供的证书是否具有与我们尝试连接到的服务器匹配的身份声明(最安全)

username

编辑
  • 值类型为 字符串
  • 此设置没有默认值。
  • 如果存在此项,则 password 也必须提供。

使用 HTTP 基本身份验证连接到 Elasticsearch 时的用户名。

 

通用选项

编辑

所有过滤器插件都支持这些配置选项

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 标签)。

enable_metric

编辑
  • 值类型为 boolean
  • 默认值为 true

禁用或启用此特定插件实例的指标日志记录。默认情况下,我们记录所有可以记录的指标,但您可以禁用特定插件的指标收集。

  • 值类型为 string
  • 此设置没有默认值。

向插件配置添加唯一的 ID。如果没有指定 ID,Logstash 将生成一个。强烈建议在配置中设置此 ID。当您有两个或多个相同类型的插件时,这尤其有用,例如,如果您有两个 elastic_integration 过滤器。在这种情况下,添加命名 ID 将有助于在使用监控 API 时监控 Logstash。

    filter {
      elastic_integration {
        id => "ABC"
      }
    }

id 字段中的变量替换仅支持环境变量,不支持使用密钥存储中的值。

periodic_flush

编辑
  • 值类型为 boolean
  • 默认值为 false

定期调用过滤器刷新方法。可选。

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。第二个示例还将删除一个不需要的标签。