日志服务数据加工: 查询字符串语法

简介: 本文介绍日志服务数据家中中的查询字符串语法, 其类似日志服务查询以及lucene语法, 极大简化条件判断的逻辑编写.

概述

搜索字符串是ETL语言中用于快速过滤的语法, 语法基本上与日志服务的查询语法, 以及lucene 语法相同. 可以极大简化数据加工的条件判断的逻辑.

相关函数

如下函数会使用到查询字符串语法.

类型 函数 使用场景
表达式函数-事件判断函数 e_search 使用查询字符串判断事件的字段值是否满足特定条件, 返回True或False
表达式函数-资源函数 res_log_logstore_pull 拉取Logstore资源返回表格, 构建表格中, 使用查询字符串配置黑白名单, 来判断每行是保留还是丢弃.
全局事件函数-搜索表格映射 e_search_table_map 关键字是查询字符串, 值是匹配的值的字典进行映射

功能概览

功能 字段 全文
子串搜索 支持 支持
通配符*?搜索 支持 支持
完全匹配搜索 支持 -
正则表达式搜索 支持 -
数值范围搜索 支持 -
数值比较 支持 -
关系and, or, not以及自由组合 支持 支持

搜索值转义

  1. 包含", \时需要用\转义.
    例如:

content: "abc\"xy\\z" 合法

  1. 希望搜索*, ?时, 也需要用\转义, 否则会被视为通配符匹配
  2. 包含中文, 字母, 数字, 下划线, 小横线, *, ?等情况不需要用双引号, 其他情况需要用双引号括起来.
    例如:

status: "\*\?()[]:=" 值含特殊字符的值, 推荐放在"中, 除了*?和需要转义外, 其他不用转义
status: active\*test 值只包含*或?, 可以不用双引号
status: active\?test 值只包含*或?, 可以不用双引号
content: ()[]:= 非法

字段名转义

  • 字段名不能使用双引号, 包含特殊字符时直接使用\转义,
  • 包含中文, 字母, 数字, 下划线, 小横线等情况不需要用双引号, 其他情况需要.
  • 例如:
    "\*\(\1+1\)\?: abc") 字段不可以用双引号, 特殊字符用转义

__tag__\:__container_name__: abc 用转义
中文字段: abc" 中文不需要转义
"content": abc 非法, 字段名不能用双引号括起来

注意: 值用字符串用双引号括起来, 不支持单引号
e_search("domain: '/url/test.jsp'")是错误的, 只能e_search('domain: "/url/test.jsp"')

子串搜索

语法

e_search("子串")
e_search("字段名: 子串")

全文搜索

对所有字段进行搜索子串

样例 场景
e_search("active error") 多个子串搜索, 默认关系是OR
e_search('"active error"') 搜索完整带空格的子串
e_search('"错误"') 中文子串

字段搜索

对特定字段进行搜索

样例 场景
e_search("status: active") 子串搜索
e_search('author: "john smith"') 带空格子串搜索
e_search('fileld: active error') 相当于 field:active OR "error"

通配符搜索

* ? 匹配: *表示 0个或多个字符串, ? 表示一个字符, 也可以表示一个宽字符如中文.

全文搜索

对所有字段进行搜索子串

样例 场景
e_search("active*test") 匹配0到多个, 不需要用双引号括起来
e_search("发生*错误") 中文匹配, 可以匹配发生错误, 发生严重错误等
e_search("active?good") ? 可以不用双引号
e_search("ac*tive?good") 也可以应用于完全匹配
e_search("ac*tive??go*od") 支持多个混合使用

字段搜索

对特定字段进行搜索子串

样例 场景
e_search("status: active*test") 匹配0到多个
e_search("status: active?good") 匹配一个

完全匹配

不同于子串搜索, 只需要局部匹配即可, 完全匹配要求对字段值从开头到结尾的值完全匹配.

语法

e_search("字段名==子串")

样例

样例 场景
e_search('author== "john smith"') 字段author必须完全等于john smith
e_search("status== ac*tive?good") 可以与通配符结合使用

正则表达式匹配

语法

使用正则表达式匹配, 比通配符更强大的匹配方式.

e_search("字段名~=正则表达式字符串")

因为正则表达式大量使用\, 推使用r修饰搜索字符串.
注意: 默认使用的是局部匹配, 而不是完全匹配, 如果需要完全匹配只需要在开头和结尾加上^和$即可

样例

样例 场景
e_search(r'status~= "\d+"') status字段包含数字
e_search(r'status~= "^\d+$"') status字段等于数字

数值比较

范围类比较

语法

这里是左右闭区间, 支持*表示无边界.

e_search("字段: [左值, 右值]"   # >= 左值, <= 右值
e_search("字段: [*, 右值]")        # <= 右值
e_search("字段: [左值, *]")        #  >= 左值

样例

e_search('count: [100, 200]')   # >=100 and  <=200
e_search('count: [*, 200]')   # <=200
e_search('count: [200, *]')   # >=200

数值直接比较

语法样例

直接使用>, >=, =, <, <=比较:

e_search('age >= 18')   # >= 18
e_search('age > 18')   #  > 18
e_search('age = 18')   #  = 18
e_search('age <= 18')   #  <=18
e_search('age < 18')   #  <18

逻辑关系

全局逻辑关系

支持任意搜索之间的逻辑关系, 也支持用 ( ) 进行嵌套.

逻辑 关键字
且 and AND && 大小写不敏感
或 or OR 双竖线 大写小不敏感
否 not ! 大小写不敏感

样例

e_search("abc OR xyz")  # 大小写不敏感
e_search("abc and (xyz or zzz)")
e_search("abc and not (xyz and not zzz)")
e_search("abc && xyz")        # and
e_search("abc || xyz")        # or
e_search("abc || !xyz")        # or not

子串匹配逻辑关系

在子串匹配是也支持逻辑关系:

样例

e_search("field: (abc OR xyz)")  # 字段field包含 abc 或 xyz
e_search("field: (abc OR not xyz)")  # 字段field包含 abc 或 不包含xyz
e_search("field: (abc && !xyz)")  # 字段field包含 abc 且 不包含xyz

字段判断

也可以使用搜索字符串对字段做定性判断:

样例 场景
e_search("field: *") 字段存在(任意值)
e_search('field: ""') 字段存在(至少包含一个子空串)
e_search("not field:*") 字段不存在
e_search('not field:""') 字段不存在
e_search('field==""') 字段存在, 值为空
e_search('field~=".+"') 字段存在, 值不为空
e_search('not field~=".+"') 字段不存在或值为空
e_search('not field==""') 字段不存在或值不为空

进一步参考

欢迎扫码加入官方钉钉群获得实时更新与阿里云工程师的及时直接的支持:
image

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
|
SQL 人工智能 监控
SLS Copilot 实践:基于 SLS 灵活构建 LLM 应用的数据基础设施
本文将分享我们在构建 SLS SQL Copilot 过程中的工程实践,展示如何基于阿里云 SLS 打造一套完整的 LLM 应用数据基础设施。
3657 126
|
数据采集 运维 监控
不重启、不重写、不停机:SLS 软删除如何实现真正的“无感数据急救”?
SLS 全新推出的「软删除」功能,以接近索引查询的性能,解决了数据应急删除与脏数据治理的痛点。2 分钟掌握这一数据管理神器。
976 67
|
存储 缓存 Apache
StarRocks+Paimon 落地阿里日志采集:万亿级实时数据秒级查询
本文介绍了阿里集团A+流量分析平台的日志查询优化方案,针对万亿级日志数据的写入与查询挑战,提出基于Flink、Paimon和StarRocks的技术架构。通过Paimon存储日志数据,结合StarRocks高效计算能力,实现秒级查询性能。具体包括分桶表设计、数据缓存优化及文件大小控制等措施,解决高并发、大数据量下的查询效率问题。最终,日志查询耗时从分钟级降至秒级,显著提升业务响应速度,并为未来更低存储成本、更高性能及更多业务场景覆盖奠定基础。
|
SQL 监控 数据挖掘
SLS 重磅升级:超大规模数据实现完全精确分析
SLS 全新推出的「SQL 完全精确」模式,通过“限”与“换”的策略切换,在快速分析与精确计算之间实现平衡,满足用户对于超大数据规模分析结果精确的刚性需求。标志着其在超大规模日志数据分析领域再次迈出了重要的一步。
1321 118
|
存储 缓存 Apache
StarRocks+Paimon 落地阿里日志采集:万亿级实时数据秒级查询
A+流量分析平台是阿里集团统一的全域流量数据分析平台,致力于通过埋点、采集、计算构建流量数据闭环,助力业务提升流量转化。面对万亿级日志数据带来的写入与查询挑战,平台采用Flink+Paimon+StarRocks技术方案,实现高吞吐写入与秒级查询,优化存储成本与扩展性,提升日志分析效率。
1746 1
|
存储 NoSQL MongoDB
Docker中安装MongoDB并配置数据、日志、配置文件持久化。
现在,你有了一个运行在Docker中的MongoDB,它拥有自己的小空间,对高楼大厦的崩塌视而不见(会话丢失和数据不持久化的问题)。这个MongoDB的数据、日志、配置文件都会妥妥地保存在你为它精心准备的地方,天旋地转,它也不会失去一丁点儿宝贵的记忆(即使在容器重启后)。
2060 4
|
存储 关系型数据库 数据库
【赵渝强老师】PostgreSQL数据库的WAL日志与数据写入的过程
PostgreSQL中的WAL(预写日志)是保证数据完整性的关键技术。在数据修改前,系统会先将日志写入WAL,确保宕机时可通过日志恢复数据。它减少了磁盘I/O,提升了性能,并支持手动切换日志文件。WAL文件默认存储在pg_wal目录下,采用16进制命名规则。此外,PostgreSQL提供pg_waldump工具解析日志内容。
1230 0
|
自然语言处理 监控 安全
阿里云发布可观测MCP!支持自然语言查询和分析多模态日志
阿里云可观测官方发布了Observable MCP Server,提供了一系列访问阿里云可观测各产品的工具能力,包含阿里云日志服务SLS、阿里云应用实时监控服务ARMS等,支持用户通过自然语言形式查询
2247 0
阿里云发布可观测MCP!支持自然语言查询和分析多模态日志

相关产品

  • 日志服务