脚本处理器编辑

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");