SLI 与 SLO
SLI(服务质量指标) 指的是一个服务的某项服务质量的一个具体量化指标(如请求延迟、错误率、QPS)。
SLO(服务质量目标) 则是服务的某个 SLI 的目标值,例如,我们可以定义一个SLO,要求 95% 的请求的延迟小于 100ms。
SLI与SLO是传统运维转型SRE绕不过的主题,它们是SRE实践的核心。传统运维通常追求 100% 的可用性,但这个目标是不可能实现的,通过实施SLO,可以带来如下好处:
-
监控应用程序的行为,以便更好地改进应用程序
-
确定工作优先级,即开发新特性还是保障服务稳定性
-
作为控制手段使用,通过比较SLI与SLO,决定某项操作是否执行
-
建立用户预期
定义 SLI
要实施 SLO,首先要定义出来 SLI,而 Prometheus 监控则是定义 SLI 的一种很好的工具,下面将介绍在 Go 程序中暴露 Prometheus Metric 来定义 SLI。
在 Golang 程序中暴露 Prometheus 指标
按照 Prometheus 官方文档[1]中的说明,在 Golang 中暴露 Prometheus 指标,可以使用 Golang 的 Prometheus Client Library —— github.com/prometheus/client_golang。
接下来的例子中,我们使用 net/http 标准模块创建一个 /login 接口,然后使用 Golang 的 Prometheus Client Library 统计接口的访问次数。
foo.go:
package main
import (
"net/http"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promhttp"
)