Elasticsearch EQL 函数参考指南
elasticsearch 项目地址: https://gitcode.com/gh_mirrors/elas/elasticsearch
概述
Elasticsearch 的事件查询语言(EQL)提供了一系列内置函数,用于在查询中进行数据转换和计算。这些函数可以处理字符串、数字、IP地址等多种数据类型,为安全分析、日志查询等场景提供了强大的支持。
数学运算函数
add 函数
add
函数用于计算两个数的和,支持整数和浮点数。
语法:
add(<addend>, <addend>)
参数:
<addend>
:必需,可以是整数、浮点数或null。如果任一参数为null,函数返回null
示例:
add(4, 5) // 返回9
add(4, 0.5) // 返回4.5
add(process.args_count, 5) // 使用字段值进行计算
divide 函数
divide
函数返回两个数的商,需要注意整数除法的向下取整问题。
重要警告: 当两个参数都是整数时,结果会被向下取整。要避免这种情况,可以将其中一个参数转换为浮点数。
语法:
divide(<dividend>, <divisor>)
示例:
divide(4, 2) // 返回2
divide(4, 3) // 返回1(整数除法)
divide(4, 3.0) // 返回1.333...(浮点除法)
modulo 函数
modulo
函数返回除法运算的余数。
语法:
modulo(<dividend>, <divisor>)
示例:
modulo(10, 6) // 返回4
modulo(10, 5) // 返回0
multiply 函数
multiply
函数返回两个数的乘积。
语法:
multiply(<factor>, <factor>)
示例:
multiply(2, 2) // 返回4
multiply(0.5, 2) // 返回1
字符串处理函数
between 函数
between
函数从源字符串中提取位于指定左右文本之间的子字符串。
语法:
between(<source>, <left>, <right>[, <greedy_matching>])
参数:
greedy_matching
:可选,控制匹配模式(贪婪/非贪婪)
示例:
between(file.path, "System32\\", ".exe") // 返回"cmd"
between~(file.path, "system32\\", ".exe") // 不区分大小写匹配
concat 函数
concat
函数连接多个值形成字符串。
语法:
concat(<value>[, <value>])
示例:
concat("process is ", "regsvr32.exe") // 返回"process is regsvr32.exe"
concat(process.name, " ", 42) // 连接字段和常量
endsWith 函数
endsWith
函数检查字符串是否以指定子字符串结尾。
语法:
endsWith(<source>, <substring>)
示例:
endsWith("regsvr32.exe", ".exe") // 返回true
endsWith~("regsvr32.exe", ".EXE") // 不区分大小写匹配
indexOf 函数
indexOf
函数返回子字符串在源字符串中的位置。
语法:
indexOf(<source>, <substring>[, <start_pos>])
示例:
indexOf(url.domain, "d") // 返回3
indexOf(url.domain, ".", 10) // 从位置10开始查找
length 函数
length
函数返回字符串的字符长度。
语法:
length(<string>)
示例:
length("explorer.exe") // 返回12
length(process.name) // 返回字段值的长度
网络相关函数
cidrMatch 函数
cidrMatch
函数检查IP地址是否属于指定的CIDR块。
语法:
cidrMatch(<ip_address>, <cidr_block>[, ...])
示例:
cidrMatch(source.address, "192.168.0.0/16") // 检查IP是否在指定网段
使用技巧
- null处理:大多数函数在遇到null参数时会返回null
- 类型转换:注意整数和浮点数运算的区别,必要时进行显式转换
- 性能考虑:在大型数据集上使用函数可能会影响查询性能
- 字段类型限制:某些函数对字段类型有特定要求,使用时需注意
总结
Elasticsearch的EQL函数为事件查询提供了丰富的处理能力,从基本的数学运算到复杂的字符串处理,再到网络地址匹配,覆盖了常见的数据处理需求。合理使用这些函数可以构建更加强大和灵活的查询条件,提升安全分析和日志检索的效率。
elasticsearch 项目地址: https://gitcode.com/gh_mirrors/elas/elasticsearch
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考