Go进阶46:Prometheus Chart和Alert架构

Go进阶46:Prometheus Chart和Alert架构
  • Blue圆角框: 后端需要开发任务
  • Cyan圆角框: 后端要开发的任务
  • 时序数据库是个做和聚合统计, 不适合做表格报表数据来源,非常适合做Chart报表数据来源

1. 旧版本本告警/报表/Monitor疼点

内部自己研发(Moon) 基于influxDB自主开发,使用HTTP API 封装时序数据库查询, 文档不完善, 没有成熟的社区支持, 功能和Prometheus类似 报表模块数据来源多Mysql/ES, 每添加一种类型数据需要大量的计算聚合golang代码, 不容易找到抽象的规则 告警模块数据的解耦 依靠定时任务在kafka自我produce,自我consume, 告警规则都是通过Mysql数据库查询策略, golang条件匹配. 扩展告警规需要 新增加golang代码 告警模块,报表模块是非数据导向(先有原型图), 后端在安装原型收集/计算/聚合数据

2. Prometheus的优势

Prometheus 不仅能够做性能监控,还可以做业务数据的监控 Prometheus Grafana 图像化界面支持 Prometheus 时序数据库查询语法(PromQL), 非常棒的 Chart Report 工具 Prometheus Alert-Manager 只需要编写 PromQL 告警规则, 结合自定义开发的Alert-Manager-Hook, 快捷的,解耦的,灵活的,实现负载的告警逻辑 文档完善

2.1 Prometheus 不仅仅只是运维硬件性能监控工具

你可以把业务数据转换成metrics 数据放入prometheus中 解决prometheus的时序数据库,和PromQL语法快速的出报表 可以解决Alert-Manager 监控业务, eg: 如果一小时内由20用户登陆失败, 通知相关人员.

3. 重构方案介绍

重构需求:

  • 灵活增加报表类型(样式,数据)
  • 灵活自定义告警规则

重构达到的效果:

  • 新增加报表: 只需要写html-template(html/css) + prometheus 查询语句, 后端golang代码不需要修改
  • 新增加告警规则: 只需要写 prometheus 查询语句, 后端golang代码不需要修改

新需求需要以数据导向:

  • 需求必须先从数据采集开始, 不能先从报表,告警原型开始
  • 需求流程: 1. 需求确定要收集那些数据(业务 or 机器信息) 2. 根据已有数据来确定查询展示的内容 3. 根据已有数据来确定告警规则

重构工作组要分为三块:

prometheus数据采集:

  1. 虚拟机/物理机机器信息的采集,
  2. 自定义exporter采集业务数据 (cron定时任务)
  • 告警: 1. 后端服务创建/编辑 Prometheus 告警规则 2. Prometheus Alert Manager Hook 处理告警事件
  • 报表: 1. 前端生成报表样式 2. 后端协助前端编写PromQL 查询 3. 后端render报表

3.1 Prometheus 数据采集

Prometheus server 保存只保存报表和告警的相关数据: CPU, Mem, Disk-IO, Net-IO, Process , 授权变动, 费用变动, 日志事件

3.1.1 OpenStack 如何在创建的虚拟机上安装 node-exporter?

  • 方案一: node exporter 和启动shell 初始化到 OpenStack 镜像里面
  • 方案二: openstack 虚拟机初始化的时候 提供统一的 ssh账号和密码, 后端服务golang远程(内网)执行安装shell

    3.1.2 Prometheus 如何发现已经安装启动完毕node-exporter的虚拟机?

    prometheus 配置openstack的管理API 账号密码 自主发现exporter, https://prometheus.io/docs/prometheus/latest/configuration/configuration/#openstack_sd_config

3.1.3 Prometheus 如何Pull后端服务的业务数据?

后端服务 import “github.com/prometheus/client_golang” 详细Example示例代码 https://github.com/prometheus/client_golang/tree/master/examples/simple

3.2 报表模块

旧版: 新增加报表需要后端写golang 查询代码进行数据统计, 然后前端出html-template, 联调

目标:

报表高度灵活 解耦

3.2.1 报表的生成流程?

第一步: 使用grafana 管理界面(Prometheus Playground) 调试好自己需要的图表的数据, 确定需要展示的样式和PromQL查询语法 第二步: 前端编写图表前端代码,和粘贴上一步生成的PromQL 查询语句,提交后端 第三步: 后端根据前端的报表模板,render页面 第四步: 生成多种格式报表 第五步: 发送报表

3.2.2 报表如何做的灵活可配置?

Prometheus & Grafana 提供Playground, 可以实验你需要的数据,和提前预览验证你的报表 前端根据 grafana 来编写自己的报表的样式代码 3.3 告警模块 旧版: 新增加告警策略,或增加告警监控项, 需要golang后端 匹配告警策略和 写if 判断语句完成触发逻辑

目标:

告警规则高度定制化 解耦

3.3.1 项目告警规则如何编写?

第一步: 在Prometheus Grafana ( Playground ) 中实验你的告警规则 生成PromQL语法 第二部: 前端表单提交PromQL的告警规则(也可以内置) 第三步: 后端把前端提交的告警规则生成 Prometheus Alert Manager的告警规则 第四步: 后端把生成好Rules 写入Prometheus 配置文件

3.3.2 Prometheus 告警如何跟后端结合?

后端提供Prometheus Alert Hook API 后端通过Hook API: 1. 记录触发的事件到数据库,提供前端展示 2. 发送Email 同时收件人 Prometheus Alert Manger 配置文件中天写 后端的 alert hook api 地址

4. 附录

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流, 谢谢大家对mojotv.cn的支持.喜欢这个网站麻烦帮忙添加到收藏夹,添加我的微信好友: felixarebest 微博账号: MojoTech向我提问.

目录