使用图表查询(Metric查询)

使用图表查询(Metric查询)

添加监控图表,会弹出查询对话框。使用 Paasinsight的 Metric 查询,就可以得到您所需要的图表。
目前 Paasinsight支持两种模式的指标查询,分别为普通模式与专家模式。普通模式的功能较为简单,并且可以在选择指标时即时查看指标含义。专家模式功能更为强大,操作更为简练

两种模式
普通模式:
这里写图片描述

专家模式:
这里写图片描述


尽管Paasinsight两种指标查询模式的界面与功能不完全相同,但基本逻辑是一致的,其可以提供一种类 SQL 的 Metric 查询方式。在介绍具体的指标查询操作之前,首先介绍下 Metric 的查询逻辑与语法。
查询语法
Aggregation: MetricName {FromTag} by {TagKey}

在介绍语法前,我们先通过一组样本来解释 Metric 查询的语法。

SeriesMetricNameTagValue:hostTagValue:address
Asystem.cpu.idleYeLiangChenWuHan
Bsystem.cpu.idleZhaoRiTianWuHan
Csystem.cpu.idleLongAoTianBeiJing

详细数据

Series00:0001:0002:0003:0004:0005:00
A0.30.50.10.20.80.1
B0.80.30.70.80.90.3
C0.60.20.40.60.10.1
Aggregation 和 FromTag
  • Aggregation:聚合算子。指 Metric 查询范围 FromTag 所查询到的多条 series 通过 avg、max、min、sum 哪种方式聚合。
  • FromTag:查询范围。指 Metric 所需聚合的 series 的查询条件

如:

max: system.cpu.idle {host:YeLiangChen, host:ZhaoRiTian}

所得的结果是:

Series00:0001:0002:0003:0004:0005:00
A0.30.50.10.20.80.1
B0.80.30.70.80.90.3
Output0.80.50.70.80.90.3

同样,上述查询也可以简化成

max: system.cpu.idle {address:WuHan }

这就是标签管理在 Paasinsight的重要性啦。该部分留到标签的章节,做详细的介绍


by 其实就是 group_by

Paasinsight还支持类似 SQL 的 group_by 查询语法。这个在查看:

  • 多个磁盘分区的容量
  • Docker 中不同 Container 的性能消耗

都是非常有用的。还是以上诉例子举例,如果我们想要看每个 host 的 CPU 空闲率:

avg: system.cpu.idle {} by {host}

此时,第一个 {FromTag} 缺省代表从所有 Metrics 中查询数据。如图所示,得到以下图表:
这里写图片描述

在实际的测试环境中,由于我们有 4 台测试主机,所以会得到如下的曲线。并且,当鼠标悬停至曲线时,下方的悬停窗口会分别显示 4 台主机的 system.cpu.idle。
这里写图片描述

多条件查询

FromTag 可以承接多个条件,如上文提到的:

max: system.cpu.idle {host:YeLiangChen, host:ZhaoRiTian}

查询到是两个 Host 的聚合结果。那么,如果是以下查询呢:

max: system.cpu.idle {host: LongAoTian, address:WuHan }

此时,查询到结果为 NULL。因为,Metric 查询遵循以下原则:

  • 同一 Tag Key,Metric 查询求并集;
  • 不同 Tag Key,Metric 查询求交集。

也就是说,上述查询分别代表

  • 我想查询 host 为 YeLiangChen 和 host:ZhaoRiTian 的聚合结果
  • 我想查询 host 为 LongAoTian 且 Address 为 Wuhan的聚合结果

自然,根据表格,我们发现这样的 Host 是不存在的,故而结果为 NULL
我们之所以这么设计,是因为此类思考更符合人的思维习惯

  • 当人们选择多个 host 时,自然而然想到的是这些 host 的求和结果,即:同一 Tag Key 求并集;
  • 当人们选择某个 host,又再次选择另一个 Tag 时,想到的是在这个 host 下满足这些 tag 的结果,即:不同 Tag Key 求交集
    注意:自定义的标签等价于 host 标签,在进行聚合运算时,host 和不同自定义标签之间均取并集
参数使用

这里写图片描述

什么意思呢?我们先来温习下 Metric 查询的语法

Aggregation: MetricName {FromTag} by {TagKey}

就是将 {FromTag} 设置为一个参数,可以让用户在界面做任意的更改

我们以 System 总览 • 仪表盘,举例来说:
这里写图片描述

我们需要一张仪表盘,能够:

  • 可以查看所有主机的总体性能
  • 又能够随时定位到单台主机的性能

此时,就需要使用参数来达到要求。

想实现这样的功能,我们需要在 {FromTag} 选择 scope 标签! (注意 平台仪表盘和数据仪表盘 已自动添加,仅在自定义仪表盘需要手动添加)

这里写图片描述

这样 这个scope标签就会动态替换成外面的scope对应的值
这里写图片描述

是不是有点像 C 语言中宏的概念。也就是说,参数是一个可以根据下拉框随时被替换的字段,来满足动态查询

<think>我们正在讨论的是Perfetto Trace中的SQL查询功能。Perfetto是一个用于性能检测和跟踪分析的工具,它支持使用SQL语句来查询跟踪数据。根据引用内容,我们知道Perfetto可以通过命令行捕获trace数据,并且trace数据会被保存为.pb文件。现在用户想知道如何使用Perfetto中的SQL查询功能。 在Perfetto中,SQL查询功能是通过Trace Processor(跟踪处理器)来实现的。Trace Processor是一个将跟踪数据加载到内存中的SQLite数据库中的工具,它允许用户使用SQL语句查询跟踪数据。 使用SQL查询的基本步骤: 1. 将trace数据加载到Trace Processor中。 2. 执行SQL查询。 具体方法: - 可以通过Perfetto的Web UI(https://ui.perfetto.dev)来使用SQL查询。 - 也可以使用Trace Processor Shell(一个命令行工具)来执行SQL查询。 下面分别介绍这两种方法: ### 方法1:通过Perfetto Web UI使用SQL查询 1. 打开Perfetto Web UI:https://ui.perfetto.dev 2. 点击左上角的"Open trace file"按钮,上传你的trace文件(例如:trace.pb)。 3. 加载完成后,在界面的右下角有一个“Query (SQL)”的输入框,在这里可以输入SQL查询语句。 4. 输入查询语句后,点击“Run”按钮,查询结果会显示在下方。 例如,查询所有的进程信息: ```sql SELECT * FROM process; ``` ### 方法2:使用Trace Processor Shell(命令行工具) 1. 首先需要下载Trace Processor Shell(trace_processor_shell)。可以从Perfetto的GitHub发布页面下载:https://github.com/google/perfetto/releases 2. 将下载的trace_processor_shell(根据你的操作系统选择对应的版本)放在一个方便的位置。 3. 打开终端,运行trace_processor_shell,并加载trace文件: ```bash ./trace_processor_shell --pre-migrate /path/to/trace.pb ``` 注意:`--pre-migrate`参数是为了兼容旧版本的trace,如果是新版本的trace可以不加。 4. 加载完成后,会进入一个交互式的命令行界面,这时可以直接输入SQL语句进行查询。 例如: ```sql SELECT name, pid FROM process; ``` ### 常用的SQL查询示例 Perfetto的Trace Processor将跟踪数据组织成多个表,例如: - `process`表:包含进程信息。 - `thread`表:包含线程信息。 - `sched`表:包含调度信息。 - `slice`表:包含在特定线程上发生的切片(事件)信息。 - `counter`表:包含计数器信息(如CPU频率变化)。 以下是一些常用查询: 1. 查询所有进程: ```sql SELECT * FROM process; ``` 2. 查询所有线程及其所属进程: ```sql SELECT thread.name, thread.tid, process.name, process.pid FROM thread LEFT JOIN process USING(upid); ``` 3. 查询sched调度事件: ```sql SELECT ts, cpu, dur, end_state, priority, thread.name FROM sched LEFT JOIN thread USING(utid) ORDER BY ts; ``` 4. 查询指定进程的切片事件(例如进程名为com.android.systemui): ```sql SELECT slice.name, slice.ts, slice.dur, thread.tid FROM slice JOIN thread_track ON slice.track_id = thread_track.id JOIN thread USING(utid) JOIN process USING(upid) WHERE process.name = 'com.android.systemui'; ``` 注意:具体的表结构和字段名称可以参考Perfetto的官方文档:https://perfetto.dev/docs/analysis/sql-tables ### 注意事项 - 使用SQL查询前,确保你的trace文件已经正确加载。 - 在Perfetto Web UI中,还可以通过界面上的时间线视图来帮助构建查询(例如选择时间范围)。 - 如果查询的数据量很大,注意性能问题。 §§相关问题§§ 1. Perfetto Trace Processor支持哪些SQL函数和语法? 2. 如何优化Perfetto中的SQL查询性能? 3. 在Perfetto中,如何查询特定时间范围内的调度事件? 4. Perfetto的SQL查询结果可以导出吗?如果可以,如何导出? </think>### Perfetto Trace 中 SQL 查询功能的使用方法 Perfetto Trace 的 SQL 查询功能通过 **Trace Processor** 组件实现,允许用户使用 SQL 语法分析二进制 trace 数据。以下是具体使用方法: #### 1. **加载 Trace 文件** 启动 Trace Processor 并加载 trace 文件(需先通过 `adb pull` 导出 *.pb/*.perfetto-trace 文件到本地[^3][^4]): ```bash ./trace_processor_shell --pre-migrate /path/to/trace.pb ``` - `--pre-migrate`:兼容旧版 trace 格式 - 加载成功后进入交互式 SQL 终端 #### 2. **基础查询语法** Trace Processor 将 trace 数据映射为 SQLite 虚拟表: ```sql SELECT column1, column2 FROM table_name WHERE condition; ``` 常用表: - `process`:进程信息(PID、名称) - `thread`:线程信息(TID、名称) - `slice`:时间片(函数调用/事件) - `sched`:CPU 调度信息 - `counter`:计数器(CPU 频率、内存等) #### 3. **实用查询示例** **a. 查询所有进程:** ```sql SELECT pid, name FROM process; ``` **b. 分析指定线程的 CPU 调度延迟:** ```sql SELECT ts, dur, cpu, tid FROM sched WHERE tid = 1234 ORDER BY ts; ``` **c. 统计函数耗时(单位:纳秒):** ```sql SELECT name, SUM(dur) AS total_time FROM slice WHERE category = 'gfx' GROUP BY name ORDER BY total_time DESC; ``` #### 4. **高级功能** - **时间单位转换**: 使用 `CAST(dur/1e6 AS INT)` 将纳秒转为毫秒 - **多表关联**: ```sql SELECT sched.ts, thread.name FROM sched JOIN thread USING(utid); ``` - **内置函数**: `RUN_METRIC('android/android_cpu.sql')` 调用预置分析脚本 #### 5. **交互式环境操作** - `.help`:查看所有命令 - `.mode csv`:输出 CSV 格式 - `.timer on`:显示查询耗时 - `Ctrl+D`:退出 Shell #### 6. **Web UI 集成** 访问 [Perfetto UI](https://ui.perfetto.dev): 1. 上传 trace 文件 2. 右下角打开 **Query (SQL)** 面板 3. 输入 SQL 并执行,结果以表格/图表展示 > **注意**:查询前需确认 trace 文件包含所需事件(如调度事件需启用 `sched/sched_switch`)[^2] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值