脚本处理器

编辑

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

添加到日志消息的可选标识符。如果已定义,则此标签会为处理器的此实例启用指标日志记录。指标包括异常数量以及 process 函数执行时间的直方图。

source

内联 Javascript 源代码。

file

要加载的脚本文件的路径。相对路径被解释为相对于 path.config 目录。通配符将被展开。

files

要加载的脚本文件列表。这些脚本将连接在一起。相对路径被解释为相对于 path.config 目录。通配符将被展开。

params

传递给脚本的 register 的参数字典。

tag_on_exception

_js_exception

如果 Javascript 代码在处理事件时导致异常,则添加到事件的标签。

timeout

无超时

process 函数的执行超时。当 process 函数花费的时间超过 timeout 周期时,该函数将被中断。您可以设置此选项以防止脚本运行时间过长(例如,防止无限 while 循环)。

max_cached_sessions

4

将缓存的 Javascript VM 会话的最大数量,以避免重新分配。

事件 API

编辑

传递给 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");