On this page
sla.getsli
描述
object sla.getsli(object parameters)
此方法允许为服务等级协议(SLA)计算服务等级指标(SLI)数据。
此方法可供任何类型的用户使用。可以在用户角色设置中撤销调用该方法的权限。更多信息请参见 User roles。
参数
(object) 包含 SLA ID、报告周期以及可选的服务 ID 的参数,用于计算 SLI。
| Parameter | Type | Description |
|---|---|---|
| slaid | ID | 要返回可用性信息的 SLA ID。 Parameter behavior: - required |
| period_from | timestamp | 报告 SLI 的起始时间戳(包含)。 Possible values: Unix timestamp. |
| period_to | timestamp | 报告 SLI 的结束时间戳(包含)。 Possible values: Unix timestamp. |
| periods | integer | 要报告的周期数量。 Possible values: 1-100 |
| serviceids | ID/array | 要返回 SLI 的服务 ID。 |
时间段分区
下表展示了基于参数组合返回的时间段切片排列方式。
返回的时间段不会早于首个可用时间段(基于SLA生效日期),也不会超过当前时间段。
| 参数 | 返回的时间段 | ||
|---|---|---|---|
| period_from | period_to | periods | |
| - | - | - | 最近20个时间段(包含当前时间段) |
| - | - | N | 最近N个时间段 |
| - | 指定 | - | period_to之前的最近20个时间段 |
| - | 指定 | N | period_to之前的最近N个时间段 |
| 指定 | - | - | 从period_from开始的前20个时间段 |
| 指定 | - | N | 从period_from开始的前N个时间段 |
| 指定 | 指定 | - | 指定范围内最多100个时间段 |
| 指定 | 指定 | N | 指定范围内的N个时间段 |
返回值
(object) 返回计算结果。
| Property | Type | Description |
|---|---|---|
| periods | array | 已报告周期列表。 每个已报告周期表示为一个对象,包含: - period_from - (timestamp) 已报告周期的起始时间戳(包含)。- period_to - (timestamp) 已报告周期的结束时间戳(不包含)。周期按 period_from 排序,最早的周期排在前面。 |
| serviceids | array | 已报告周期中的 service ID 列表。 列表的排序顺序未定义。即使传递了 sla.getsli 方法的 serviceids 参数也是如此。 |
| sli | array | 每个已报告周期和 service 的 SLI 数据(作为二维数组)。periods 属性的索引用作 sli 属性的第一维。serviceids 属性的索引用作 sli 属性的第二维。 |
SLI 数据
每个已报告周期和服务返回的 SLI 数据由以下内容组成:
| Property | Type | Description |
|---|---|---|
| uptime | integer | 服务在计划正常运行时间内处于 OK 状态的时长,减去被排除的停机时间。 |
| downtime | integer | 服务在计划正常运行时间内处于 not OK 状态的时长,减去被排除的停机时间。 |
| sli | float | SLI(占总正常运行时间的百分比),基于 uptime 和 downtime 计算。 |
| error_budget | integer | 错误预算(以秒为单位),基于 SLI 和 SLO 计算。 |
| excluded_downtimes | array | 本报告周期内被排除的停机时间数组。 每个对象将包含以下参数: - name - (string) 被排除停机时间的名称。- period_from - (timestamp) 被排除停机时间的开始时间戳(包含)。- period_to - (timestamp) 被排除停机时间的结束时间戳(不包含)。被排除的停机时间按 period_from 排序,最早的周期排在前面。 |
示例
计算每日SLA的SLI
获取与服务ID为"1"和"4"且关联到SLA ID为"1"的服务相关的SLI数据。 获取截至"1761861599"(2025年10月30日23:59:59 GMT+0200)的单个周期数据。 由于该SLA的reporting period为每日,SLI数据获取时间范围为"1761775200"(2025年10月30日00:00:00 GMT+0200)至"1761861600"(2025年10月31日00:00:00 GMT+0200)。
执行请求:
{
"jsonrpc": "2.0",
"method": "sla.getsli",
"params": {
"slaid": "1",
"serviceids": [
1,
4
],
"periods": 1,
"period_to": 1761861599,
},
"id": 1
}
响应:
{
"jsonrpc": "2.0",
"result": {
"periods": [
{
"period_from": 1761775200,
"period_to": 1761861600
}
],
"serviceids": [
1,
4
],
"sli": [
[
{
"uptime": 43843,
"downtime": 0,
"sli": 100,
"error_budget": 0,
"excluded_downtimes": [
{
"name": "Maintenance OCT",
"period_from": 1761825600,
"period_to": 1761829200
}
]
},
{
"uptime": 32225,
"downtime": 0,
"sli": 100,
"error_budget": 0,
"excluded_downtimes": []
}
]
]
},
"id": 1
}
计算月度 SLA 的 SLI
检索与 ID 为 "5" 的 SLA 关联的、ID 为 "50"、"60" 和 "70" 的服务的 SLI 数据。 从 "1635724800"(UTC 2021-11-01 00:00:00)开始检索三个周期的数据。 由于该 SLA 的报告周期为按月,因此会检索以下三个月的 SLI 数据:
- 从 "1635724800"(UTC 2021-11-01 00:00:00)到 "1638316800"(UTC 2021-12-01 00:00:00)
- 从 "1638316800"(UTC 2021-12-01 00:00:00)到 "1640995200"(UTC 2022-01-01 00:00:00)
- 从 "1640995200"(UTC 2022-01-01 00:00:00)到 "1643673600"(UTC 2022-02-01 00:00:00)
请求:
{
"jsonrpc": "2.0",
"method": "sla.getsli",
"params": {
"slaid": "5",
"serviceids": [
50,
60,
70
],
"periods": 3,
"period_from": 1635724800
},
"id": 1
}
响应:
{
"jsonrpc": "2.0",
"result": {
"periods": [
{
"period_from": 1635724800,
"period_to": 1638316800
},
{
"period_from": 1638316800,
"period_to": 1640995200
},
{
"period_from": 1640995200,
"period_to": 1643673600
}
],
"serviceids": [
50,
60,
70
],
"sli": [
[
{
"uptime": 1186212,
"downtime": 0,
"sli": 100,
"error_budget": 0,
"excluded_downtimes": [
{
"name": "Maintenance Nov 25 - Dec 01",
"period_from": 1637836212,
"period_to": 1638316800
}
]
},
{
"uptime": 1186212,
"downtime": 0,
"sli": 100,
"error_budget": 0,
"excluded_downtimes": [
{
"name": "Maintenance Nov 25 - Dec 01",
"period_from": 1637836212,
"period_to": 1638316800
}
]
},
{
"uptime": 1186212,
"downtime": 0,
"sli": 100,
"error_budget": 0,
"excluded_downtimes": [
{
"name": "Maintenance Nov 25 - Dec 01",
"period_from": 1637836212,
"period_to": 1638316800
}
]
}
],
[
{
"uptime": 1147548,
"downtime": 0,
"sli": 100,
"error_budget": 0,
"excluded_downtimes": [
{
"name": "Maintenance Dec 02 - Dec 10",
"period_from": 1638439200,
"period_to": 1639109652
}
]
},
{
"uptime": 1147548,
"downtime": 0,
"sli": 100,
"error_budget": 0,
"excluded_downtimes": [
{
"name": "Maintenance Dec 02 - Dec 10",
"period_from": 1638439200,
"period_to": 1639109652
}
]
},
{
"uptime": 1147548,
"downtime": 0,
"sli": 100,
"error_budget": 0,
"excluded_downtimes": [
{
"name": "Maintenance Dec 02 - Dec 10",
"period_from": 1638439200,
"period_to": 1639109652
}
]
}
],
[
{
"uptime": 1674000,
"downtime": 0,
"sli": 100,
"error_budget": 0,
"excluded_downtimes": []
},
{
"uptime": 1674000,
"downtime": 0,
"sli": 100,
"error_budget": 0,
"excluded_downtimes": []
},
{
"uptime": 1674000,
"downtime": 0,
"sli": 100,
"error_budget": 0,
"excluded_downtimes": []
}
]
]
},
"id": 1
}
来源
CSla::getSli() 在 ui/include/classes/api/services/CSla.php 中