基于SLO告警(Part 4):开源项目 pyrra 使用

songjiayang · · 1297 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

系列文章第3篇我们讲到如何使用 sloth 进行 Prometheus 规则的自动生成和 SLO 统一观测,今天我们再来看另外一个类似的开源项目 -- pyrra(https://github.com/pyrra-dev/pyrra)。 ## Pyrra 简介 Pyrra 大部分功能和 sloth 类似,它提供了 4 个子命令,分别为: - generate:它是最基础的命令,通过它实现规则文件手动生成。 - filesystem: 它在 generate 命令上,通过对特定目录监听的方式,实现规则文件自动生成。 - kubernetes: 它通过启动的 K8s Controller 实现对 ServiceLevelObjective 资源监听,生成 PrometheusRule 对象,实现与 Prometheus Operator 无缝对接。 - api: 它提供一个开箱即用的 UI,支持 SLO 列表和详情信息查询,适用于未部署 Grafana 的场景(当然 pyrra 也提供了 Grafana 模板)。 ### Pyrra SLO 配置格式 相较于 sloth,pyrra 只提供一种 SLO 格式,及自定义 K8s 资源 ServiceLevelObjective,内容大致为: ```yaml apiVersion: pyrra.dev/v1alpha1 kind: ServiceLevelObjective metadata: name: pyrra-api-errors namespace: monitoring labels: prometheus: k8s role: alert-rules pyrra.dev/team: operations # Any labels prefixed with 'pyrra.dev/' will be propagated as Prometheus labels, while stripping the prefix. spec: target: "99" window: 2w description: Pyrra's API requests and response errors over time grouped by route. indicator: ratio: errors: metric: http_requests_total{job="pyrra",code=~"5.."} total: metric: http_requests_total{job="pyrra"} grouping: - route ``` 我们主要关注以下字段: - metadata.name: 表示该 SLO 的名称。 - metadata.labels: 表示该 SLO 的标签,其中 pyrra.dev/ 开头的标签会去除前缀后,添加到最终生成的告警规则中。 - spec.target: 表示 SLO 目标值。 - spec.window: 表示 SLO 计算周期。 - spec.indicator: 表示 SLO 计算指标,支持 ratio 和 latency 两种类型。 pyrra 生成的 Prometheus 规则类型主要有: - increase: 包含 SLO 周期总请求数和指标不存在的告警。 - metric_name:burnrate5m: 属于 record 记录,主要记录各时间窗口每秒的错误率。 - ErrorBudgetBurn: alert 告警,支持多窗口多燃烧率。 - generic:主要包含 SLO 的一些元信息,例如配置的 SLO 目标值,时间窗口大小等。 ### Pyrra 与 Sloth 对比 优势: - 提供 filesystem 模式,实现对 SLO 目录文件变化,自动触发 generate 命令。 - 提供 api 模式,一个开箱即用的统一看板。 不足: - 不支持 OpenSLO 格式。 - 不支持时间窗口内更详细配置,例如短/长期窗口具体的告警燃烧率。 - 不支持 Sloth 类似的 SLI 插件,对于通用服务(中间件)需要手动编写 SLIs。 实际使用中,如果我们没有太多窗口配置定制化,而且有 SLO 状态页面的需求(不方便使用 Grafana),pyrra 是个不错的选择。 ## 实战练习 ### 示例流程 我们还是以 MyService 为例,收集其指标并通过手动改变请求错误率的方式,对其 SLO 进行观测。 整个流程如下图: ![sloth-demo.png](https://static001.geekbang.org/infoq/d4/d449b26c9dab46195e63d868f832f6ad.jpeg?x-oss-process=image%2Fresize%2Cp_80%2Fauto-orient%2C1) 1. 启动 MyService,能够通过接口进行错误率设置。 2. 通过 pyrra filesystem 模式,自动生成 MyService SLO 对应的 Prometheus 规则。 3. 启动 Prometheus,加载生成的规则文件,并收集 MyService 指标。 4. 启动 Grafana 和 pyrra api,查看 SLO 列表和详情页面。 ### 程序运行及效果 示例程序已提交到 https://github.com/grafanafans/play-with-pyrra 仓库,欢迎查看。 #### 启动程序 ``` git clone https://github.com/grafanafans/play-with-pyrra.git docker-compose up -d ``` 当程序启动后,你将看到5个容器,它们分别为: - Prometheus: http://localhost:9090 - Pyrra API: http://localhost:9099 - Grafana: http://localhost:3000 - MyService: http://localhost:8080 - Pyrra Filesystem. #### 设置 MyService 错误率 ``` curl http://localhost:8080/errrate?value=0.005 ``` 当设置错误率为 0.5%(SLO 0.1% 的5倍),通过 Pyrra API 和 Grafana 观测到的 SLO 详情信息如下。 - Pyrra API 页面 ![pyrra-api.png](https://static.golangjob.cn/230209/89795796087bb80bc4cc8cfb38e06e98.png) - Grafana 页面 ![pyrra-grafana.jpg](https://static.golangjob.cn/230209/556add545c94551f7e867278d72512db.jpg) ## 总结 可以看到 pyrra 和 sloth 做的事情类似,它也提供命令行和 K8s Controller 方式实现 Prometheus 规则的自动生成。相较于 sloth,它在服务化方面做的更多一些,不仅提供了一个开箱即用的 SLO 页面还支持 filesystem 模式对 SLO 目录进行监听。 总的来说,如果您有 SLO 状态页面的需求(不方便使用 Grafana),pyrra 是个不错的选择。 ---- - 基于 SLO 告警(Part 1):基础概念 - 基于 SLO 告警(Part 2):为什么使用 MWMB 方法 - 基于 SLO 告警(Part 3):开源项目 sloth 使用 - 基于 SLO 告警(Part 4):开源项目 pyrra 使用 - 基于 SLO 告警(Part 5):SLO 多租户与服务化

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1297 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传