通用数据指标查询系统
1. 性能指标-通用查询
由于性能数据指标,经常要做多维度多指标交叉查询,所以提供一个指标查询方式,该方式采用JSON语言方式进行描述如下方式所示。
示例
一个指标趋势图的示例:
{
"timePeriod": 180,
"endTime":"2020-02-19 23:10"
"datasource": "APP_BASE_DATA",
"metrics": [
"loadDuration",
"viewDuration",
"slowLoadPercent",
"throughput"
],
"dimensions": [
"timeStr"
],
"orderByExprs": "slowLoadPercent desc",
"havingExprs": "viewDuration>10",
"render":"csv",
"top": {
"metric": "loadDuration",
"direction": "desc",
"dimensions": [
"mobileAppId"
],
"limit": 5
}
}
属性说明
| property | description | 是否必选 |
|---|---|---|
| timePeriod | 开始时间-结束时间 间隔分钟数 | yes |
| endTime | 截止时间,格式YYYY-MM-DD hh:mm,不指定为当前时间 | no |
| datasource | 指标数据源 | yes |
| metrics | 指标项 | yes |
| filters | 过滤条件,只支持filter1 and filter2 | yes |
| dimensions | 分组维度 | no |
| orderByExprs | 排序表达式,必须为metric中的项 | no |
| havingExprs | 分组过滤表达式,意义参考sql having,字段必须为metric | no |
| render | 渲染器,支持list,csv,chart | no |
| top | 二次查询,意为,先基于top进行查询,然后将返回值in,可以理解为in 子查询,常用在报表的topN趋势图中 | no |
DSL->SQL
相当于转换为SQL的示例,非标准SQL模式:
SELECT
[dimensions],
[metric]
FROM
[datasource]
WHERE
[time]<=[endtime] AND [time]>[endTime-timePeriod] AND [filters] AND [top.dimensions] IN (topQuery)
GROUP BY [dimensions]
HAVING [havingExprs]
ORDER BY [orderByExprs]
渲染器
渲染模型,目前支持以下:
- list
- csv
- chart
- object
list
简化的json格式:
[
{
"requestCount": "879",
"uriId": "1",
"requestType": "2",
"trafficConsumption": "3",
"responseTime": "3172",
"networkErrorCount": "83",
"requestTypeName": "CDN-自身服务",
"slowCount": "170",
"httpErrorRate": "8.3",
"networkErrorRate": "9.44",
"networkSpeed": "1",
"uriName": "/user",
"throughput": "14.65",
"httpErrorCount": "73"
}
]
csv
csv 表格格式:
timeStr,视图加载毫秒,慢加载占比%,慢展现占比%,视图展现毫秒
2019-4-23 8:00:00,1525,0,0,2430
2019-4-26 8:00:00,987,0,0,2460
2019-4-28 8:00:00,978,0,0,2521
2019-4-30 8:00:00,286,0,0,286
2019-5-5 8:00:00,835,0,0,892
2019-5-6 8:00:00,517,0,0,685
2019-5-10 8:00:00,111,0,0,292
2019-5-13 8:00:00,80,0,0,216
2019-5-14 8:00:00,589,0,0,652
object
和list不同的模式为,会将指标的单位和格式化字符串输出:
[
{
"loadDuration": {
"format": "987",
"label": "视图加载",
"unit": "毫秒",
"value": 987
},
"slowLoadPercent": {
"format": "0",
"label": "慢加载占比",
"unit": "%",
"value": 0
},
"timeStr": 1556236800000,
"throughput": {
"format": "0",
"label": "慢展现占比",
"unit": "%",
"value": 0
},
"viewDuration": {
"format": "2460",
"label": "视图展现",
"unit": "毫秒",
"value": 2460
}
}
]
chart
hightchart 格式的数据样式:
{
"series": [
{
"data": [
{
"x": 1556236800000,
"y": 987,
"tooltip": {
"data": [
{
"unit": "毫秒",
"title": "视图加载",
"value": 987
},
{
"unit": "%",
"title": "慢加载占比",
"value": 0
},
{
"unit": "%",
"title": "慢展现占比",
"value": 0
},
{
"unit": "毫秒",
"title": "视图展现",
"value": 2460
}
],
"title": "04-26 08:00--04-27 08:00"
}
}
],
"name": "视图加载",
"type": "line",
"yAxis": 0,
"zIndex": 1
}
],
"yAxis": [
{
"i18n": "app.unit.ms",
"opposite": false,
"tickUnit": "毫秒"
},
{
"i18n": "app.unit.percent",
"opposite": true,
"tickUnit": "%"
}
]
}
查询示例
时间趋势图
{
"timePeriod": 43200,
"datasource": "APP_BASE_DATA",
"metrics": [
"loadDuration",
"viewDuration",
"slowLoadPercent",
"throughput"
],
"dimensions": [
"timeStr"
],
"havingExprs": "viewDuration>10"
}
TOP5 时间趋势图
{
"timePeriod": 43200,
"datasource": "APP_BASE_DATA",
"filters": [
{
"name": "regionId",
"value": [4811,4812,4813,4814,4815],
"operator": "IN"
}
],
"metrics": [
"loadDuration",
"viewDuration",
"slowLoadPercent"
],
"dimensions": ["timeStr"]
}
TOP10 按慢加载率降序平均耗时>10
{
"timePeriod": 43200,
"datasource": "APP_BASE_DATA",
"metrics": [
"loadDuration",
"viewDuration",
"slowLoadPercent",
"throughput"
],
"dimensions": [
"mobileAppId"
],
"orderByExprs": "slowLoadPercent desc",
"havingExprs": "viewDuration>10",
"limit":10
}
Endpoint
Method: POST
Type: RAW
URL: {{host}}/adhoc/query
Headers
| Key | Value |
|---|---|
| Accept | application/json, text/plain, / |
| Content-Type | application/json |
Body
{
"timePeriod": {{timePeriod}},
"endTime": {{endTime}},
"datasource": "APP_NETWORK_DATA",
"metrics": [
"responseTime",
"successCount"
],
"dimensions": [
"timeStr",
"hostId"
],
"filters": [
{
"name": "mobileAppId",
"value": [
{{mobileAppId}}
],
"operator": "IN"
},
{
"name": "hostId",
"value": [
0
],
"operator": "!="
}
],
"top": {
"metric": "throughput",
"direction": "desc",
"dimensions": [
"hostId"
],
"limit": 5
},
"limit": -1,
"render": "object"
}
2. 用户体验(启动、页面、操作)
数据源名称
APP_UX_DATA
维度
| 列名 | 扩展维度 | 含义 |
|---|---|---|
| timeStr | ||
| moduleType | 数据类型 | |
| mobileBusinessId | mobileBusinessName | 业务线 |
| mobileAppId | mobileAppName | 应用 |
| mobileAppVersionId | mobileAppVersionName | 应用版本 |
| manufacturerId | manufacturerName | 设备 |
| manufacturerModelId | manufacturerModelName | 设备型号 |
| osId | osName | 系统 |
| osVersionId | osVersionName | 系统版本 |
| channelId | channelName | 渠道 |
| countryId | countryName | 国家 |
| regionId | regionName | 省份 |
| cityId | cityName | 城市 |
| carrierId | carrierName | 运营商 |
| connectTypeId | connectTypeName | 接入方式 |
| launchType | 启动类型 | |
| actionType | 操作类型 | |
| actionId | actionName | 操作名称 |
| actionIdGetView | actionViewName | 所属页面 |
| actionViewId | 所属页面 | |
| viewType | 页面类型 | |
| viewId | viewName | 视图名称 |
| viewCompositeId | viewCompositeName | 页面名称 |
| countyId | countyName | 区县 |
指标
| 指标项 | 含义 |
|---|---|
| launchCount | 启动次数 |
| launchInitCount | 启动初始化次数 |
| launchCreateCount | 启动构建次数 |
| launchLoadViewCount | 启动页面加载次数 |
| launchSlowCount | 启动慢次数 |
| abnormalLaunchCount | 异常启动 |
| launchCrashRate | 启动崩溃率 |
| launchNetErrorRate | 启动网络错误率 |
| launchHttpErrorRate | 启动HTTP错误率 |
| normalLaunchCount | 正常启动次数 |
| launchCrashCount | 启动崩溃次数 |
| launchRequestCount | 请求次数 |
| launchRequestErrorCount | 启动错误次数 |
| launchRequestHttpErrorCount | 启动http错误次数 |
| launchRequestNetErrorCount | 启动网络错误次数 |
| launchSlowPercent | 慢首次启动占比 |
| launchStartupTime | 平均启动时间 |
| launchInitTime | 平均启动初始化时间 |
| launchCreateTime | 平均启动构建时间 |
| launchLoadViewTime | 平均启动页面加载时间 |
| launchStartupTime50 | 启动时间50分位值 |
| launchStartupTime75 | 启动时间75分位值 |
| launchStartupTime95 | 启动时间95分位值 |
| launchStartupTime99 | 启动时间99分位值 |
| viewCount | 页面次数 |
| normalViewCount | 正常页面次数 |
| viewSlowInteractiveCount | 页面慢可交互次数 |
| viewSlowAppearCount | 页面慢首屏次数 |
| viewInteractiveTime | 平均可交互时间 |
| viewAppearTime | 平均首屏时间 |
| viewInteractiveTimeSum | 可交互时间 |
| viewAppearTimeSum | 首屏时间 |
| slowInteractiveRate | 慢可交互占比 |
| slowAppearRate | 慢首屏占比 |
| viewInteractiveTime50 | 可交互时间50分位值 |
| viewInteractiveTime75 | 可交互时间75分位值 |
| viewInteractiveTime95 | 可交互时间95分位值 |
| viewInteractiveTime99 | 可交互时间99分位值 |
| viewAppearTime50 | 首屏时间50分位值 |
| viewAppearTime75 | 首屏时间75分位值 |
| viewAppearTime95 | 首屏时间95分位值 |
| viewAppearTime99 | 首屏时间99分位值 |
| viewInteractiveTimeHistogram | 页面可交互时间分布 |
| viewAppearTimeHistogram | 首屏时间分布 |
| actionCount | 操作次数 |
| actionFluencyCount | 操作流畅次数 |
| actionCrashCount | 操作崩溃次数 |
| actionFailureCount | 操作失败次数 |
| actionAnrCount | 操作卡顿次数 |
| actionSlowCount | 操作慢次数 |
| actionFluencyErrorCount | 操作流畅错误次数 |
| actionAnrErrorCount | 操作卡顿错误次数 |
| actionSlowErrorCount | 操作慢错误次数 |
| actionAvailableCount | 操作可用次数 |
| actionDurationTime | 平均操作时间 |
| actionBlockTime | 平均操作阻塞时间 |
| actionFluencyRate | 流畅操作占比 |
| actionSlowRate | 慢操作占比 |
| actionAnrRate | 卡顿占比 |
| actionCrashRate | 崩溃操作占比 |
| actionFailureRate | 失败操作占比 |
| actionaAvailability | 操作可用性 |
| actionDurationTimeHistogram | 操作耗时分布 |
| actionBlockTimeHistogram | 阻塞耗时分布 |
| actionDurationTime50 | 操作时间50分位值 |
| actionDurationTime75 | 操作时间75分位值 |
| actionDurationTime95 | 操作时间95分位值 |
| actionDurationTime99 | 操作时间99分位值 |
Endpoint
Method: POST
Type: RAW
URL: {{host}}/adhoc/query
Headers
| Key | Value |
|---|---|
| Accept | application/json, text/plain, / |
| Content-Type | application/json |
Body
{
"timePeriod": {{timePeriod}},
"endTime": {{endTime}},
"datasource": "APP_UX_DATA",
"metrics": [
"launchStartupTime"
],
"dimensions": [
],
"filters": [
{
"name": "countryId",
"value": [
48
],
"groupType": "region"
},
{
"name": "mobileAppId",
"value": [
{{mobileAppId}}
],
"operator": "IN"
},
{
"name": "launchType",
"value": [
1
],
"operator": "IN"
},
{
"name": "moduleType",
"value": [
1
],
"operator": "="
}
],
"render": "list",
"orderByExprs": "launchStartupTime desc"
}
3. 网络请求-性能指标
数据源名称
APP_NETWORK_DATA
说明:扩展维度不可进行过滤和查询。
维度
| 列名 | 扩展维度 | 含义 |
|---|---|---|
| timeStr | ||
| mobileAppId | mobileAppName | 应用 |
| mobileAppVersionId | mobileAppVersionName | 应用版本 |
| mobileBusinessId | mobileBusinessName | 业务线 |
| manufacturerId | manufacturerName | 设备 |
| manufacturerModelId | manufacturerModelName | 设备型号 |
| osId | osName | 系统 |
| osVersionId | osVersionName | 系统版本 |
| countryId | countryName | 国家 |
| regionId | regionName | 省份 |
| cityId | cityName | 城市 |
| carrierId | carrierName | 运营商 |
| connectTypeId | connectTypeName | 接入方式 |
| hostId | hostName | 请求域名 |
| uriId | uriName | 请求地址 |
| errorType | errorTypeName | 错误类型 |
| errorCode | errorCodeName | 错误码 |
| cdnId | cdnName | CDN厂商 |
| hostIp | 服务端IP | |
| hostCountryId | hostCountryName | 服务端国家 |
| hostRegionId | hostRegionName | 服务端省份 |
| hostCityId | hostCityName | 服务端城市 |
| hostCarrierId | hostCarrierName | 服务端运营商 |
| bytesType | bytesTypeLabel | 包大小 |
| protocolType | 协议类型 | |
| channelId | channelName | 渠道 |
| hostIpType | hostIpTypeName | 服务端IP类型 |
| requestType | requestTypeName | 服务类型 |
| launchType | 启动类型 | |
| countyId | countyName | 区县 |
| hostCountyId | hostCountyName | 区县 |
指标
| 指标项 | 含义 |
|---|---|
| requestCount | 请求次数 |
| successCount | 成功请求次数 |
| passCount | 正常请求次数 |
| slowCount | 慢请求次数 |
| slowRequestRate | 慢请求占比 |
| errorCount | 错误次数 |
| httpErrorCount | HTTP错误次数 |
| networkErrorCount | 网络错误次数 |
| dnsCount | DNS次数 |
| tcpCount | TCP次数 |
| sslCount | SSL次数 |
| responseTimeTotal | 总响应时间 |
| networkTimeTotal | 总网络时间 |
| responseTime | 平均响应时间 |
| dnsTime | 平均DNS时间 |
| connectTime | 平均TCP时间 |
| sslTime | 平均SSL时间 |
| firstPacketTime | 平均首包时间 |
| remainPacketTime | 平均剩余包时间 |
| localQueueTime | 平均客户端时间 |
| networkTime | 平均网络时间 |
| throughput | 吞吐率 |
| networkSpeed | 传输速率 |
| networkTrafficSpeed | 网络传输速率 |
| totalTrafficConsumption | 总流量消耗 |
| trafficConsumption | 平均传输数据量 |
| bytesSend | 上行流量消耗 |
| bytesReceived | 下行流量消耗 |
| httpErrorRate | HTTP错误率 |
| networkErrorRate | 网络错误率 |
| requestErrorRate | 请求错误率 |
| pingSuccessCount | ping成功次数 |
| pingTime | 网络延时 |
| packetLossRate | 丢包率 |
| reuseRate | 复用率 |
| availability | 可用性 |
Endpoint
Method: POST
Type: RAW
URL: {{host}}/adhoc/query
Headers
| Key | Value | Description |
|---|---|---|
| Accept | application/json, text/plain, / | |
| Content-Type | application/json |
Body
{
"timePeriod": {{timePeriod}},
"endTime": {{endTime}},
"datasource": "APP_NETWORK_DATA",
"metrics": [
"responseTime",
"successCount"
],
"dimensions": [
"timeStr",
"hostId"
],
"filters": [
{
"name": "mobileAppId",
"value": [
{{mobileAppId}}
],
"operator": "IN"
},
{
"name": "hostId",
"value": [
0
],
"operator": "!="
}
],
"top": {
"metric": "throughput",
"direction": "desc",
"dimensions": [
"hostId"
],
"limit": 5
},
"limit": -1,
"render": "list"
}