服务数据源定义及 DQL 查询¶
服务性能数据源定义¶
TM
索引空间中保存了服务列表及性能指标相关数据,页面 应用性能监测 - 性能指标 上的数据即主要查询于该索引空间,TM` 对每个服务按照分钟、小时和天三个不同粒度对服务指标数据进行了聚合,以提升数据的查询效率。
比如查询 2024-03-19 15:00:00
~ 2024-03-19 15:15:00
15分钟内的所有服务指标数据,可以使用 DQL:
将返回类似如下的结果:
查询结果示例(单击以展开)
[
{
"time": 1710835681000,
"time_us": 1710835681000000,
"__docid": "T_cnskg71jdosvib6m44s0",
"__source": "service_list_1m",
"source": "service_list_1m",
"__namespace": "tracing",
"r_env": "demo",
"r_error_count": 0,
"r_max_duration": 2293857,
"r_psketch": "Av1KgVq/UvA/AAAAAAAAAAAJAbgL",
"r_request_count": 1,
"r_resp_time": 2293857,
"r_service": "go-profiling-demo-1",
"r_service_sub": "go-profiling-demo-1:demo:v0.8.888",
"r_type": "custom",
"r_version": "v0.8.888",
"create_time": 1710835740447,
"date": 1710835681000,
"date_ns": 0
},
{
"time": 1710835201000,
"time_us": 1710835201000000,
"__docid": "T_cnskcf9jdosvib6jl4kg",
"__source": "service_list_1m",
"source": "service_list_1m",
"__namespace": "tracing",
"r_env": "demo",
"r_error_count": 0,
"r_max_duration": 2370648,
"r_psketch": "Av1KgVq/UvA/AAAAAAAAAAAJAboL",
"r_request_count": 1,
"r_resp_time": 2370648,
"r_service": "go-profiling-demo-1",
"r_service_sub": "go-profiling-demo-1:demo:v0.8.888",
"r_type": "custom",
"r_version": "v0.8.888",
"create_time": 1710835261477,
"date": 1710835201000,
"date_ns": 0
}
]
其中主要的字段说明如下:
字段 | 类型 | 说明 |
---|---|---|
source | string | 数据聚合的粒度,分为每分钟(source="service_list_1m"),每小时(source="service_list_1h") 和每天(source="service_list_1d") |
r_env | string | 服务部署的环境 |
r_error_count | int | 服务出错次数 |
r_max_duration | int | 时间粒度内的最大响应时间,单位:微秒 |
r_request_count | int | 请求次数 |
r_resp_time | int | 时间粒度内汇总的响应时间总和 |
r_service | string | 服务名称 |
r_service_sub | string | <服务名称>:<部署环境>:<服务版本> |
r_type | string | 服务类型,http/web/db/gateway... |
r_version | string | 服务版本 |
date | int | 毫秒时间戳,对应每分钟的零秒(hh00,当source="service_list_1m"时),每小时的零分(hh:00, 当source="service_list_1h"时),每天的零点(00:00:00, 当source="service_list_1d"时) |
同理,查询 2024-03-19 15:00:00
~ 2024-03-19 17:00:00
两个小时的数据,可以使用 DQL:
查询 2024-03-19 00:00:00
~ 2024-03-21 00:00:00
两天的数据,可以使用 DQL:
不同时间粒度可以组合使用,比如查询 2024-03-19 15:00:00
~ 2024-03-19 17:30:00
两个半小时内的数据,可以使用 DQL:
TM::`*`:(){ (source="service_list_1h" and date >= 1710831600000 and date < 1710838800000) or (source="service_list_1m" and date >= 1710838800000 and date <= 1710840600000) }
Note
当然这里也可以仅使用分钟纬度 source="service_list_1m" 来查询类似 2024-03-19 15:00:00
~ 2024-03-19 17:30:00
整个跨小时或跨天的时间范围内数据,但查询效率会大大降低,返回的数据量也会成倍增长,所以非常不建议这样查询。
对查询结果再进行二次加工便可以计算出相关服务级别的指标,例如:
total_count = SUM(r_request_count)
error_count = SUM(r_error_count)
error_rate = SUM(r_error_count) / SUM(r_request_count)
max_duration = MAX(r_max_duration)
sum_resp_time = SUM(r_resp_time)
avg_per_second = SUM(r_request_count) / <查询的时间范围>
avg_resp_time = SUM(r_resp_time) / SUM(r_request_count)
p50: 生成数组 [(r_resp_time1/r_request_count1)...{重复r_request_count1次}, (r_resp_time2/r_request_count2)...{重复r_request_count2次}, (r_resp_time3/r_request_count3)...{重复r_request_count3次}, ...],数组排序后取索引 SUM(r_request_count)*0.5
例如查询各服务一段时间范围内的 QPS(每秒请求数) 可以使用:
TM::`*`:(r_service, sum(r_request_count) / (1737099000000 - 1737093600000) * 1000 as QPS){ (source="service_list_1h" and date >= 1737093600000 and date < 1737097200000) or (source="service_list_1m" and date >= 1737097200000 and date <= 1737099000000) } by r_service
服务拓扑数据源定义¶
TSM
索引空间中主要保存了服务之间的调用拓扑关系数据,以分钟为纬度进行了数据的预聚合,比如查询 2024-03-19 15:00:00
~ 2024-03-19 15:15:00
15分钟范围内的所有服务调用关系,可以使用 DQL:
返回类似如下的查询结果:
查询结果示例(单击以展开)
[
{
"time": 1710835700438,
"time_us": 1710835700438064,
"__docid": "6340252d-331c-6e1dd9338-0ed04e818c4d",
"__source": "relationship",
"source_service": "go-profiling-demo-1",
"source_wsuuid": "wksp_8d351d83bdf14b8b8270ab75fe29a990",
"source_env": "demo",
"source_project": "",
"source_version": "v0.8.888",
"source_type": "custom",
"source_organization": "",
"source_status": "ok",
"source_start": 1710835700059433,
"source_duration": 220210272,
"target_service": "go-profiling-demo-2",
"target_wsuuid": "wksp_8d351d83bdf14b8b8270ab75fe29a990",
"target_env": "demo",
"target_project": "",
"target_version": "v0.8.888",
"target_type": "custom",
"target_organization": "",
"target_status": "ok",
"target_start": 1710835700438064,
"target_duration": 886040,
"count": 96,
"unique_id": "XTzHH-jScNjXgBSXNIdFcSOVpHwWKyAZroh71ttyPnXK9nl3jW0re0hlKOeHj6PYgo-profiling-demo-1go-profiling-demo-2",
"unique_id_env_version": "Zp-9KKvEb4m9aU0OeUMon8MiH2isxqXU742YFlVtokgL2Vy73NwtykkG3vA3X0z1go-profiling-demo-1go-profiling-demo-2",
"error_count": 0
},
{
"time": 1710835243699,
"time_us": 1710835243699376,
"__docid": "f4c7de67-ca1b-6e17fd78e-e8bcb4d1d64d",
"__source": "relationship",
"source_service": "go-profiling-demo-1",
"source_wsuuid": "wksp_8d351d83bdf14b8b8270ab75fe29a990",
"source_env": "demo",
"source_project": "",
"source_version": "v0.8.888",
"source_type": "custom",
"source_organization": "",
"source_status": "ok",
"source_start": 1710835243379392,
"source_duration": 227582208,
"target_service": "go-profiling-demo-2",
"target_wsuuid": "wksp_8d351d83bdf14b8b8270ab75fe29a990",
"target_env": "demo",
"target_project": "",
"target_version": "v0.8.888",
"target_type": "custom",
"target_organization": "",
"target_status": "ok",
"target_start": 1710835243699376,
"target_duration": 856217,
"count": 96,
"unique_id": "XTzHH-jScNjXgBSXNIdFcSOVpHwWKyAZroh71ttyPnXK9nl3jW0re0hlKOeHj6PYgo-profiling-demo-1go-profiling-demo-2",
"unique_id_env_version": "Zp-9KKvEb4m9aU0OeUMon8MiH2isxqXU742YFlVtokgL2Vy73NwtykkG3vA3X0z1go-profiling-demo-1go-profiling-demo-2",
"error_count": 0
}
]
主要字段说明如下:
字段 | 类型 | 说明 |
---|---|---|
time | int | 毫秒时间戳,服务调用产生的时间 |
time_us | int | 服务调用产生的时间,微秒级别 |
source_service | string | 主调服务名称 |
source_wsuuid | string | 主调服务上报空间ID |
source_env | string | 主调服务部署环境 |
source_project | string | 主调服务项目名称 |
source_version | string | 主调服务版本 |
source_type | string | 主调服务类型 |
source_organization | string | 主调服务上报空间所在的组织 |
source_status | string | 主调服务状态,ok/error |
source_start | int | 主调服务span开始时间,微秒时间戳 |
source_duration | int | 每分钟内主调服务span持续时间汇总,单位:微秒 |
target_service | string | 被调服务名称 |
target_wsuuid | string | 被调服务上报空间ID |
target_env | string | 被调服务部署环境 |
target_project | string | 被调服务项目名称 |
target_version | string | 被调服务版本 |
target_type | string | 被调服务类型 |
target_organization | string | 被调服务上报空间所在组织 |
target_status | string | 被调服务状态,ok/error |
target_start | int | 被调服务span开始时间(服务调用产生的时间),微秒时间戳 |
target_duration | int | 每分钟粒度内被调服务span持续时间汇总,单位:微秒 |
count | int | 每分钟粒度内调用次数 |
unique_id | string | 仅由主调服务名称和被调服务名称生成的唯一ID |
unique_id_env_version | int | 区分主调服务、环境、版本和被调服务、环境、版本生成的唯一ID |
error_count | int | 每分钟粒度内调用失败次数 |
对于服务调用关系以及服务调用级别的指标,比如可以使用如下 DQL 来查询服务之间的调用关系: