应用案例
当前应用案例相关素材,请参考:umodel.zip
1. Object模式概述
Object 模式提供面向实体(EntitySet)的抽象访问方式,通过统一的SPL接口调用实体的方法来获取与实体相关的各类观测数据或元信息。相比于直接访问数据集(Phase 1 Table模式),Object模式具备以下特点:
面向对象:以
EntitySet
为中心组织能力,语义清晰、贴近业务对象。动态能力:运行时可发现实体支持的方法并进行调用(类似“反射”)。
自动映射:自动应用DataLink/StorageLink字段映射与过滤条件。
关系语义:天然支持实体与实体之间的关系数据访问。
基本语法:
.entity_set with(domain='域名', name='实体名称', [ids|query|其他参数])
| entity-call 方法名(参数...)
通用参数:
参数名 | 类型 | 必填 | 说明 | 示例值 |
domain | string | 是 | EntitySet 所属域 | ‘apm’ |
name | string | 是 | EntitySet 名称 | ‘apm.service’ |
ids | array | 否 | 实体ID列表 | [‘id1’,‘id2’] |
query | string | 否 | 过滤条件,请参考 SPL 表达式语法 | ‘service_id = “xxx”’ |
适用场景:
需要基于业务实体(如服务、接口、主机)进行观测与分析。
需要自动处理字段映射与过滤条件,降低调用复杂度。
需要在不同实体/关系上复用统一的“方法”语义。
与Table模式对比:
Table模式:直接访问
MetricSet/LogSet/...
,控制更细,但需感知底层细节。Object模式:以实体为中心,方法即能力,具备更高层的抽象与可组合性。
2. 动态能力发现(运行时方法反射)
Object 模式的核心是“动态能力发现”。通过内置方法__list_method__
,运行时枚举当前EntitySet
支持的全部方法及其参数与返回结构描述,再按需进行自适应调用。
2.1 列出可用方法
.entity_set with(domain='apm', name='apm.service')
| entity-call __list_method__()
返回字段:
字段 | 说明 | 示例值 |
name | 方法内部名称(用于调用) |
|
display_name | 方法展示名称 |
|
description | 方法功能描述 |
|
params | 参数Schema(JSON Array) |
|
returns | 返回值Schema(JSON Array) |
|
方法列表示例(节选):
name | display_name | description |
list_method | List Available Methods | 获取当前EntitySet可用方法 |
inspect | Configuration Inspector | 校验UModel配置完整性与合理性 |
list_data_set | List DataSets | 列出当前实体关联的数据集 |
list_related_entity_set | List Related EntitySets | 列出与当前实体相关的其他实体 |
get_golden_metrics | Get Golden Metrics | 获取实体的黄金指标数据 |
get_metric | Get Metric | 获取关联MetricSet的指标数据 |
get_label_values | Get Label Values | 获取关联MetricSet的标签值 |
get_log | Get Log | 获取关联LogSet的日志数据 |
get_profile | Get Profile | 获取关联ProfileSet的性能剖析数据 |
说明:__list_method__
的返回会根据实体实际关联的数据集与关系而变化,因而具备“自适应发现”能力。
2.2 读取方法元信息并自适应调用
典型流程:
发现能力。
.entity_set with(domain='apm', name='apm.service')
| entity-call __list_method__()
过滤并选择目标方法(例如:
get_golden_metrics
)。自适应组装参数并调用。
.entity_set with(domain='apm', name='apm.service', query='service_id = "order-service"')
| entity-call get_golden_metrics('range', '1m')
另一示例:自适应访问实体关联的数据集清单并进行方法选择:
.entity_set with(domain='apm', name='apm.service')
| entity-call list_data_set(['metric_set'], true)
根据返回的data_set_id
与fields_mapping
,上层可以自动拼装get_metric
的参数与查询过滤条件。
3. 能力发现与调用的标准流程
锁定实体上下文:
domain
、name
,可选ids
或query
。枚举可用方法:
__list_method__()
。读取方法签名:
params
与returns
(JSON描述)。选择方法并准备参数(必要时结合
list_data_set
、list_related_entity_set
)。执行
entity-call
调用,获取数据或SPL(DryRun模式下返回SPL)。
注意:
若实体未关联任何数据集或关系,仅返回基础方法(如
__list_method__
、__inspect__
等)。方法的可用性与参数要求会随实体关联的DataSet/Link变化。
4. 典型用法示例
4.1 发现实体可用方法
.entity_set with(domain='apm', name='apm.service')
| entity-call __list_method__()
4.2 获取黄金指标(基于发现结果)
.entity_set with(domain='apm', name='apm.service', query='service_id = "order-service"')
| entity-call get_golden_metrics('range', '1m')
4.3 查实体关联数据集并继续调用
.entity_set with(domain='apm', name='apm.service')
| entity-call list_data_set(['metric_set'], true)
根据返回:
字段 | 说明 |
data_set_id | 关联数据集唯一标识,如 |
type | 数据集类型,如 |
fields_mapping | 字段映射,指导参数与过滤条件自动拼装 |
随后可继续:
.entity_set with(domain='apm', name='apm.service', query='service_id = "order-service"')
| entity-call get_metric('apm', 'apm.metric.apm.service', 'request_count', 'range', '1m')
5. 最佳实践
先发现、再调用:优先使用
__list_method__()
确定实体在当前上下文下支持的能力,再按需调用。结合
list_data_set
与list_related_entity_set
:自动化构建参数与过滤条件。使用DryRun调试:
.set "umodel_paas_mode"='dry_run';
.entity_set with(domain='apm', name='apm.service')
| entity-call get_metric('apm', 'apm.metric.apm.service', 'request_count')
DryRun将返回可执行SPL,便于审查字段映射与查询生成是否符合预期。
缓存方法清单:方法清单相对稳定,可在应用侧短时缓存提升效率。