当前位置: 首页 > 科技观察

谈谈智能诊断模型的构建

时间:2023-03-18 22:57:59 科技观察

说到智能运维,谈智能检测或智能发现的多,谈智能诊断的少。智能诊断并不容易,因为诊断涉及复杂的分析和推理。检测和发现可以基于数据的统计规律,通过训练和建模不断提高性能。然而,通过简单的统计方法仍然难以实现复杂问题的诊断和推理。前段时间,我写了一篇关于莫拉维克悖论的文章。说几十年前,用知识推理的方法很容易解决一些复杂的问题,而一些类似于模拟人的视觉、动作等,越简单的问题越难解决。事实上,近年来基于数据分析和统计的算法已经让困扰Moravecs的问题变得非常简单,而深度学习可以很好地解决这些问题。通过统计方法和深度学习,更容易发现异常,这是构建智能运维系统的基础。过去,我们往往需要依靠专家才能发现真正的“异常”。这里所说的“异常”并不是所谓的通过网管系统、基线或日志收集发现的“无法确定的异常”,而是真正可能威胁到系统健康的异常。通过算法发现异常仅仅完成了智能运维的第一步,接下来就是通过一系列的现象来推导某个异常的原因。曾经和一个做智能运维算法的朋友交流过。他认为这是一件很简单的事情。将系统中收集到的所有数据进行统计,将发现的问题归类后,是不是很容易就可以找出问题的原因呢??其实我朋友不是运维出身,而是纯算法工程师。他很难理解数据库系统等复杂系统,也很难对问题的根源进行归类。另外,他也不清楚系统的实际生产环境,某个数据库系统一直处于亚健康状态。这个问题除了内部原因外,这个系统可能还有很多问题。对所有指标进行异常检测,再通过收敛算法总结根因,无法实现真正??的根因发现。这些年,如何做智能运维算法的问题一直困扰着我。前段时间跟客户交流的时候,提到了如何通过算法准确定位数据库问题的原因,并采取准确的措施处理呢?我想都没想就说,大部分场景,我们做不到。能做的只是一些很简单的场景。目前,智能发现和智能诊断只能帮助运维人员定位一个大方向,从而减轻运维人员分析问题的工作量,并不能真正替代人工。最后一公里的发现还是需要人,甚至有些时候需要专家来完成,而DBAIOPS在现阶段还只是一个配角。构建智能分析模型是我这些年一直在探索的。2017年我们启动这个项目的时候,是和某大学合作的。他们的算法能力让我们耳目一新。原来,数据库的问题分析,可以让一群不懂数据库操作的人,微唯通过算法也可以做的这么好。我们在Oracle数据库关键指标筛选、健康模型构建、健康指标预测等项目上进行了合作。健康模型构建工作的大部分成果仍在D-SMART系统中应用,但似乎很难走其他工作的技术方向。虽然健康指标的预测在当时取得了较好的效果,但被用户认为在实际应用中价值不大。因为一个数据库系统在99.9%的时间里都表现良好,所以无论索引预测的准确率有多高,对运维的帮助也不是很大。误报对运维来说是最致命的。2018年,在与客户沟通时,他对我们的方案非常不满意。他说,“老白,别跟我讲智能算法,如果能用你们团队专家的方法分析数据库问题,部分实现自动化的手段,可以帮助我们解决运维中的一些常见问题。”网站,比你所谓的智能算法有价值多了。”他的话让我如梦方醒,我们的专家脑子里有最有价值的智能分析算法,为什么不去用它,而是去追求一些混沌的数学方法呢?于是我们开始梳理专家知识,引入知识图谱,并通过构建运维知识图谱来解决一些复杂的推理和分析问题。但是,梳理专家知识并不是一件容易的事,很多问题就像量子纠缠一样,比较难搞清楚。举个例子,我们来看一个简单的CPU占用异常的场景,一般来说,运维人员在分析CPU占用异常的时候,会从两个角度来看问题,一个是触发这个异常的主要原因,我列举的就是这几个以上,当然这只是运维经验的一部分,而且只是专家或者团队理解的一部分,不能涵盖所有场景。另一部分是CPU占用异常可能导致的现象。这些现象可以通过多种观察方法进行观察,通过监测数据采集和异常检测可以方便地进行分析。当CPU使用率异常时,会出现上述一种或多种现象。这时候,我们可以很容易的总结出一个方法。首先通过异常检测算法可以更准确的计算出CPU使用异常,然后我们可以通过现象来检查异常发现,也为问题分析提供了一个大方向,进而去源头寻找可能存在的问题。看起来很简单,但是你可能会发现一些因素同时出现在触发现象和触发原因中,这意味着在实际生产环境中,因果关系并不固定,可能会颠倒过来。由于系统的复杂性,甚至可能发生像池塘中的涟漪一样,多个波相互干扰。不过,这些问题对于算法专家来说并不难。通过时间序列分析,很容易找到多次波动与波动时间顺序之间的相关性,从而分清因果;通过统计分析,还可以发现这些数据之间的复杂关系;深度学习还可以发现一些人类专家往往忽略的隐含关系。只要通过知识图谱的构建建立起基本图谱,一些复杂的问题就会变得简单明了。以往只能通过深度学习来完成,样本极难覆盖的问题轻松解决。但是,在实际的生产环境应用中并不是那么简单。这张地图需要不断积累和完善。而要完善这张地图,数据是极其关键的。只有不断积累数据样本,才能不断完善上图。最近一直在呼吁社区的朋友分享SQLSERVER的监控数据,就是这个道理。我们看到的运维场景非常有限。只有通过分布在各个行业的大量实际生产案例,才能更好地提炼知识。而如果我们拥有丰富的数据,分析这些数据的工作量又是巨大的,如何解决这个问题呢?算法在这个时候可以发挥巨大的作用。通过强大的算法发现异常,通过专家分析异常,提取知识图谱,是这个生态系统非常关键的一环。过去我们在做智能运维系统的时候,往往把运维专家和算法工程师分开。两者没有很好的融合,导致两者的优势无法形成协同。每次写这个题目,总觉得写的比较吃力,写到最后发现很多问题还是说不清楚。的确,AIOPS,我们才刚刚在路上,很多工作都是尝试性的,虽然有些成绩,但只是开始。也希望对此领域感兴趣的朋友不吝赐教,同时加强交流与合作,为共同的理想做点事。