SLA 管理 (sla)
Headless 命令 — 不依赖桌面 GUI,直接使用核心包运行。适用于服务器、CI/CD、容器化等无桌面环境。
核心特性
- 📋 合约管理: 创建/查看/终止 SLA 合约,支持 gold / silver / bronze 三级
- 📊 指标记录: 记录可用性、响应时间、吞吐量、错误率四类指标
- 🔍 违约检测: 自动检测违约(response_time 用 p95,其余用 mean),方向感知偏差
- 💰 赔偿计算: 基于月费 x 赔偿率 x 偏差倍率,上限 2.0
- 📈 合规报告: 生成合规百分比、违约统计和严重程度分布
概述
ChainlessChain CLI SLA 管理模块(Phase 61)实现跨组织的服务等级协议全生命周期管理。tiers 查看内置等级定义,create 创建合约(绑定组织、等级、月费),record 持续记录性能指标,check 自动检测违约(对 response_time 使用 p95、对其余 term 使用 mean),compensate 按偏差严重程度计算赔偿金额(cap 2.0),report 生成时间窗口内的合规报告。
命令参考
sla tiers — 等级目录
chainlesschain sla tiers
chainlesschain sla tiers --json列出内置 SLA 等级:
| 等级 | 可用性 | 最大响应时间 | 最小吞吐量 | 赔偿率 |
|---|---|---|---|---|
| gold | 最高 | 最低 | 最高 | 最高 |
| silver | 中等 | 中等 | 中等 | 中等 |
| bronze | 基础 | 较宽 | 较低 | 较低 |
sla create — 创建合约
chainlesschain sla create <org-id>
chainlesschain sla create org_acme -t gold -f 5000 --json
chainlesschain sla create org_beta -t bronze -d 7776000000 -f 1000创建 SLA 合约。-t 选择等级(默认 silver),-d 指定合约时长(毫秒),-f 设置月费。
sla list — 列出合约
chainlesschain sla list
chainlesschain sla list -o org_acme -t gold -s active --limit 20 --json按组织 (-o)、等级 (-t)、状态 (-s: active / expired / terminated) 过滤。
sla show — 合约详情
chainlesschain sla show <sla-id>
chainlesschain sla show sla-001 --json显示合约的完整信息:ID、组织、等级、状态、条款详情。
sla terminate — 终止合约
chainlesschain sla terminate <sla-id>将活跃合约标记为已终止。
sla record — 记录指标
chainlesschain sla record <sla-id> <term> <value>
chainlesschain sla record sla-001 availability 0.998
chainlesschain sla record sla-001 response_time 120
chainlesschain sla record sla-001 throughput 500
chainlesschain sla record sla-001 error_rate 0.002 --json记录 SLA 性能指标。支持的 term:
| Term | 说明 | 典型值 |
|---|---|---|
availability | 可用性 | 0.0~1.0 |
response_time | 响应时间 (ms) | 正整数 |
throughput | 吞吐量 (rps) | 正整数 |
error_rate | 错误率 | 0.0~1.0 |
sla metrics — 聚合指标
chainlesschain sla metrics <sla-id>
chainlesschain sla metrics sla-001 --json返回每个 term 的聚合统计:mean、p95、采样数。
sla check — 违约检测
chainlesschain sla check <sla-id>
chainlesschain sla check sla-001 --json检测 SLA 违约。对 response_time 使用 p95 值,其余 term 使用 mean 值进行比较。返回违约列表(term、严重程度、期望值、实际值、偏差百分比)。
违约严重程度:
| 严重程度 | 说明 |
|---|---|
minor | 轻微偏差 |
moderate | 中等偏差 |
major | 严重偏差 |
critical | 极端偏差 |
sla violations — 违约历史
chainlesschain sla violations
chainlesschain sla violations -s sla-001 -S major --limit 20 --json列出已记录的违约。-s 按 SLA ID 过滤,-S 按严重程度过滤。
sla compensate — 赔偿计算
chainlesschain sla compensate <violation-id>
chainlesschain sla compensate vio-001 --json计算违约赔偿金额:base (月费 x 赔偿率) x multiplier (基于偏差),multiplier 上限 2.0。
sla report — 合规报告
chainlesschain sla report <sla-id>
chainlesschain sla report sla-001 --start 1700000000000 --end 1710000000000 --json生成 SLA 合规报告:合规百分比、违约总数、赔偿总额、按严重程度分布。--start / --end 指定时间窗口(毫秒时间戳)。
系统架构
用户命令 → sla.js (Commander) → sla-manager.js
│
┌──────────────────────────┼──────────────────────┐
▼ ▼ ▼
合约管理 指标/违约 赔偿/报告
(create/list/show) (record/check) (compensate/report)
▼ ▼ ▼
sla_contracts sla_metrics sla_violations
sla_violations关键文件
| 文件 | 职责 |
|---|---|
packages/cli/src/commands/sla.js | sla 命令主入口 |
packages/cli/src/lib/sla-manager.js | 等级目录、合约管理、指标聚合、违约检测、赔偿计算核心实现 |
配置参考
| 配置项 | 含义 | 默认 |
|---|---|---|
tiers | SLA 等级 | bronze / silver / gold / platinum |
tier.gold.availability | 可用性阈值 | 0.999 |
tier.gold.responseTimeMs | P95 响应阈值 | 100 |
tier.gold.throughputRps | 吞吐阈值 | 500 |
compensation.currency | 赔偿币种 | CLC |
compensation.multiplier | 违约倍率 | 1.0 |
report.defaultWindowMs | 默认报告窗口 | 30 天 |
性能指标
| 操作 | 典型耗时 | 备注 |
|---|---|---|
tiers | < 20 ms | 内置枚举 |
create | < 30 ms | 单行 INSERT |
record | < 15 ms | 指标写入 |
check | < 100 ms | 聚合 + 违约写入 |
violations | < 50 ms | 带索引分页 |
compensate | < 50 ms | 赔偿计算 |
report | < 200 ms | 时间窗聚合 |
测试覆盖率
__tests__/unit/sla-manager.test.js — 83 tests覆盖:四级 tier 目录、合约 CRUD、指标 record 与聚合(availability/p95/throughput)、违约检测的阈值边界、赔偿倍率计算、report 时间窗过滤。
安全考虑
- 指标真实性:
record来自业务侧推送,CLI 不做真实性校验;生产环境建议叠加签名 - 阈值防篡改:合约创建后阈值写入 SQLite,
update需要审计 - 赔偿上限:
compensate按违约事件线性累加,业务侧应设置单月硬上限 - 报告脱敏:
report默认仅输出聚合值,敏感分布走--json+ 权限控制 - 过期合约:到期合约
list默认排除,避免误续费
故障排查
| 症状 | 可能原因 | 解决方案 |
|---|---|---|
check 无违约 | 阈值过宽或样本不足 | 查看 record 数量 |
compensate 报错 | 违约已赔偿 | violations 确认 status |
report 空 | 时间窗外 | 放宽 --start/--end |
| 吞吐统计异常 | metric 单位错 | 确认写入为 RPS |
测试
cd packages/cli
npx vitest run __tests__/unit/sla-manager.test.js
# 51 tests, all pass使用示例
场景:完整 SLA 生命周期
# 1. 查看等级
chainlesschain sla tiers
# 2. 创建金级合约
chainlesschain sla create org_acme -t gold -f 5000
# 3. 持续记录指标
chainlesschain sla record sla-001 availability 0.999
chainlesschain sla record sla-001 response_time 85
chainlesschain sla record sla-001 throughput 800
# 4. 检测违约
chainlesschain sla check sla-001
# 5. 查看违约并计算赔偿
chainlesschain sla violations -s sla-001
chainlesschain sla compensate vio-001
# 6. 生成合规报告
chainlesschain sla report sla-001 --json