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

本文涉及的产品
对象存储 OSS,20GB 3个月
文件存储 NAS,50GB 3个月
云备份 Cloud Backup,100GB 3个月
简介: 本文介绍日志服务数据家中中的查询字符串语法, 其类似日志服务查询以及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

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
29天前
|
数据采集 机器学习/深度学习 存储
使用 Python 清洗日志数据
使用 Python 清洗日志数据
30 2
|
2月前
|
SQL 存储 缓存
高基数 GroupBy 在 SLS SQL 中的查询加速
本文详细介绍了SLS中的高基数GroupBy查询加速技术。
100 16
|
26天前
|
监控 网络协议 CDN
阿里云国际监控查询流量、用量查询流量与日志统计流量有差异?
阿里云国际监控查询流量、用量查询流量与日志统计流量有差异?
|
2月前
|
SQL 人工智能 运维
在阿里云日志服务轻松落地您的AI模型服务——让您的数据更容易产生洞见和实现价值
您有大量的数据,数据的存储和管理消耗您大量的成本,您知道这些数据隐藏着巨大的价值,但是您总觉得还没有把数据的价值变现出来,对吗?来吧,我们用一系列的案例帮您轻松落地AI模型服务,实现数据价值的变现......
181 3
|
3月前
|
数据库 Java 监控
Struts 2 日志管理化身神秘魔法师,洞察应用运行乾坤,演绎奇幻篇章!
【8月更文挑战第31天】在软件开发中,了解应用运行状况至关重要。日志管理作为 Struts 2 应用的关键组件,记录着每个动作和决策,如同监控摄像头,帮助我们迅速定位问题、分析性能和使用情况,为优化提供依据。Struts 2 支持多种日志框架(如 Log4j、Logback),便于配置日志级别、格式和输出位置。通过在 Action 类中添加日志记录,我们能在开发过程中获取详细信息,及时发现并解决问题。合理配置日志不仅有助于调试,还能分析用户行为,提升应用性能和稳定性。
50 0
|
3月前
|
开发者 前端开发 编解码
Vaadin解锁移动适配新境界:一招制胜,让你的应用征服所有屏幕!
【8月更文挑战第31天】在移动互联网时代,跨平台应用开发备受青睐。作为一款基于Java的Web应用框架,Vaadin凭借其组件化设计和强大的服务器端渲染能力,助力开发者轻松构建多设备适应的Web应用。本文探讨Vaadin与移动设备的适配策略,包括响应式布局、CSS媒体查询、TouchKit插件及服务器端优化,帮助开发者打造美观且实用的移动端体验。通过这些工具和策略的应用,可有效应对屏幕尺寸、分辨率及操作系统的多样性挑战,满足广大移动用户的使用需求。
54 0
|
3月前
|
存储 运维 监控
Entity Framework Core 实现审计日志记录超棒!多种方法助你跟踪数据变化、监控操作,超实用!
【8月更文挑战第31天】在软件开发中,审计日志记录对于跟踪数据变化、监控用户操作及故障排查至关重要。Entity Framework Core (EF Core) 作为强大的对象关系映射框架,提供了多种实现审计日志记录的方法。例如,可以使用 EF Core 的拦截器在数据库操作前后执行自定义逻辑,记录操作类型、时间和执行用户等信息。此外,也可通过在实体类中添加审计属性(如 `CreatedBy`、`CreatedDate` 等),并在保存实体时更新这些属性来记录审计信息。这两种方法都能有效帮助我们追踪数据变更并满足合规性和安全性需求。
58 0
|
26天前
|
XML JSON Java
Logback 与 log4j2 性能对比:谁才是日志框架的性能王者?
【10月更文挑战第5天】在Java开发中,日志框架是不可或缺的工具,它们帮助我们记录系统运行时的信息、警告和错误,对于开发人员来说至关重要。在众多日志框架中,Logback和log4j2以其卓越的性能和丰富的功能脱颖而出,成为开发者们的首选。本文将深入探讨Logback与log4j2在性能方面的对比,通过详细的分析和实例,帮助大家理解两者之间的性能差异,以便在实际项目中做出更明智的选择。
165 3
|
26天前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1601 14
|
21天前
|
Python
log日志学习
【10月更文挑战第9天】 python处理log打印模块log的使用和介绍
20 0

相关产品

  • 日志服务