择维士日志查询语法采用流行的类似Splunk或Sumologic的流式查询语法,一个有效的查询可以分为以下几大部分
- 关键字过滤部分
- 日志处理函数
- 日志显示选项
关键字过滤
每个查询都应该从提供一个或多个关键字进行日志过滤开始,这样有助于提升日志查询效率。关键字应该足够明确,尽量将日志限制于一个较小的范围
关键字应该使用单引号或双引号,关键字之间可以通过简单的AND和OR关键字进行连接,用来完成复杂的关键字过滤,以下为一些实例:
查询包含”error“和“network”的日志
注意 关键字在我们的语法中是大小写敏感的。
查询包含 “Failed”或”failed”的日志
日志处理
在指定关键字后,用户可以通过管道符号 “ | ” 附加一个或多个处理函数。我们的处理函数包括以下几类 |
- 日志过滤处理函数:用于进一步对日志按标签或内容进行过滤
- 日志格式化或转换函数:用于对日志内容进行各种变换或信息提取,方便后续处理
- 日志归集函数:用于将日志或日志标签进行各种归集操作,方便产生相关数据报表
日志过滤函数
我们支持一下两个个函数对日志进行进一步过滤
- grep:用于对日志内容进行进一步过滤,其预期一个类似上述关键字过滤的语法对日志进行进一步处理,如
- grep “Failed” or “failed”
- grep “error” and “network”
- filter: 用于对标签进行过滤和。其预期一个标签过滤语法 label <op> value,其中label为标签名,op代表支持的操作,value位一个字符串或一个正则表达式。
- filter service = “finance” - 过滤标签名service的值为finance的日志条目
- filter location != “chengdu” - 过滤标签名location取值不为chengdu的日志条目
- filter name ~ /Instance .*/ - 过滤name标签取值匹配指定RE2正则表达式的日志条目
- filter name !~ /Instance .*/ - 过滤name标签取值不匹配指定RE2正则表达式的日志条目
注 我们的正则语法为Google RE2语法,请参看其官方介绍了解更多详情。https://github.com/google/re2/wiki/Syntax
日志转换或格式化函数
这类函数用于对日志进行变换或转换,从而能提取出更多的信息(如标签)方便后续过滤或处理。
我们目前支持以下函数
- json:如果日志内容为JSON格式的,可以用json将其进行解析,并将每一个field转换为一个标签
- logfmt: 如果日志内容为logfmt格式,可以使用此函数将内容转换为按key=value格式的标签。关于logfmt格式,可参看这个链接:https://www.brandur.org/logfmt
- pattern: 用来快速从日志中提取满足模式的部分并存储为一个标签。其语法为简单的从左自由匹配,用空白键做分隔符,对关心的部分通过用”<name>“模式进行命名,对不关心部分可以用特殊的”<_>"进行替代
- pattern “
- - <_> " <_>" <_> " " <_>" :从左自由,依次从日志中提取ip,method, uri等标签
- pattern “
日志归集函数
日志归集函数用于对指定标签或日志行本身进行归集、统计等操作
TBD