关于告警系统的设计

参考:https://segmentfault.com/a/1190000003021919

什么是告警系统

当我们的服务器或某些业务指标出现差错时,告警系统可以反馈信息

为什么需要告警系统

减少人力监控,算是自动化运维的一种手段
这样不用时时盯着服务器,可以睡个稍微好一点的觉~

告警系统的要求

1.每次收到告警提示之后可以立即评估影响的范围,并且每一个告警都需要做出分级响应;

2.使一些无关紧要的事情不会告警;

3.要采集真正重要的指标,盲目地采集那些容易获取的指标,并随意地设定阈值告警是大部分糟糕的告警质量的根源。

4.告警的本质是当一些无法自动化维护的服务出错后,通知人去修正,所以一些可以自动化的操作,告警系统可以自己执行
比如服务器挂了,自动切换为备份机,再去人工修复主机。

告警的对象

  • 1.业务规则的监控
  • 2.系统可靠性监控

关于业务规则的监控的例子:
比如吃鸡中,不同的枪和被打中人的护甲造成的伤害应该是一定的,如果超过这个限度,就说明有人开挂了,这时候就应该告警了;

当然,还有很多其他维度,比如开枪后枪的后座力如何等等,只要不符合实际情况,即可告警。

关于系统可靠性的监控的例子:
比如服务器是否挂了,并发是否过高等等;

架构设计

系统1:
可以使用消息队列,来将请求和响应解耦,也加快处理速度,因为告警并非实时性的业务
关于告警系统的设计
当然,实际应用中,系统不会孤立运行,改造成的系统2如下:
关于告警系统的设计
最下方为其他系统,不同系统需要不同的资源
如一个DB会依赖于底层的cpu,内存,磁盘等资源;一个Http服务会依赖于底层的DB服务;一个应用会依赖于数个底层的RPC服务

采集的指标

  • 系统1:
    请求的数量,请求到达的速率
    正常响应数,正常响应占比
    错误响应数,错误响应占比
    响应延时
    队列长度,排队时间

  • 系统2增加:
    资源A的调用量(比如CPU使用率)
    资源B的调用量(比如内存分配和释放)
    资源C的调用量(比如网络发送包量)

如何判断需要获取哪些指标呢?可以根据我们的目标来判断:

a.系统是否在持续完成其设定的工作
b.用户体验是否好
c.问题或者瓶颈在哪里

第一个问题是最重要的,我们必须保证系统正常的运行,而系统能否正常运行,取决于许多服务,如DB等