加载中

脚本处理器

script 处理器执行 Javascript 代码来处理事件。该处理器使用 ECMAScript 5.1 的纯 Go 实现,并且没有外部依赖项。在其他处理器无法提供所需事件过滤功能的情况下,这会非常有用。

可以通过在配置文件中嵌入 Javascript 或将处理器指向外部文件来配置处理器。

- script:
    lang: javascript
    source: >
      function process(event) {
          event.Tag("js");
      }

此示例从磁盘加载 filter.js

- script:
    lang: javascript
    file: ${path.config}/filter.js

可以通过向配置添加 params 来将参数传递给脚本。这使得脚本可以被重复使用。使用 params 时,代码必须定义一个 register(params) 函数来接收参数。

- script:
    lang: javascript
    tag: my_filter
    params:
      threshold: 15
    source: >
      var params = {threshold: 42};
      function register(scriptParams) {
          params = scriptParams;
      }
      function process(event) {
          if (event.Get("severity") < params.threshold) {
              event.Cancel();
          }
      }

如果脚本定义了 test() 函数,则在加载处理器时会调用它。任何抛出的异常都将导致处理器加载失败。这可用于对脚本的行为进行断言。

function process(event) {
    if (event.Get("event.code") === 1102) {
        event.Put("event.action", "cleared");
    }
    return event;
}

function test() {
    var event = process(new Event({event: {code: 1102}}));
    if (event.Get("event.action") !== "cleared") {
        throw "expected event.action === cleared";
    }
}
注意

Elastic Agent 处理器在摄入管道之前执行,这意味着它们处理的是原始事件数据而不是发送到 Elasticsearch 的最终事件。有关相关的限制,请参阅 使用处理器有哪些限制?

名称 必需 默认 描述
lang 此字段的值必须是 javascript
tag 添加到日志消息的可选标识符。如果已定义,此 tag 会为此处理器实例启用指标日志记录。指标包括异常数量和 process 函数执行时间的直方图。
内嵌 Javascript 源代码。
file 要加载的脚本文件的路径。相对路径被解释为相对于 path.config 目录的路径。Glob 模式会被展开。
files 要加载的脚本文件列表。这些脚本会被连接在一起。相对路径被解释为相对于 path.config 目录的路径。Glob 模式会被展开。
params 传递给脚本 register 函数的参数字典。
tag_on_exception _js_exception 在 Javascript 代码处理事件时引发异常的情况下,添加到事件的 Tag。
超时 无超时 process 函数的执行超时。当 process 函数运行时间超过 timeout 期限时,函数将被中断。您可以设置此选项以防止脚本运行时间过长(例如防止无限 while 循环)。
max_cached_sessions 4 将缓存的 Javascript VM 会话的最大数量,以避免重新分配。

传递给 process 方法的 Event 对象具有以下 API。

方法 描述
Get(string) 从事件中获取值(标量或对象)。如果键不存在,则返回 null。如果没有提供键,则返回一个包含所有字段的对象。
示例var value = event.Get(key);
Put(string, value) 将值放入事件中。如果键已存在,则返回之前的值。如果因某个中间值不是对象而无法设置键,则抛出异常。
示例var old = event.Put(key, value);
Rename(string, string) 重命名事件中的一个键。目标键不得已存在。如果源键成功重命名为目标键,则返回 true。
示例var success = event.Rename("source", "target");
Delete(string) 从事件中删除一个字段。成功时返回 true。
示例var deleted = event.Delete("user.email");
Cancel() 将事件标记为已取消,这将导致处理器丢弃该事件。
示例event.Cancel(); return;
Tag(string) 如果标签尚未存在,则将其附加到 tags 字段。如果 tags 存在但不是字符串或字符串列表,则抛出异常。
示例event.Tag("user_event");
AppendTo(string, string) AppendTo 是一个特殊的 Put 方法,它将现有值转换为数组,并在值不存在时附加该值。如果存在不是字符串或字符串数组的现有值,则抛出异常。
示例event.AppendTo("error.message", "invalid file hash");
© . All rights reserved.