基线预警是目前大多数数据库监控软件最重要的功能之一。可以说,基线告警是运维人员的耳目。很头疼,甚至很多人都被铺天盖地的无效告警伤害过。虽然基线告警实现起来很简单,但肯定有用,但是每个系统的运行特点都不一样,基线设置多少是个头疼的问题。IO延迟的告警阈值应该设置为50毫秒还是20毫秒?如果设置为20毫秒,则告警频繁,但系统没有问题。如果设置为50毫秒,有时候并发高的时候,超过30毫秒系统就会出大问题,有时候50毫秒的IO延迟没有问题,但有时候只是多了超过30毫秒,系统将挂起。另一种情况是,我们可能运维着几十个,甚至上百个大大小小的数据库,数据量差异很大,运行负载也不一样。如果只是设计几个适用于这么多系统的基线模板,肯定会遇到不适合的情况。如果能根据每个系统的运行情况,为每个系统设置一套基线就更好了,但是工作量会很大。另一方面,数据库系统的基线不是静态的。随着系统负载的变化、业务的增长、设备的老化,基线每年都在变化。是否可以每年根据系统情况调整基线?那么DBA就没有时间去做其他事情了。即使我们做了很多工作,基线告警仍然不够准确,我们肯定忙不过来处理每一条告警信息。在很多情况下,我们只能忽略大部分报警信息。那么问题又来了。在黄油法则的指引下,某个我们可能忽略的警告,最终竟然发生了。正是因为这个问题,在设计D-SMART的告警功能时,并没有使用基线来告警。系统告警控制台不推送基线告警,只推送运维体验告警,运维体验告警是基于组规则的故障模型触发的。虽然不需要通过基线异常来产生系统告警,但是基线告警仍然是反映指标是否正常最简单的方式。我们在进行诊断分析时,还需要判断一个指标是否异常。为了避免基线阈值设置不合理的问题,指标是否异常由异常检测算法判断,不依赖于基线模板。尽管如此,我们还是在系统中设置了一个基线告警模板,根据这个模板,自动记录基线异常的告警信息(只记录,不推送),基线产生的告警主要用于每日和每月检查。“可能”存在的系统问题。还有一种比较灵活的基线,就是动态基线。最早实现动态基线是为了解决白天和晚上业务负载不同时,某些指标的合力波动范围的问题。或者解决工作日和非工作日、月末业务高峰期和正常业务高峰期的告警不同的问题。过去,当我们管理的系统较少时,我们仍然可以一丝不苟地工作。随着信息系统规模的不断扩大,这种精益运维的模式极难为继。在IT系统数量爆发式增长的情况下,如何解决加量不加价的问题,实现减员增效,是大多数IT运维部门头疼的问题。如果这一切都可以自动化,那将解决一个大问题。上图是我们实验室一个基线报警的截图。许多警报阈值是混合的。这些阈值不是配置的,而是动态计算的。在实现动态基线时,我最初的想法不是设置基线模板,而是通过异常检测算法自动计算异常,发现异常就报警。但研发部门认为计算量过大,会导致Monitor任务不稳定。因此,做了一个变通方案,就是对异常检测算法进行改造后,动态生成某个指标的基线阈值。这样处理后,当Monitor分析刚刚采集到的数据时,就可以按照传统的基线模板方式进行处理了。在配置基线告警时,我们引入了一个虚拟模板——“智能基线告警模板”。该模板无需预先配置,由系统自动生成。这个模板的生成规则以图的形式存储在图数据库中。每天固定时间,后台任务会自动计算模板需要的阈值,然后将计算结果存储在Redis中,供Monitor进行基线评估时使用。因此,在系统刚刚上线时,模板仍然是一个没有真实数据的虚拟模板。系统运行十天八天后,数据会更加准确,这时候智能模板就可以发挥作用了。目前智能基线模板的功能还在BETA阶段,使用起来还不够方便。比如初次连接系统时,不能直接使用模板,需要使用正则模板。系统运行10天后,模板数据更加??准确,才可以切换。这使用起来不够方便。如果我们有100多套数据库,配置起来会相当费力。目前传统模板提供对象应用功能,可以实现一键批量绑定,而智能模板是虚拟模板,目前在模板管理中是不可见的,所以无法实现一键绑定。我们将在V2中跟进。2提供了这样的功能。这样,在系统首次接入时可以使用传统基线模板,半个月后可以手动设置智能基线模板。未来甚至可以提供更方便的方式。设置基线模板时,提供选择,选择参数,10天后自动切换到智能基线模板。在动态基线的自适应能力方面,还有很大的提升空间。不同行业用户的不同特征,基线计算也不同。这是有意义的。如果将其他时期的数据加入计算,势必会影响计算结果的准确性。因此,在系统中加入“系统特性”这个参数是非常重要的。“系统特性”可以对算法进行微调,使其更加准确。对于运维自动化系统,需要带给DBA的是准确高效的告警和便捷的操作。做好这一点真的很不容易,因为大部分开发人员已经远离运维一线很长时间或者甚至一天都没有做过真正的运维工作。因此,开发者可能无法感知到运维人员的真实需求。运维自动化工具项目相对容易做好,因为客户会根据自己的运维习惯不断提出修改建议,我们随时可以对系统进行修改;要做一款好用的运维自动化产品,实属不易。系统功能、使用习惯、差异化的系统,都让这项工作复杂了很多。因此,我们毅然推出了社区版的发布,希望通过社区的力量,帮助我们更好的打磨产品。
