跨主题关联分析

最近更新时间:2025-07-01 16:21:52

我的收藏

操作场景

日志数据分散在多个主题中时,可使用 SQL 跨主题进行统计分析,例如以下场景:
微服务架构下,每个服务的日志存储在不同主题中,需按照请求 ID 汇总查询各个服务的耗时。
日志分为报错日志和业务访问日志,存储在不同主题中,需根据报错日志中的用户 ID、订单 ID 等信息在访问日志中查询关联的访问记录。

前提条件

日志接入标准存储,低频存储不支持使用 SQL 进行统计分析。
最大支持同时关联分析5个日志主题。
注意:
该功能目前以白名单方式供部分用户使用。如需开通白名单,请 联系我们

操作步骤

跨主题关联分析通过 SQL 语句实现,在日志检索分析、仪表盘、定时 SQL、告警策略中均可使用。以日志检索分析为例,操作步骤参考 检索分析语法规则操作步骤

语法规则

在 SQL 中,每个日志主题相当于一个数据库表,表名为主题 ID,可使用 JOINUNIONINTERSECTEXCEPT 等语法进行关联分析。
主题 ID 中包含特殊字符-,在 SQL 中需使用双引号包裹,例如"0c037c7c-dbf0-4646-bb8b-9e414e5928f7"
查询当前主题中的数据时,可使用 log 代表当前主题,也可省略。例如* | select * from log* | select *

示例

场景描述

某业务系统包含两个服务,订单管理服务的日志存储在主题 A 中,支付服务的日志存储在主题 B 中,需根据请求 ID 查询各个服务的耗时。
日志主题 A 的 ID 为"0c037c7c-dbf0-4646-bb8b-9e414e5928f7",日志数据如下。
{
"RequestId": "4f7g2k9m",
"timeCost": 856,
"timestamp": "2024-01-31T19:44:08+08:00",
},
{
"RequestId": "6m4v1ztf",
"timeCost": 1452,
"timestamp": "2024-01-31T19:45:08+08:00",
}
日志主题 B 的 ID 为"8c05119c-c3e8-4e8f-95b7-81eab4702b0a",日志数据如下。
{
"reqid": "4f7g2k9m",
"costms": 247,
"timestamp": "2024-01-31T19:44:08+08:00",
},
{
"reqid": "6m4v1ztf",
"costms": 365,
"timestamp": "2024-01-31T19:45:08+08:00",
}

查询语句

在订单管理服务日志主题 A 中执行该查询语句。
* |
SELECT
order_service.RequestId,
order_service.timeCost AS "订单管理服务耗时",
pay_service.costms AS "支付服务耗时"
FROM
log AS order_service
JOIN "8c05119c-c3e8-4e8f-95b7-81eab4702b0a" AS pay_service
ON order_service.RequestId = pay_service.reqid
LIMIT 100

查询结果

RequestId
订单管理服务耗时
支付服务耗时
4f7g2k9m
856
247
6m4v1ztf
1452
365