Portal 认证系统上线之后,最让人不安的不是出问题,而是出了问题没人第一时间知道。用户在认证页面卡住了,运维可能半小时后才从投诉里听说。系统具备告警能力,也支持主动监控、网络故障自动触发运维工单,但这些都只是工具,能不能起作用取决于告警是怎么设计的。阈值定得不合理、告警没有明确归属、或者触发之后没人跟进,再完善的告警功能也只是摆设。
先分清要监控哪两类异常
告警的设计要从分类开始。第一类是业务类异常,比如认证成功率明显下滑、认证耗时变长、在线数突然掉一大截、某个接入点的认证请求断流。这类异常直接影响用户能不能上网,是运维最该先知道的。第二类是安全类异常,系统可以对缓冲区溢出、SQL注入、跨站脚本、扫描探测这类攻击行为和恶意流量做实时检测并报警,通过邮件或者网管告警报文的方式发出通知。两类异常的处置路径完全不同,前者归运维,后者可能还要联动安全负责人,混在一起会导致告警没人认领。
阈值定得太敏感等于没设
新手最容易犯的错是把阈值定得特别敏感,觉得这样最安全。实际结果是告警轰炸,一天几十上百条,值班的人很快就会养成直接忽略的习惯,真出大事的时候那条关键告警同样被忽略了。这比不设告警更糟,因为它给了一种虚假的安全感。阈值应该基于正常运行时的实测数据来定,先观察一段时间,知道正常波动的范围是多少,再把阈值设在明显超出正常波动的位置。
阈值太迟钝同样有问题
另一个极端是阈值设得很宽松,只有彻底挂了才报。这种告警发出的时刻,往往用户已经投诉了一轮。合理的做法是分层设阈值:一个提示级,指标开始偏离正常范围就提醒,用于人工关注;一个严重级,达到明显故障水平立即触发处置流程。分层之后,提示级可以汇总成一条日报,严重级单独推送并且要求确认,这样既不会轰炸,也不会漏掉苗头。
每条告警都要有归属
告警发出去之后,谁接收、谁判断、谁处理、多久之内必须响应,这些必须在设计阶段就定好并且写成表。没有归属的告警,最终结果是所有人默认别人在处理,实际上没人处理。归属还要考虑时间因素,工作时间值班的人和夜间的联系人可能不是同一个,交接规则要清楚。有些项目把告警只发到一个群里,以为群里有人就会管,这是最靠不住的做法,群消息太容易被刷走。
自动触发工单不等于自动解决
系统支持网络故障自动触发运维工单,这解决了从发现到登记的一步,但后面还有很长的路。工单要有明确的处理状态流转、有时限要求、有关闭条件,不能生成之后就没人动。更要避免的是工单积压,一段时间之后几十条未关闭的工单堆在那里,新告警进来同样石沉大海。工单的关闭条件要具体,比如认证成功率恢复到多少以上并持续多久才可以关闭,而不是处理的人说修好了就算。
告警要定期演练
有一个很容易被跳过但极其重要的动作:定期做告警演练。方法很简单,人为制造一个可控的异常,比如临时停掉一个非关键服务,看告警是否在预期时间内发出、是否送到了正确的人手里、接收方是否按预案处置。演练的价值在于暴露链路上的断点,比如告警邮件被当成垃圾邮件拦掉了、联系人离职后没更新、值班人员换了手机收不到通知。这些断点在真实故障发生之前发现,代价要小得多。
告警记录本身也是追溯材料
告警的历史记录不只是运维台账,它在事后复盘和责任界定上也很有用。某次故障之前是不是已经有过预警、预警有没有被处理、处理花了多长时间,这些信息能帮助判断问题到底是突发的还是早有征兆。所以告警记录要留存,并且要能被检索,不能只保留最近几天的。留存周期可以按项目的管理要求来定,关键是不能随手清掉。
把它和服务体系衔接起来
告警和工单最终要落到服务流程上。客户报修、工程师受理、记录问题和客户信息、填写故障处理单、处理结束,这是一条要走完的完整流程。系统自动发现的异常和人工报修进来的问题,应该能在同一个台账里看到,这样才知道哪些问题是主动发现的、哪些是被动接到的。主动发现占比越高,说明监控越有效,用户投诉自然就越少。
告警和日志要能联动
还有一点很影响效率:告警和日志如果能联动,排障会快很多。值班的人看到一条认证成功率下滑的告警,最自然的下一步就是想看那段时间的认证记录。如果还要换系统、换界面、重新设时间范围去翻日志,中间这一通折腾就足以让人干脆不看。理想的状态是从告警能直接跳到相关时间段的记录,这个联动不需要多复杂,但很值得在建设阶段就提出来。