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

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,内容安全 1000次 1年
对象存储 OSS,恶意文件检测 1000次 1年
简介: 本文介绍日志服务数据家中中的查询字符串语法, 其类似日志服务查询以及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日志并进行多维度分析。
目录
相关文章
|
28天前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
本文介绍了MySQL InnoDB存储引擎中的数据文件和重做日志文件。数据文件包括`.ibd`和`ibdata`文件,用于存放InnoDB数据和索引。重做日志文件(redo log)确保数据的可靠性和事务的持久性,其大小和路径可由相关参数配置。文章还提供了视频讲解和示例代码。
132 11
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
|
2月前
|
Web App开发 存储 监控
iLogtail 开源两周年:UC 工程师分享日志查询服务建设实践案例
本文为 iLogtail 开源两周年的实践案例分享,讨论了 iLogtail 作为日志采集工具的优势,包括它在性能上超越 Filebeat 的能力,并通过一系列优化解决了在生产环境中替换 Filebeat 和 Logstash 时遇到的挑战。
117 13
|
28天前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的联机重做日志文件与数据写入过程
在Oracle数据库中,联机重做日志文件记录了数据库的变化,用于实例恢复。每个数据库有多组联机重做日志,每组建议至少有两个成员。通过SQL语句可查看日志文件信息。视频讲解和示意图进一步解释了这一过程。
|
2月前
|
数据采集 机器学习/深度学习 存储
使用 Python 清洗日志数据
使用 Python 清洗日志数据
41 2
|
3月前
|
SQL 存储 缓存
高基数 GroupBy 在 SLS SQL 中的查询加速
本文详细介绍了SLS中的高基数GroupBy查询加速技术。
133 18
|
2月前
|
监控 网络协议 CDN
阿里云国际监控查询流量、用量查询流量与日志统计流量有差异?
阿里云国际监控查询流量、用量查询流量与日志统计流量有差异?
|
3月前
|
SQL 人工智能 运维
在阿里云日志服务轻松落地您的AI模型服务——让您的数据更容易产生洞见和实现价值
您有大量的数据,数据的存储和管理消耗您大量的成本,您知道这些数据隐藏着巨大的价值,但是您总觉得还没有把数据的价值变现出来,对吗?来吧,我们用一系列的案例帮您轻松落地AI模型服务,实现数据价值的变现......
231 3
|
1月前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
223 30
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
2月前
|
XML JSON Java
Logback 与 log4j2 性能对比:谁才是日志框架的性能王者?
【10月更文挑战第5天】在Java开发中,日志框架是不可或缺的工具,它们帮助我们记录系统运行时的信息、警告和错误,对于开发人员来说至关重要。在众多日志框架中,Logback和log4j2以其卓越的性能和丰富的功能脱颖而出,成为开发者们的首选。本文将深入探讨Logback与log4j2在性能方面的对比,通过详细的分析和实例,帮助大家理解两者之间的性能差异,以便在实际项目中做出更明智的选择。
279 3
|
10天前
|
存储 监控 安全
什么是事件日志管理系统?事件日志管理系统有哪些用处?
事件日志管理系统是IT安全的重要工具,用于集中收集、分析和解释来自组织IT基础设施各组件的事件日志,如防火墙、路由器、交换机等,帮助提升网络安全、实现主动威胁检测和促进合规性。系统支持多种日志类型,包括Windows事件日志、Syslog日志和应用程序日志,通过实时监测、告警及可视化分析,为企业提供强大的安全保障。然而,实施过程中也面临数据量大、日志管理和分析复杂等挑战。EventLog Analyzer作为一款高效工具,不仅提供实时监测与告警、可视化分析和报告功能,还支持多种合规性报告,帮助企业克服挑战,提升网络安全水平。

相关产品

  • 日志服务