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_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 通信以确定应该为给定事件运行哪个摄取管道,并检索摄取管道定义本身。您必须使用以下*确切一项*配置此插件以指向 Elasticsearch

  • 云 ID(请参阅cloud_id
  • 一个或多个主机 URL 的列表(请参阅hosts

除非您明确配置此插件,否则将通过 SSL 安全地进行通信。

您可能需要配置此插件如何建立对响应服务器的信任,并且可能需要配置此插件如何呈现其自身的身份或凭据。

SSL 信任配置编辑

在通过 SSL 进行通信时,此插件使用系统信任库完全验证 Elasticsearch 提供的身份证明。您可以使用以下*一项*提供*备用*信任源

您还可以配置验证身份证明的哪些方面(请参阅ssl_verification_mode)。

SSL 身份配置编辑

在通过 SSL 进行通信时,您还可以配置此插件,以使用以下*一项*向其连接的 Elasticsearch 集群提供基于证书的身份证明

请求身份编辑

您可以通过以下几种方式之一配置此插件以向 Elasticsearch 提供身份验证凭据

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

最低所需权限编辑

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

权限名称 描述

monitor

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

read_pipeline

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

manage_index_templates

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

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

为避免这些问题,请设置用户身份验证并确保在 Elasticsearch 中启用了安全性(默认)。

支持的摄取处理器编辑

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

来源 处理器 注意事项

摄取通用

append

bytes

communityid

convert

csv

date

dateindexname

dissect

dotexpander

drop

fail

fingerprint

foreach

grok

gsub

htmlstrip

join

json

keyvalue

lowercase

networkdirection

pipeline

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

registereddomain

remove

rename

reroute

script

lang必须为painless(默认)

set

sort

split

trim

uppercase

uri_parts

urldecode

user_agent

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

Redact(编校)

redact(编校)

GeoIp(地理位置)

geoip(地理位置)

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

字段映射编辑

在执行期间,Ingest 管道使用 Logstash 事件的临时可变视图(称为 ingest 文档)进行工作。此视图包含来自事件的所有结构化字段,并进行了最少的类型转换。

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

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

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

Logstash 字段 类型

@timestamp(时间戳)

Timestamp(时间戳)

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

@version(版本)

字符串编码的整数

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

@metadata(元数据)

键/值映射

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

tags(标签)

字符串或字符串列表

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

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

Elasticsearch 文档元数据 Logstash 字段

_id(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]

解析管道定义编辑

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

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

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

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

Elastic 集成过滤器配置选项编辑

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

api_key编辑

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

用于对此插件进行身份验证到 Elasticsearch 的 API 密钥的编码形式。

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

password编辑

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

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

pipeline_name编辑

  • 值类型为 字符串
  • 此设置没有默认值。
  • 如果存在,则不会从事件的数据流字段中自动检测事件的初始管道。
  • 值可以是 sprintf 样式 的模板;如果无法解析任何引用的字段,则事件不会被路由到摄取管道。

ssl_certificate编辑

用于标识此插件到 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_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编辑

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编辑

  • 值类型为 哈希
  • 默认值为 {}

如果此过滤器成功,则向此事件添加任意字段。字段名称可以是动态的,并可以使用 %{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 标签)。

enable_metric编辑

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

id编辑

  • 值类型为 字符串
  • 此设置没有默认值。

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

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

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

periodic_flush编辑

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

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