一个优雅的报警处理系统范例

做运维的同学都知道,运维一定离不开Zabbix、Nagios之类的监控软件。目前,类似的软件在监控和数据采集方面已经做到了极致,但是在报警处理上并没有很完美的解决方案,比如,经常出现高质量报警湮没在海量报警之中等情况。

本文不探讨监控系统的配置优化,只探讨监控系统按照它的逻辑发出报警之后我们该做点什么。

报警遇到的痛点

  1. 报警风暴,高质量报警湮没在海量报警之中;
  2. 出现报警后没人认领,需要在在工作的IM群中沟通;
  3. 运维人员进行运维操作必定会引起某些报警,会给不知道真相的同学带来困惑;
  4. 海量报警恢复之后,运维人员很难在第一时间知道还剩下哪些报警没有恢复;
  5. MySQL出现了慢查询报警,DBA还需要登录数据库去查看;
  6. 有些报警优先级不高,明明可以白天处理的,却在晚上第一时间发出来;
  7. 同一个报警会反复报出来。

背景现状

云极星创作为综合性云服务提供者,既要做公有云的监控,也要负责私有云的监控。我们的研发团队已经建立了比较完善的OpenStack监控体系,并且使用了多种监控工具;因为云极星创的运维团队和客户分布在全国各地,所以该监控体系的物理位置也是分散。

在公有云场景下,报警需要按照物理位置或者应用类型发给不同的运维同学、运营同学和管理层。在私有云场景下,报警也需要推送给相应的客户。当前,我们主要采用微信为主,短信为辅的报警方式。

使用微信的优缺点

使用微信的优点

基本免费;

图文并茂、字节数限制较为宽裕;

微信客户端和服务器端交互方便。

使用微信的缺点

可用度依赖腾讯的服务器:

为此特意增加了对微信服务器接口的监控,发现接口有问题之后会发短信报警;

客户端需要保持联网,没有送达报告:

因此系统提供汇总表功能(详见后文)。

优秀报警处理系统的三要素

  1. 在合适的时间发给合适的人;
  2. 尽可能的提供更多的信息,使得接警人员在不开电脑情况下第一时间能大概知道哪里出了问题;
  3. 减少围绕报警的人员沟通成本。

实施方案

架构概览

报警分类

普通报警:根据排班表发送给值班的运维同学,低级别的报警会延时发给对应的应用开发。

ELK日志报警:用户在微信端可以查看

收到报警:确认、反馈和汇总

报警确认:当用户点击确认按钮之后,对应的人会收到确认信息。

报警处理结果反馈

汇总表:提供批量确认功能

报警收敛

基于关键字、主机名、Tag的复合报警收敛

报警升级

如果报警在一定时间没被确认也没有自动回复,会有一个报警升级动作

微信 vs 短信 两个平台

所有微信接口做了加密处理,防止非授权用户访问和关注公众号。短信平台主要用来发送灾难级别的报警、微信API接口的报警,系统本身可用度的报警。

总结      系统使用的成果

云极星创之前使用的报警方案是邮件加短信的方式,在报警触发之后,运维交流群会有大量围绕报警的沟通,并且经常发生报警风暴,将短信发送平台堵塞,在本系统投入使用之后,基本上所有的沟通都在系统内进行。随着丰富的报警附加信息,减少了二线运维工程师在处理故障时候开机登录系统的次数。

研发历程

本系统开发历时半年左右,基本上随着云极星创的发展而发展壮大起来,初期的想法是因为各家短信发送平台随着国家打击电信诈骗的政策影响,变得越来越不好用,所以诞生了使用普及率非常高的微信来替代短信的想法。

第一个版本就是原封不动的推送Zabbix报警信息,随着公有云规模的不断扩大,报警不断增多,另外私有云客户也在不断的增加,需要接受报警的人员也越来越分散,围绕报警的沟通成本越来越高。

因此本系统的功能点都是围绕着我们运维同学在处理报警时候遇到的痛点进行开发而成。经过半年的发展,在我们内部已经将运维报警做成了运营的报警。

未来发展

  • 报警系统和工单系统以及CMDB做关联;
  • 快速实现故障根因定位;
  • 告警排行分析报表;

(备注:文中截图来自于预发布环境下的运维测试)

重点在最后,代码已经托管到github

https://github.com/superbigsea/zabbix-wechat

时间: 2024-08-06 16:05:38

一个优雅的报警处理系统范例的相关文章

判断一个Activity 判断一个包 是否存在于系统中 的方法

判断一个包是否存在于系统中(来自网络),经过测试,好用: public boolean checkBrowser(String packageName) { if (packageName == null || "".equals(packageName)) return false; try { ApplicationInfo info = getPackageManager().getApplicationInfo( packageName, PackageManager.GET_

一个简单的情感识别系统的实现

情感识别,主要就是正和负的识别,偶尔也有中性.类别比较少,所以相对于广义的文本分类来说,看起来要简单很多,特别是很多词汇都有很强的倾向性.当然这是针对某一特定的领域.一般的话,情感识别主要用于商品评论,因为不同的商品会有不同的术语之类的专门的某一词汇,所以如果将某一领域的数据集上学到的模型应用在另一个领域的话,可能效果会不很理想. Stephan Raaijmakers等的这篇文章[1]提出的是一种基于阀值投票的方法,即使用独立的分类器去分各个类别的数据,最后使用新领域的数据对分类结果进行投票校

如何做一个优雅的人

--无论从事什么职业,我们首先是一个女人或者男人.女人应该像淑女,男人应该像绅士,愿所有的中国人都是淑女和绅士. --这里所说的文化.教养并不是大学生.硕士生或者博士生之类,而是一个人的行为举止中透露出来的素养,这是你们从书本上学不到的东西. --懂得标准,你就可以改变:不懂标准,你就没有信心. --人一开口,我们就知道他的内才有多少,所以,每个人都应该不断地丰富自己的内心世界. --如果你让他感觉到你很关心他,你真的很在乎他的病能不能好,那你就是一个很有修养的医生. 今天,我非常高兴有机会和你

【MEF】构建一个WPF版的ERP系统

引言 MEF是微软的一个扩展性框架,遵循某种约定将各个部件组合起来.而ERP系统的一大特点是模块化,它们两者的相性很好,用MEF构建一个ERP系统是相当合适的.下面简单演示如何构建一个简单版的ERP系统. 简单分析 从框架的角度来看,一个好的ERP系统应该至少具备以下两个特点: 1.模块开发.一个大型ERP系统要靠团队开发的,每个人负责的模块可能都不一样,要保证低耦合和开发进度,每个模块必须要能够独立开发测试,最终才组合起来. 2.实时更新.ERP系统的模块经常会有功能性修改,升级频繁,要保证良

TCP学习之建立一个简单的客户/服务器系统--回射系统

TCP学习之建立一个简单的客户/服务器系统--回射系统 相关的资料可以参考Unix网络编程,这个只是修改版,不需要依赖任何文件,可以独立编译通过,而且是在两台不同的主机上进行的. fggets和fputs这两个函数来自标准I/O函数库,writen和readline见my_unp.h头文件 //my_unp.h #include<stdarg.h> #include<syslog.h> #include<stdio.h> #include<netinet/in.h

【Unity Shaders】Reflecting Your World —— 在Unity3D中创建一个简单的动态Cubemap系统

本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源(当然你也可以从官网下载). ========================================== 分割线 ========================================== 写在前面 我们已经学了很多关于反射的内容,但是我们现在的反射并不能实时反射,即当反射物体移动时它们不

一个CORDIC算法在圆周系统下的向量模式下获取角度的Verilog 程序

下面给出一个CORDIC算法在圆周系统下的向量模式下获取角度的Verilog 程序: /*==============================================================================*\        Filename : Cordic.v        Discription : 坐标旋转数字计算方法.通过该算法,对输入的向量坐标进行9次迭代     计算,得到该向量的模值和相角.        \*===============

【Java&amp;Android开源库代码剖析】のandroid-async-http(如何设计一个优雅的Android网络请求框架,同时支持同步和异步请求)开篇

在<[Java&Android开源库代码剖析]のandroid-smart-image-view>一文中我们提到了android-async-http这个开源库,本文正式开篇来详细介绍这个库的实现,同时结合源码探讨如何设计一个优雅的Android网络请求框架.做过一段时间Android开发的同学应该对这个库不陌生,因为它对Apache的HttpClient API的封装使得开发者可以简洁优雅的实现网络请求和响应,并且同时支持同步和异步请求. 网络请求框架一般至少需要具备如下几个组件:1

【转】MyEclipse第一个Servlet程序 --解决Win7系统下MyEclipse与Tomcat连接问题

MyEclipse第一个Servlet程序 --解决Win7系统下MyEclipse与Tomcat连接问题 前言 本文旨在帮助学习java web开发的人员,熟悉环境,在Win7系统下运行自己的第一个Servlet程序,因为有时候配置不当或系统原因可能会运行不成功,这给初学者带来了一定烦恼,我也是为此烦恼过几小时.现手把手介绍利用MyEclipse,连接tomcat服务器,建立自己的第一个Servlet程序.java web开发相关的理论及其他知识在此处未做讨论.文章末尾给出了一些常见错误的解决