概述
Storage(存储)是 UModel 中数据集底层存储的抽象,定义了数据的实际存储位置和访问方式。通过存储建模,UModel 能够统一对接多种存储后端,为用户提供一致的数据访问体验。
存储的作用和价值
在 UModel 架构中,存储建模承担着关键作用:
存储抽象:统一不同存储系统的访问接口,屏蔽底层差异。
数据定位:精确指定数据集对应的存储位置和访问参数。
查询优化:通过过滤条件和视图配置提升查询性能。
成本控制:通过存储配置优化数据访问成本和效率。
支持的存储类型
目前 UModel 支持以下存储类型:
存储类型 | 适用数据 | 主要特性 | 应用场景 |
| 日志数据 | 实时检索、全文搜索 | 应用日志、审计日志、事件数据 |
| 指标数据 | 时序存储、聚合查询 | 监控指标、性能数据、业务指标 |
| 实体关系数据 | 图存储、关系查询、实体管理 | 服务拓扑、资源关系、依赖分析 |
| Prometheus指标 | 兼容PromQL | 云原生监控、容器指标、集群监控 |
应用案例
当前应用案例相关素材,请参考:umodel.zip
SLS LogStore 存储
基本配置
SLS LogStore 是面向日志数据的存储类型,提供高性能的日志写入和检索能力。
配置参数
参数名 | 类型 | 必填 | 描述 | 示例值 |
| string | 是 | 存储类型标识 | 固定值: |
| string | 是 | SLS 服务区域 | cn-hangzhou |
| string | 是 | SLS 项目名称 | my-project |
| string | 是 | LogStore 名称 | app-logs |
| string | 否 | 基础过滤条件,遵循SLS查询语法。 |
|
| string | 否 | SPL 视图定义 |
|
配置示例
kind: sls_logstore
schema:
url: "umodel.aliyun.com"
version: "v0.1.0"
metadata:
name: "app.logs.storage"
display_name:
en_us: >
Application Logs Storage
zh_cn: >
应用日志存储
description:
en_us: >
The application logs storage.
zh_cn: >
应用日志存储
domain: app
spec:
region: "cn-hangzhou" # The region where the logstore is located.
project: "my-observability-project" # The project name.
store: "application-logs" # The store name
search_filter: "level:ERROR OR level:WARN"
高级配置说明
search_filter
如果您的Logstore中,只有部分数据和上游的DataSet关联,推荐使用 search_filter
进行过滤 。
关于 search_filter
的语法,请参考 查询语法与功能。
# 基础关键词过滤
search_filter: "error OR exception"
# 字段值过滤
search_filter: "service_name:user-service AND level:ERROR"
spl_view
用于创建动态数据视图,支持复杂的数据变换,一般只用于动态实体和动态关系的场景。
关于 spl_view
的语法,请参考 SPL语法。
spl_view: >
| extend "resource.duration"=cast("resource.duration" as integer),
"resource.fail"=case when cast("resource.success" as integer)=0 then 1 else 0 end,
"resource.slow"=case when cast("resource.duration" as integer)>2000 then 1 else 0 end
| stats
"service_id" = arbitrary("app.id"),
"service_type" = arbitrary("app.type"),
"resource_domain" = arbitrary("resource.domain"),
"api_name" = arbitrary("resource.name"),
"resource_method" = arbitrary("resource.method"),
"request_count" = count(*),
"view_count" = count(DISTINCT "view.name"),
"fail_count" = sum("resource.fail"),
"slow_count" = sum("resource.slow"),
"trace_count" = count("resource.trace_id"),
"resource_duration"= avg("resource.duration"),
"last_time" = max("timestamp")
by "resource.domain", "resource.name", "resource.method"
| extend
last_time = cast("last_time" as varchar),
request_count = cast("request_count" as varchar),
view_count = cast("view_count" as varchar),
fail_count = cast("fail_count" as varchar),
slow_count = cast("slow_count" as varchar),
trace_count = cast("trace_count" as varchar),
resource_duration = cast("resource_duration" as varchar)
| sort request_count desc
SLS MetricStore 存储
基本配置
SLS MetricStore 专门用于存储时序指标数据,提供高效的指标聚合和查询能力。
配置参数
参数名 | 类型 | 必填 | 描述 | 示例值 |
| string | 是 | 存储类型标识 | 固定值: |
| string | 是 | SLS 服务区域 | cn-hangzhou |
| string | 是 | SLS 项目名称 | my-project |
| string | 是 | MetricStore 名称 | app-metrics |
配置示例
kind: sls_metricstore
schema:
url: "umodel.aliyun.com"
version: "v0.1.0"
metadata:
name: "app.metrics.storage"
display_name:
en_us: >
Application Metrics Storage
zh_cn: >
应用指标存储
description:
en_us: >
The application metrics storage.
zh_cn: >
应用指标存储
domain: app
spec:
region: "cn-hangzhou" # The region where the metricstore is located.
project: "monitoring-project" # The project name.
store: "application-metrics" # The store name
阿里云 Prometheus 存储
基本配置
阿里云 Prometheus 存储用于对接托管的 Prometheus 服务,支持标准的 PromQL 查询。
配置参数
参数名 | 类型 | 必填 | 描述 | 示例值 |
| string | 是 | 存储类型标识 | 固定值: |
| string | 是 | Prometheus 实例区域 | cn-hangzhou |
| string | 是 | Prometheus 实例 ID | c39a1048921e648ee89ba |
| string | 否 | 关联的 SLS 项目 | k8s-monitoring-project |
| string | 否 | 关联的 SLS 时序库 | prometheus-metrics |
配置示例
kind: aliyun_prometheus
schema:
url: "umodel.aliyun.com"
version: "v0.1.0"
metadata:
name: "k8s.prometheus.storage"
display_name:
en_us: >
Kubernetes Prometheus Storage
zh_cn: >
Kubernetes 集群 Prometheus 监控存储
description:
en_us: >
The Kubernetes cluster Prometheus monitoring storage.
zh_cn: >
Kubernetes 集群 Prometheus 监控存储
domain: k8s
spec:
region: "cn-hangzhou" # The region where the prometheus instance is located.
instance_id: "c39a1048921e648ee89ba" # The prometheus instance ID.
sls_project: "k8s-monitoring-project" # The SLS project name.
sls_metricstore: "prometheus-metrics" # The SLS metricstore name.
EntityStore 存储
注意:在 UModel 系统中,默认会创建 EntityStore 用于存储 EntitySet 和 EntitySetLink 数据,无需手动配置。