【大咖秀】博睿数据眼中的AIOps,选择正确的赛道正确的人

2022-08-08

风口总是偏向那些找对方向的人。

2021年创投的风向标便吹向了IT运维这个赛道。根据IT桔子的不完全统计,2021年IT运维行业相关融资事件共有24起,融资金额约54.7亿元。

据艾瑞咨询的数据显示,2021年中国IT服务突破万亿大关,其中IT运维市场规模达到2941.2亿元。预计2023 年将达到3236.4 亿元,2020-2023 年的年复合增长率为 11.7%。就智能运维赛道而言,全球智能运维的市场规模年复合成长率预计为30.6%,2027年达到400亿美元的规模。

毋庸置疑,IT运维正在成为继SaaS之外又一个被送上风口的赛道。在这个巨大的角斗场中,资本、企业、技术正在塑造行业发展的新逻辑。

选择正确的赛道和正确的人

在过去的数十年间,运维发展经历了数个阶段。从早期的手工运维到标准化运维、自动化运维,再到DevOps、AIOps,追溯整个历程不难发现,运维方式随着技术的不断发展,逐渐迈向智能化。

从2016年AIOps(智能运维)概念被提出,到2017、2018年全球市场出现商业化产品,在国内市场,2020年是AIOps的元年。博睿数据也是在2020年开始重兵投入智能运维赛道。

根据第三方评估机构预测,到2022年,40%的大中型企业将部署AIOps平台。不难猜测,智能运维将在很长一段时间成为IT运维的重点赛道。

博睿数据作为国内智能运维领域的排头兵,自然也不例外。2008年博睿数据以监控起家,经过多年的打磨,成为了IT运维行业的领军企业;2020年博睿数据凭借强大APM背景和强大数据分析/AI(人工智能)能力成为国内A股市场上的“APM监测第一股”;同年,博睿数据凭借独到的市场眼光锚定智能运维赛道,有理由相信,博睿数据在今后的智能运维赛道中也将行稳致远。也正是基于博睿数据每一次的正确选择,吸引了那些紧跟赛道和风口的优秀人才的目光。

现任博睿数据首席架构师李骅宸与博睿数据AIOps首席专家贺安辉便是其中的佼佼者。

李骅宸,此前在蚂蚁集团负责数据服务稳定性,从事数据服务、系统稳定性、AIOps智能监控告警平台等研发工作,曾赋能支付宝关键业务和系统指标秒级态势诊断和应急决策。

贺安辉,之前在蚂蚁集团负责可观测性平台 AntMonitor 产品集的产品规划和设计工作, 对于AIOps的产品、算法、场景有丰富的实践经验。

近日,我们采访了两位经验丰富的大咖,试图从博睿数据的视角窥探AIOps 的全貌。

关于AIOps 产品本身

就博睿数据而言,博睿数据的AIOps的核心是“数据+AI+产品+场景”四合一的综合解决方案。在一体化运维、告警管理、故障定位、应急快恢等高频运维场景中帮助用户更高效、更准确的达成业务目标。

就其优势而言,主要有5个方面:

门槛低:博睿数据的AI接入简单,开箱即用,算法支持可视化和自解释;

性能高:同等性能条件下资源消耗较少,1台4C8G机器可处理每分钟6.6万指标量,3台8C16G机器可处理每分钟48万指标量;

数据全:APM深耕多年,数据多而全,比如Trace核心基础能力,博睿数据支持多语言、多框架,也能和日志深度关联。这对AIOps做多模态数据联邦分析和挖掘有优势;

范围广:算法通用性强,适应范围广泛,针对不同行业进行了模型优化;

分析强:可观测数据、流程工单数据、配置管理数据汇总到数据中台,提供流批一体的在离线数据查询聚合能力,为任意指标、实体的关联分析提供独到见解支撑。

目前,博睿数据基于自研的大数据实时处理和分析平台 Zeus做数据挖掘,在异常检测、趋势预测、告警收敛、事件分析等应用场景方面已实现产品化落地。

具体来说,异常检测,主要应用于运维数据的无监督异常发现环节,不需要运维人员手工设置阈值即可做到异常的自主发现,大幅节省了人力投入;

趋势预测,主要应用于业务特性运维数据的预测场景,比如容量预测、访问量预测、硬件缺陷预测等等,对于运维人员的预算编制、业务规划和提前介入处置起到很大的参考作用;

告警收敛,主要应用于统一告警平台的事件管理场景,运维人员不再需要面对大量的无效告警,只需要关注收敛后的少量故障,应急处置的效率和精准度有了大幅提升;

事件分析,主要应用于一体化运维平台的问题管理场景,AI将指标、Trace、事件的异常信息汇聚到问题,从问题查找根因,从根因联动通知、自动化等处置步骤,问题分析的效率和精准度得到大幅改善。

在AIOps实践方面,博睿数据依托多年APM行业积累,已具备丰富的数据集合。依托IT运维监控能力,利用大数据和机器学习技术持续构建智能运维监控能力。

2021年,博睿数据在国内首次提出了“服务可达的数据链DNA”技术理念,D代表DEM(数字体验管理),N代表NPM(网络性能管理),A代表APM(应用性能管理),从而打通从代码到用户访问的全过程,进一步释放企业IT运维监控管理所有分支领域DEM、APM、ITIM、NPM和智能运维管理的能力。就博睿数据而言,博睿数据的AIOps的核心是“数据+AI+产品+场景”四合一的综合解决方案。在一体化运维、告警管理、故障定位、应急快恢等高频运维场景中帮助用户更高效、更准确的达成业务目标。

目前,博睿数据算法中台 SwiftAI已赋能到新一代APM的Server产品、新一代的智能运维大数据平台DataView、“双模一体”智能应急中心OneAlert等,与博睿数据统一联邦数据中台 Zeus相辅相成,不断落地智能异常检测、趋势预测、智能告警、事件分析等场景,助力云原生时代服务可达。

2022年5月20日,博睿数据正式推出了一体化智能可观测平台ONE,该平台旨在建立一体化、智能化、面向业务与用户体验的统一运维平台,助力企业提高数字化体验,降低运维成本,提升工作效率,为数字化转型赋能升级。同时,这也是业界第一个将所有运维监控需求“All in ONE”的统一平台。博睿数据的AI 能力,比如告警收敛、根因分析、多维分析、影响分析等,也将在ONE 平台的观测洞察、应急管理等模块中逐步落地。

同时,未来博睿数据也将继续发展多模态数据联邦“底座”和AI算法的广度和深度,支持全程服务可观测。

AIOps 未来已来

虽然AI技术给运维工作带来的价值显而易见,但需要明确的是AIOps 不是一个一蹴而就的实践,而是一个长期演进的过程,需要不断创新发展。

就当前国内智能运维的环境而言,李骅宸认为AIOps还存在以下几方面的挑战:

普适性:在不同的客户业务场景中,如何减少定制化和实施成本,又能更好的解决业务问题。

可解释:AI的结果如何自解释,如何验证。

效率:高度自动化地减少人工干预。

资源:在私有化或POC时,极致的技术应用到资源和性能优化中,以最小资源成就最大价值。

稳定:AI算法高度智能化和自动化。

在他看来,博睿数据今后要在智能运维方面持续发力。

首先,要打破数据孤岛,做DNA 数据的最大化融合,建立数据资产的统一管理仓库,产生联邦数据的次生价值。以博睿数据提出的数据链DNA 概念为例,AIOps是DNA中重要的一环,可助力APM产品和数据实现端到端打通,让DNA更加自动化和智能化。同时,DNA数据链也给AI提供场景和数据土壤,让AI通过信息整合、特征关联真正的跑出优质算法模型。

其次,要加强数据分析和数据挖掘,扩展AI产品能力,夯实算法基础能力,让AI支持轻量级的模块化和产品化。在算法可解释性和评价体系方面建立一套标准,引入不同的数据集进行数据加工分析,用真实故障注入的方式来不断锤炼AIOps能力,在商业化输出时能够以近乎开箱即用、极低适配成本的方式实现价值的最大化输出。

更为重要的是,AIOps本就是基于已有的运维数据,并通过机器学习的方式来进一步解决自动化运维没办法解决的问题。企业实现AIOps的前提是建立起全面获取IT数据的能力,这里的数据主要包括但不限于日志、指标和事件等。将这些数据输送给AIOps平台,为AIOps提供数据资产,以进行整合的更高级别的分析和洞察。如果没有这些大数据的支持,AIOps则是无源之水。所以对于企业来说,大数据采集工作至关重要。

两位大咖对AIOps的未来发展充满信心。总体而言,中国市场足够大,数据也足够丰富,而在国家战略和政策的支持下,传统制造业正向智能创造逐步发展,发展的过程中必然会涉及大量数据处理,而这也是AI技术的强项,当前在运维领域,AI技术的应用还是刚刚起步,慢慢成熟,在未来的3-5年内,AI技术会广泛应用到运维场景中,向自助式服务方向发展。

写在最后

每一个产品最需要的是被市场认可。

在标准制定方面,2021年博睿数据获信通院首批AIOps评估的异常检测全面级,同年博睿数据作为信通院组织的AIOps标准工作小组成员,多项建议纳入到规范标准。

在产学研方面,博睿数据也跟厦门大学成立联合实验室,开展机器学习、深度学习方面的合作。

在行业应用落地方面,博睿数据的AIOps解决方案已经落地到银行、保险、证券、教育、航空等行业中,如异常检测场景、告警收敛场景、趋势预测场景等,为客户的数字化转型加速赋能。

文章标签

智能运维

相关文章

FreeMarker template error (DEBUG mode; use RETHROW in production!): The string doesn't match the expected date/time/date-time format. The string to parse was: "2024年3月5日". The expected format was: "MMM d, y". The nested reason given follows: Unparseable date: "2024年3月5日" ---- FTL stack trace ("~" means nesting-related): - Failed at: #if "2024年3月5日"?date lt item.createTi... [in template "themes/halo_quickstarter/post_newsDetail.ftl" at line 106, column 25] ---- Java stack trace (for programmers): ---- freemarker.core._TemplateModelException: [... Exception message was already printed; see it above ...] at freemarker.core.BuiltInsForMultipleTypes$dateBI$DateParser.parse(BuiltInsForMultipleTypes.java:220) at freemarker.core.BuiltInsForMultipleTypes$dateBI$DateParser.getAsDateModel(BuiltInsForMultipleTypes.java:190) at freemarker.core.BuiltInsForMultipleTypes$dateBI$DateParser.getAsDate(BuiltInsForMultipleTypes.java:197) at freemarker.core.EvalUtil.modelToDate(EvalUtil.java:86) at freemarker.core.EvalUtil.compare(EvalUtil.java:270) at freemarker.core.EvalUtil.compare(EvalUtil.java:115) at freemarker.core.ComparisonExpression.evalToBoolean(ComparisonExpression.java:78) at freemarker.core.IfBlock.accept(IfBlock.java:49) at freemarker.core.Environment.visit(Environment.java:370) at freemarker.core.IteratorBlock$IterationContext.executedNestedContentForCollOrSeqListing(IteratorBlock.java:321) at freemarker.core.IteratorBlock$IterationContext.executeNestedContent(IteratorBlock.java:271) at freemarker.core.IteratorBlock$IterationContext.accept(IteratorBlock.java:244) at freemarker.core.Environment.visitIteratorBlock(Environment.java:644) at freemarker.core.IteratorBlock.acceptWithResult(IteratorBlock.java:108) at freemarker.core.IteratorBlock.accept(IteratorBlock.java:94) at freemarker.core.Environment.visit(Environment.java:334) at freemarker.core.Environment.visit(Environment.java:340) at freemarker.core.Environment.visit(Environment.java:340) at freemarker.core.Environment.process(Environment.java:313) at freemarker.template.Template.process(Template.java:383) at org.springframework.web.servlet.view.freemarker.FreeMarkerView.processTemplate(FreeMarkerView.java:391) at org.springframework.web.servlet.view.freemarker.FreeMarkerView.doRender(FreeMarkerView.java:304) at org.springframework.web.servlet.view.freemarker.FreeMarkerView.renderMergedTemplateModel(FreeMarkerView.java:255) at org.springframework.web.servlet.view.AbstractTemplateView.renderMergedOutputModel(AbstractTemplateView.java:179) at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:316) at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1401) at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1145) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1084) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) at javax.servlet.http.HttpServlet.service(HttpServlet.java:497) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) at javax.servlet.http.HttpServlet.service(HttpServlet.java:584) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799) at org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1631) at org.eclipse.jetty.websocket.server.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:230) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at run.halo.app.cas.UserInfoFilter.doFilter(UserInfoFilter.java:37) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at org.jasig.cas.client.util.AssertionThreadLocalFilter.doFilter(AssertionThreadLocalFilter.java:54) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at org.jasig.cas.client.util.HttpServletRequestWrapperFilter.doFilter(HttpServletRequestWrapperFilter.java:75) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at run.halo.app.cas.MyAbstractTicketValidationFilter.doFilter(MyAbstractTicketValidationFilter.java:215) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at run.halo.app.cas.MyAuthenticationNoLoginFilter.doFilter(MyAuthenticationNoLoginFilter.java:57) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at run.halo.app.security.filter.ContentFilter.doAuthenticate(ContentFilter.java:69) at run.halo.app.security.filter.AbstractAuthenticationFilter.doFilterInternal(AbstractAuthenticationFilter.java:229) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at run.halo.app.filter.CorsFilter.doFilter(CorsFilter.java:53) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at run.halo.app.filter.LogFilter.doFilterInternal(LogFilter.java:40) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:548) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:600) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:501) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) at org.eclipse.jetty.server.Server.handle(Server.java:516) at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487) at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732) at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479) at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277) at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131) at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883) at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034) at java.base/java.lang.Thread.run(Thread.java:834) Caused by: freemarker.core.UnparsableValueException: Unparseable date: "2024年3月5日" at freemarker.core.JavaTemplateDateFormat.parse(JavaTemplateDateFormat.java:51) at freemarker.core.JavaTemplateDateFormat.parse(JavaTemplateDateFormat.java:33) at freemarker.core.BuiltInsForMultipleTypes$dateBI$DateParser.parse(BuiltInsForMultipleTypes.java:213) ... 118 more Caused by: java.text.ParseException: Unparseable date: "2024年3月5日" at java.base/java.text.DateFormat.parse(DateFormat.java:395) at freemarker.core.JavaTemplateDateFormat.parse(JavaTemplateDateFormat.java:49) ... 120 more