脚本处理器编辑

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

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

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

这将从磁盘加载 filter.js

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

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

processors:
  - 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";
    }
}

配置选项编辑

script 处理器具有以下配置设置

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

事件 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", "无效文件哈希");