跳转至

搜索


查看器搜索栏支持分词搜索、短语搜索、字段筛选、JSON 搜索和函数查询。您也可以切换到 DQL 模式,编写完整的查询语句。

选择搜索方式

查询需求 使用方式 示例
搜索文本内容 文本搜索 connection timeout
搜索连续短语 短语搜索 #"connection timeout"
按字段和值筛选 字段筛选 service:api
搜索 JSON 内嵌字段 JSON 搜索 @meta.service:api
搜索 MD5 脱敏数据 MD5 函数查询 color:md5(red)
搜索 IP 网段 CIDR 函数查询 CIDR(@client_ip, 10.0.0.0/8)
执行复杂查询或计算 DQL 查询 L::logs:(*) {...}
搜索与筛选

直接输入文本时,系统执行分词搜索;在引号前添加 # 时,系统执行短语搜索;使用 字段名:字段值 时,系统执行字段筛选。例如,error timeout 用于分词搜索,#"error timeout" 用于连续短语搜索,service:api 用于筛选 service 字段。

组合搜索

日志查看器会在搜索栏下拉列表中提示 ANDOR 等常用组合操作符。

  • AND:同时满足前后两个条件;
  • OR:满足前后任意一个条件;
  • 组合操作符必须使用大写;
  • 小写 andor 会被当作普通文本参与搜索。

例如:

service:api AND status:error
source:nginx OR source:apache
(service:api OR service:web) AND status:error

文本搜索

查看器文本搜索采用 search() 查询语法。系统会对输入内容进行分词,并检索同时包含所有分词的数据。

  • 中文按字符进行分词;
  • 英文按空格、标点等词边界进行分词;
  • 英文搜索不区分大小写;
  • 各分词不要求连续出现。

分词搜索

输入文本后,系统会自动进行分词。只要数据中同时包含全部分词,即使分词之间存在其他内容,也可以被检索到。

中文示例:

输入:我喜欢苹果

可能匹配:
- 我喜欢苹果
- 我很喜欢吃苹果
- 苹果是我喜欢的水果

以上结果均包含搜索内容的全部有效分词,这些分词不要求连续出现。

英文示例:

输入:connection timeout

可能匹配:
- connection timeout
- Connection retry timeout
- connection request failed due to timeout

以上结果均同时包含“connection”和“timeout”,分词不要求连续出现,且不区分大小写。

短语搜索

如果需要按照完整、连续的短语进行检索,请在引号前添加 #。推荐使用英文半角双引号:

  • #"我喜欢苹果":可以匹配“我喜欢苹果,也喜欢香蕉”,不会匹配“我很喜欢吃苹果”;
  • #"connection timeout":可以匹配“connection timeout occurred”,不会匹配“connection retry timeout”。

查看器支持以下短语写法:

写法 说明 转换后的 DQL 条件
#"connection timeout" 推荐写法 search('#"connection timeout"')
#'connection timeout' 单引号兼容写法 search('#"connection timeout"')
#“connection timeout” 中文引号兼容写法 search('#"connection timeout"')

# 是短语搜索操作符,不属于搜索内容。仅使用引号而不添加 # 不会启用短语搜索。引号必须成对出现,且短语不能为空;未闭合的 #"connection timeout#'connection timeout 以及空短语 #""#'' 不会作为有效查询执行。

短语搜索可以与字段筛选和组合操作符一起使用:

service:api #"connection timeout"
#"connection timeout" OR #"request timeout"
-#"health check"

其中,-#"health check" 表示排除包含该连续短语的数据,对应 DQL 条件 not search('#"health check"')。从标准模式切换到 DQL 模式时,兼容写法会统一转换为 #"..." 的 DQL 短语形式;切回标准模式时不会累积反斜杠转义字符。

停用词

部分频繁出现且对检索意义较小的词语不会参与全文索引。若搜索结果与预期不一致,可查看全文索引停用词清单

JSON 搜索

前提
  • 工作空间在 2022年6月23日 后创建;
  • 日志查看器中使用。

JSON 搜索用于查询日志 message 中的内嵌字段,message 必须是有效的 JSON 格式。查询格式为 @字段名:字段值;查询嵌套字段时,使用 . 连接各层级字段名。

@meta.service:api 为例:

组成部分 含义
@ JSON 字段前缀,查看器会将其识别为操作符
meta.service message 中的嵌套字段路径
: 字段和值的分隔符
api 需要匹配的字段值

例如,message 内容如下:

{
  "__namespace": "tracing",
  "cluster_name_k8s": "k8s-demo",
  "meta": {
    "service": "ruoyi-mysql-k8s",
    "name": "mysql.query"
  }
}

可使用以下条件查询:

@cluster_name_k8s:k8s-demo       # 精确匹配
@cluster_name_k8s:k?s*           # 通配符匹配
@meta.service:ruoyi-mysql-k8s    # 查询嵌套字段
@meta.service:ruoyi?mysql*       # 嵌套字段通配符匹配

其中,* 匹配零个或多个字符,? 匹配一个字符。此处的通配符仅用于字段筛选,不适用于普通文本搜索。

字段名包含 .

在 JSON 搜索中,. 默认表示嵌套字段层级。如果字段名本身包含 .,需要使用反斜杠 \ 转义。

场景 正确写法 说明
查询嵌套字段 log.tag @log.tag:error . 表示字段层级
查询字段名 user.id @user\.id:1001 \. 转义为字段名的一部分

不支持使用双引号包裹字段名,例如 @"user.id":1001

MD5 函数查询

如果敏感数据扫描规则对敏感内容进行 MD5 处理,原始值会被替换为不可逆的 32 位十六进制哈希值。需要使用原始值定位脱敏后的数据时,可以在查看器中使用 MD5 函数查询。

推荐使用函数形式:

字段名:md5(原始值)

例如,color 字段中的原始值 red 已转换为 MD5 哈希,可以输入:

color:md5(red)

系统会将其转换为以下 DQL 条件:

`color` = md5("red")

查看器会将 md5 和括号识别为函数语法。为兼容已有查询,旧写法 color:md5|red 仍然可用,并生成相同的 DQL 条件。函数参数不能为空;MD5 对大小写和空格敏感,请确保输入内容与加密前的原始值完全一致。

MD5 是单向散列算法,无法通过哈希值还原原始内容。更多说明可参考敏感数据扫描

DQL 查询

需要使用函数、表达式、聚合或复杂筛选条件时,可以点击搜索栏右侧的 DQL 按钮,进入 DQL 查询模式:

标准模式中的搜索条件会在切换模式时转换为 DQL。例如:

标准模式 DQL 条件
#"connection timeout" search('#"connection timeout"')
-#"health check" not search('#"health check"')
color:md5(red) `color` = md5("red")

系统会根据当前查看器自动带入对应的数据类型和数据源。例如,以下 DQL 查询用于检索最近一小时内 message 包含 connection timeout 的日志:

L("default")::logs:(message) {search(message, "connection timeout")} [1h]
  • L 表示日志数据;
  • "default" 表示日志索引;
  • logs 表示数据源;
  • [1h] 表示查询最近一小时的数据。

进入 DQL 模式后,需要使用完整的 DQL 语句。不同查看器对应的数据类型不同,不可在当前查看器中切换到其他数据类型。

日志查看器分析模式

在日志查看器中将高级查询与页面分析配置组合使用时,如果查询语句包含 BY 分组条件,页面会忽略语句中的 BY,以页面配置的分析维度为准,避免产生重复或冲突的分组条件。

CIDR 函数查询

CIDR 函数用于查询指定 IP 字段中属于某个网段的数据,执行的是网段范围匹配,而不是字符串匹配。

CIDR 由网络地址和前缀长度组成,例如 13.0.0.0/8。前缀长度越大,匹配的地址范围越小;IPv4 中 /32 仅匹配一个 IP 地址。

查询格式:

CIDR(@字段名, IP网段)

例如,查询 network.client.ip 字段中属于 13.0.0.0/8 网段的数据:

CIDR(@network.client.ip, 13.0.0.0/8)
可以匹配:
- 13.0.0.1
- 13.100.20.5
- 13.255.255.255

不会匹配:
- 12.255.255.255
- 14.0.0.1

如果需要精确匹配单个 IPv4 地址,可以使用 /32

CIDR(@network.client.ip, 13.10.20.30/32)

字段值为空、格式错误或不是有效的 IP 地址时,不会被匹配。

在 DQL 模式下,可以使用小写的 cidr() 函数,并用双引号包裹网段:

L::nginx:(*) {cidr(client_ip, "13.0.0.0/8")} [1h]

搜索历史

日志查看器的索引选择历史独立于搜索和筛选条件历史,并通过日志索引搜索框右侧的历史图标打开。

当前用户可在本地浏览器中查看最近使用的搜索和筛选条件,最多保留 100 条。点击历史条件即可在当前查看器中复用。

搜索历史合并记录

查看器作为平台内的通用工具,适用于多个功能,不同功能之间的搜索历史互通性存在一些差异:

  • RUM > Session/View/Resource/Action/Long Task/Error 六种查看器搜索历史互通;
  • 容器查看器与 Kubernetes 查看器搜索历史互通;
  • 资源目录查看器搜索历史互通;
  • 日志查看器与日志错误追踪查看器搜索历史互通;
  • 链路查看器、APM 错误追踪、Profiling 查看器搜索历史互通。

除上述情况外,其余查看器均独立保存各自的搜索历史。

更多阅读

文档评价

文档内容是否对您有帮助?