跳转至

搜索


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

选择搜索方式

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

直接输入文本时,系统执行文本搜索;使用 字段名:字段值 时,系统执行字段筛选。例如,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”。
停用词

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

JSON 搜索

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

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

例如,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

系统会计算 red 的 MD5 值,并与 color 字段中保存的哈希值进行匹配。MD5 对大小写和空格敏感,请确保输入内容与加密前的原始值完全一致。

MD5 加密不可逆,无法通过哈希值还原原始内容。更多说明可参考敏感数据扫描

DQL 查询

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

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

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

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

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 查看器搜索历史互通。

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

更多阅读

文档评价

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