过滤日志

Logging 服务支持自定义查询语言,让您能够轻松过滤结构化的日志。本节将介绍查询语言的语法和用法,并提供一些示例来帮助您入门。

基本语法和运算符

过滤查询由一个或多个条件组成。一个条件的基本语法包含以下组成部分:

组成部分条件
字段要作为过滤依据的字段,例如 severityTextbodylogAttributes
运算符支持的运算符之一。请参阅下面的运算符表。
要与字段比较的值。

请参阅下表以查看支持的运算符列表。

运算符含义
=等于
!=不等于
~=包含(仅可用于 body
!~=不包含(仅可用于 body
\>大于
<小于
<=小于或等于
\>=大于或等于

布尔表达式和分组

您可以使用布尔表达式和带括号的分组功能来创建复杂的过滤查询。因此,您可以组合多个条件来创建精确的过滤器。

布尔表达式含义
AND&&要求任一端的两个条件都成立。
OR||要求任一端的至少一个条件成立。
分组使用括号 ( ) 对表达式进行分组并控制计算顺序。

为简化查询的编写,换行符也被解释为布尔值 AND。这意味着,当希望所有条件都匹配时,可以每行编写一个条件。

过滤查询示例

选择特定严重性级别的所有日志:

severityText = "ERROR"

从 Cloud Code 中选择高于特定严重性级别的所有日志(换行符被视为 AND):

resourceAttributes.service.name = "cloud-code"
severityNumber >= 12

排除消息中包含特定字词的日志:

body !~= "healthcheck"

组合多个条件和分组(使用“severity”别名):

(logAttributes.event.name = "example-event" AND body ~= "timeout") OR (logAttributes.custom.counter > 9000 AND severity = "WARN")

注意

请注意以下关于过滤查询语言的事项:

  • 为方便起见,severityText 字段还采用别名 severity
  • body 字段支持模糊匹配运算符(= 和 !=)
  • logAttributes 键区分大小写
  • logAttributes 值自动转换为字符串