概述
Phase 1 Table 模式提供对 UModel 各类数据集的直接访问能力,允许用户通过统一的SPL语法直接查询底层数据,同时自动处理存储路由、字段映射等复杂操作。
核心特点
直接数据访问:直接访问数据集(DataSet),返回可执行的SPL查询。
完全控制权:用户可以完全控制查询逻辑和数据处理流程。
存储透明:自动处理不同存储类型的差异(MetricStore、LogStore等)。
字段映射:自动应用数据集定义中的字段映射规则。
适用场景
需要对查询逻辑进行精确控制。
不需要实体关系的高级抽象。
高性能要求的数据访问。
特殊的数据处理和分析需求。
应用案例
当前应用案例相关素材,请参考:umodel.zip
前提条件
Phase 1 Table 模式需要确保以下前提条件:
DataSet 已经创建。
DataSet 已经关联了任意一个存储。
存储中存在相关的数据。
MetricSet查询
MetricSet 查询支持两种数据源类型:指标数据(metrics) 和 标签值(labels),支持 PromQL 和 SPL 两种查询模式。
获取指标数据 (metrics)
功能说明
查询 MetricSet 中的指标数据,支持时间范围查询、即时查询和数据聚合。
SPL语法
.metric_set with(
domain='域名',
name='数据集名称',
source='metrics',
metric='指标名',
[其他可选参数]
)
参数说明
参数名 | 类型 | 必填 | 说明 | 示例值 |
domain | string | 是 | MetricSet所属域 | ‘apm’ |
name | string | 是 | MetricSet名称 | ‘apm.metric.apm.operation’ |
source | string | 是 | 固定为’metrics’ | ‘metrics’ |
metric | string | 是 | 要查询的指标名称 | ‘request_count’ |
query_type | string | 否 | 查询类型:‘range’(默认)或’instant’ | ‘range’ |
step | string | 否 | 时间步长,不填写时使用自动的步长 | ‘1m’, ‘5m’ |
aggregate | boolean | 否 | 是否聚合 | true/false |
aggregate_labels | array | 否 | 聚合维度列表 | [‘host’, ‘service’] |
query | string | 否 | 过滤条件,请参考 SPL 表达式语法 |
|
storage_domain | string | 否 | 指定存储域名 | ‘apm’ |
storage_name | string | 否 | 指定存储名称 | ‘metricstore-apm’ |
storage_kind | string | 否 | 指定存储类型 | ‘sls_metricstore’ |
示例
查询 api_request_duration 指标,不做聚合直接返回所有指标,Step使用Auto模式。
.metric_set with(
domain='rum',
name='rum.metric.api',
source='metrics',
metric='api_request_duration',
aggregate=false
)
查询 request_count 指标,并聚合 service 和 operation 维度,过滤条件为 service_id = “hwx28v3j7p@9949e3dbf79e9a082105c”,查询步长为1分钟。
.metric_set with(
domain='apm',
name='apm.metric.apm.operation',
source='metrics',
metric='request_count',
query_type='range',
step='1m',
aggregate=true,
aggregate_labels=['service', 'operation'],
query='service_id = "hwx28v3j7p@9949e3dbf79e9a082105c"'
)
查询 error_rate 指标,进行统一聚合,并调用异常检测 SPL 进一步分析。
.metric_set with(
domain='apm',
name='apm.metric.apm.service',
source='metrics',
metric='error_rate',
step='1m',
aggregate='true'
)
| extend slice_index = find_first_index(__ts__, x -> x > 1756904640000000000)
| extend len = cardinality(__ts__)
| extend ret = series_cnn_anomalies(__value__)
| extend anomalies_score_series = ret.anomalies_score_series, anomalies_type_series = ret.anomalies_type_series, error_msg = ret.error_msg
| project __labels__, __name__, __ts__, __value__, anomalies_score_series, anomalies_type_series, error_msg,len,slice_index
| extend __ts__ = slice(__ts__, slice_index, len - slice_index), __value__ = slice(__value__, slice_index, len - slice_index), anomalies_score_series = slice(anomalies_score_series, slice_index, len - slice_index), anomalies_type_series = slice(anomalies_type_series, slice_index, len - slice_index)
| extend anomay_cnt = CARDINALITY(FILTER(anomalies_score_series, x -> x > 0.5)), anomaly_sorce = array_sum(FILTER(anomalies_score_series, x -> x > 0.5))
| extend sort_score = anomaly_sorce / cast(anomay_cnt as double)
| sort sort_score desc , anomay_cnt desc
获取标签值 (labels)
功能说明
查询 MetricSet 中某个标签的所有可能值,用于动态构建查询条件或提供选择选项。
SPL语法
.metric_set with(
domain='域名',
name='数据集名称',
source='labels',
label='标签名',
[其他可选参数]
)
参数说明
参数名 | 类型 | 必填 | 说明 | 示例值 |
domain | string | 是 | MetricSet所属域 | ‘apm’ |
name | string | 是 | MetricSet名称 | ‘apm.metric.apm.operation’ |
source | string | 是 | 固定为’labels’ | ‘labels’ |
label | string | 否 | 要查询的标签名称,空字符串表示所有标签 | ‘rpc’ |
query | string | 否 | 过滤条件,请参考 SPL 表达式语法 | ‘service_id = “xxx”’ |
storage_domain | string | 否 | 指定存储域名 | ‘apm’ |
storage_kind | string | 否 | 指定存储类型 | ‘sls_metricstore’ |
storage_name | string | 否 | 指定存储名称 | ‘metricstore-apm’ |
示例
查询 rpc 标签的所有可能值,过滤条件为
service_id = “hwx28v3j7p@9949e3dbf79e9a082105c”
。
.metric_set with(
domain='apm',
name='apm.metric.apm.operation',
source='labels',
label='rpc',
query='service_id = "hwx28v3j7p@9949e3dbf79e9a082105c"'
)
LogSet查询
功能说明
查询LogSet中的日志数据,支持全文检索、字段过滤和结构化查询。
SPL语法
.log_set with(
domain='域名',
name='数据集名称',
[其他可选参数]
)
参数说明
参数名 | 类型 | 必填 | 说明 | 示例值 |
domain | string | 是 | LogSet所属域 | ‘apm’ |
name | string | 是 | LogSet名称 | ‘apm.log.app’ |
query | string | 否 | 过滤条件,请参考 SPL 表达式语法 | ‘level = “ERROR”’ |
storage_domain | string | 否 | 指定存储域名 | ‘apm’ |
storage_kind | string | 否 | 指定存储类型 | ‘sls_logstore’ |
storage_name | string | 否 | 指定存储名称 | ‘logstore-apm’ |
查询示例
查询 level = “ERROR” 和 service = “order-service” 的日志。
.log_set with(
domain='apm',
name='apm.log.app',
query='level = "ERROR" and service = "order-service"'
)
TraceSet查询
功能说明
查询 TraceSet 中的分布式追踪数据,支持链路分析、Span 检索和性能分析。
SPL语法
.trace_set with(
domain='域名',
name='数据集名称',
[其他可选参数]
)
参数说明
参数名 | 类型 | 必填 | 说明 | 示例值 |
domain | string | 是 | TraceSet所属域 | ‘apm’ |
name | string | 是 | TraceSet名称 | ‘apm.trace.span’ |
query | string | 否 | 过滤条件,请参考 SPL 表达式语法 | ‘service = “order-service” and duration > 1000’ |
storage_domain | string | 否 | 指定存储域名 | ‘apm’ |
storage_name | string | 否 | 指定存储名称 | ‘trace-apm’ |
storage_kind | string | 否 | 指定存储类型 | ‘sls_logstore’ |
查询示例
查询 service = “order-service” 和 duration > 1000 的追踪。
.trace_set with(
domain='apm',
name='apm.trace.span',
query='service = "order-service" and duration > 1000'
)
EventSet查询
功能说明
查询 EventSet 中的事件数据,支持告警事件、状态变更事件和业务事件的检索。
SPL语法
.event_set with(
domain='域名',
name='数据集名称',
[其他可选参数]
)
参数说明
参数名 | 类型 | 必填 | 说明 | 示例值 |
domain | string | 是 | EventSet所属域 | ‘apm’ |
name | string | 是 | EventSet名称 | ‘apm.event.alert’ |
query | string | 否 | 过滤条件,请参考 SPL 表达式语法 | ‘severity = “P1” and status = “firing”’ |
storage_domain | string | 否 | 指定存储域名 | ‘apm’ |
storage_name | string | 否 | 指定存储名称 | ‘event-common’ |
storage_kind | string | 否 | 指定存储类型 | ‘sls_logstore’ |
查询示例
查询 severity = “P1” 和 status = “firing” 的事件。
.event_set with(
domain='apm',
name='apm.event.alert',
query='severity = "P1" and status = "firing"'
)
ProfileSet查询
功能说明
查询 ProfileSet 中的性能剖析数据,支持 CPU 剖析、内存剖析和自定义性能数据分析。
SPL语法
.profile_set with(
domain='域名',
name='数据集名称',
[其他可选参数]
)
参数说明
参数名 | 类型 | 必填 | 说明 | 示例值 |
domain | string | 是 | ProfileSet所属域 | ‘apm’ |
name | string | 是 | ProfileSet名称 | ‘apm.profile.cpu’ |
query | string | 否 | 过滤条件,请参考 SPL 表达式语法 | ‘service_id = “xxx” and profile_type = “cpu”’ |
storage_domain | string | 否 | 指定存储域名 | ‘apm’ |
storage_name | string | 否 | 指定存储名称 | ‘profilestore-apm’ |
storage_kind | string | 否 | 指定存储类型 | ‘sls_logstore’ |
查询示例
查询 service_id = “order-service” 和 profile_type = “cpu” 的性能剖析数据。
.profile_set with(
domain='apm',
name='apm.profile.cpu',
query='service_id = "order-service" and profile_type = "cpu"'
)
通用特性
存储自动路由
Phase 1 Table 模式会自动根据 UModel 定义进行存储路由:
存储类型识别:自动识别 MetricStore、LogStore 等存储类型。
连接参数:自动获取 region、project 等连接参数。
查询转换:将 UModel 查询转换为对应存储的查询语法。
字段映射机制
系统会自动应用DataLink和StorageLink中定义的字段映射:
# 示例:字段映射配置fields_mapping:'service_id': 'acs_arms_service_id' # UModel字段 -> 存储字段'operation': 'rpc''region': 'acs_arms_region_id'
查询优化
索引利用:自动利用存储的索引特性优化查询。
并发控制:支持高并发查询请求。
结果缓存:缓存常用查询结果,提升响应速度。
错误处理
参数校验:严格校验输入参数的合法性。
存储异常:优雅处理存储连接和查询异常。
格式验证:验证返回数据格式的正确性。