脚本处理器
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"); |