You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何指定Filebeat processor脚本仅作用于特定Elasticsearch索引

条件不生效的问题原因与解决方案

你配置的匹配条件未生效的核心原因是字段路径错误:
Filebeat处理器执行阶段早于事件发送到Elasticsearch,目标索引值默认存储在事件的**@metadata._index元字段**中,而非顶层的_index字段。你配置的equals._index匹配的是事件顶层的普通字段,自然无法命中,因此条件不触发。

修正后的配置示例

如果需要匹配完整索引名,修改条件字段路径即可:

processors:
  - script:
      when:
        equals:
          "@metadata._index": "firewall-11.2021"
      lang: javascript
      id: my_filter1
      file: ${path.config}/Script_A.js
  # 匹配switch类索引可以用前缀匹配,适配按月生成的动态索引名
  - script:
      when:
        prefix:
          "@metadata._index": "switch-"
      lang: javascript
      id: my_filter2
      file: ${path.config}/Script_B.js

更优的备选方案

如果你的firewall和switch两类日志对应不同的Filebeat输入源,可直接将脚本处理器配置在对应input块下,无需额外做索引匹配判断,执行效率更高:

filebeat.inputs:
  - type: filestream
    paths: /var/log/firewall/*.log
    processors:
      - script:
          lang: javascript
          id: my_filter1
          file: ${path.config}/Script_A.js
    output.elasticsearch:
      index: "firewall-%{+yyyy.MM}"
  - type: filestream
    paths: /var/log/switch/*.log
    processors:
      - script:
          lang: javascript
          id: my_filter2
          file: ${path.config}/Script_B.js
    output.elasticsearch:
      index: "switch-%{+yyyy.MM}"

脚本应用方式的性能差异

  • 全局应用脚本:所有事件都需要完整执行一次JavaScript脚本逻辑,开销固定。
  • 指定索引应用脚本:先执行原生实现的轻量字段条件匹配(开销可忽略不计),只有匹配到目标索引的事件才会执行JavaScript脚本逻辑。
    只要匹配目标索引的事件占比不是100%,指定索引应用的性能会显著优于全局脚本;即便所有事件都匹配索引条件,额外的条件判断开销几乎可以忽略,和全局脚本性能没有可感知的差异。

内容的提问来源于stack exchange,提问作者Sederfo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 09:39:00