当企业的业务发展到一定的阶段时,在系统中引入监控告警系统来对系统/业务进行监控是必备的流程。没有监控或者没有一个好的监控,会导致开发人员无法快速判断系统是否健康;告警的实质则是“把人当服务用”,用告警通知人的方式去干预系统达到修正的目的。
监控告警在企业保障系统的稳定性和事故快速恢复的全周期链路中都是至关重要的一环。在新版本的 EasyMR 中袋鼠云开发团队也对监控告警功能进行了全新的优化,通过本文和大家分享一下监控告警功能的设计思路以及碰到各类问题痛点的解决方法。
EasyMR 监控告警设计
对于 EasyMR 的监控告警设计思路,考虑到 Zabbix 后端数据库使用 MySQL 对监控数据进行存储,无法满足多维度化的告警。而 openfalcon 整体架构上吸取了 Zabbix 的经验,解决了 Zabbix 的不足之处,但是社区活跃度不高。
所以我们选择了集成 Prometheus+Grafana 的解决方案搭建 EasyMR 的监控系统,这套解决方案是目前主流的方案,使用的人群较多,在推广使用上会降低门槛而且容易维护,也适合袋鼠云平台的容器化部署。整体架构图如下:
首先我们在这套平台的基础上增加了一个 dt-alert 组件用来对接第三方的告警发送的处理,其次我们对 Grafana 进行了少量的二次开发。开发的内容主要在于打通 EasyMR 平台的告警通道和 Grafana 上的通道的对接,平台接入好主机和部署好服务后 Prometheus 就能通过服务发现的方式完成目标抓取作业的生成获取监控数据。
Grafana 从 Prometheus 中获取指标数据进行展示,同时触发告警时将告警内容发到 dt-alert 组件中,dt-alert 组件将告警信息发往第三方平台上。
EasyMR 监控告警痛点
基于上述告警监控的解决方案是否就是一个非常完美的方案呢,答案当然是否定的,接下来我们就讨论一下在使用此方案的过程中遇到的问题和痛点:
● 低版本 Grafana 漏洞频发
低版本 Grafana 漏洞频发,导致平台安全问题受到很大的挑战。漏洞是指计算机系统安全方面的缺陷,会使得系统或其应用数据的保密性、完整性、可用性、访问控制等方面面临威胁。由于早期版本的 EasyMR 是基于 Grafana5.3 版本做的二次开发,所以被扫描出来的漏洞非常多,遇到相应漏洞时只能想办法规避。
● 缺少分级告警
缺少分级告警,无法区分不同严重程度的告警。对于运维人员来说,监控告警是用来发现故障用的,但是存在一个问题,如果一个系统中所有的告警都是同一个级别,那么出现问题时,可能会同时出现很多的告警,告警没有分级不光会造成告警过多,还会让开发人员无法区分优先级,导致无法优先处理更紧急的问题。
● 无法对同一个仪表盘设置多条告警规则
由于我们是使用 Grafana 来设置告警规则,在老版本中同一个 panel 只能设置一条告警规则,如果我们想针对同一个监控指标设置多个告警规则的话只能新建一个相同指标的 panel 再设置新的告警规则,这在使用上来说是非常不便利的。
EasyMR 监控告警优化解决方案
基于以上三点痛点,袋鼠云开发团队在新版本的 EasyMR 中,将 Grafana 版本从 5.3.x 升级到了 8.5.x,新版本可以非常顺利地解决上述问题。基于新版本的二开前后端为了将 Grafana 很好的嵌入 EasyMR 产品页面中,做了很多的优化工作,包括但不限于隐藏侧边栏、隐藏 Grafana 一级菜单、取消 title 点击事件隐藏相关信息等等。
● 优化前
● 优化后
如何配置 EasyMR 新版本告警规则
接下来给大家详细介绍一下如何配置新版本 EasyMR 的告警规则。
● 选中仪表盘
选择仪表盘,以 cpu_usage 告警为例,选中 Host_Overview。
● 选中面板
在 System->cpu_usage 面板中点击下拉菜单,选中 Edit 选项。
● 创建告警
选中 Alert 项,点击创建告警规则。
编辑告警规则,告警参数参考如下模板,参数确认无误后点击保存。
● 自定义告警模板
以 Redis 告警为例,在 Prometheus 查询的值为:
自定义模板可以引用标签和值变量:
钉钉告警示例如下:
《数据治理行业实践白皮书》下载地址:https://fs80.cn/380a4b
《数栈V6.0产品白皮书》下载地址:https://fs80.cn/cw0iw1
想了解或咨询更多有关袋鼠云大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:https://www.dtstack.com/?src=szalykfz
同时,欢迎对大数据开源项目有兴趣的同学加入「袋鼠云开源框架钉钉技术 qun」,交流最新开源技术信息,qun 号码:30537511,项目地址:https://github.com/DTStack