蚂蚁集团智能可观测平台 HoloInsight 正式开源
今天,经过近一年的研发工作,很高兴和大家同步:HoloInsight 项目正式开源了
https://github.com/traas-stack/holoinsight(代码主仓库的 GitHub 地址)
1.HoloInsight 介绍
HoloInsight 是一款云原生时代的轻量化、全功能的智能可观测性技术平台。它是蚂蚁集团内部研发了近 10 年的观测平台 AntMonitor 的开源版本。经过多年大型互联网公司内部复杂场景的驱动,AntMonitor 在可观测领域沉淀了很多独特经验,是蚂蚁集团研发、测试、SRE 等人员进行故障应急处理和日常问题分析的重要平台。我们非常希望能将这些经验和业界进行共同探讨与共同演进,为此我们开源了 HoloInsight。
HoloInsight 设计上是作为集数据采集、洞察分析、智能告警的一站式可观测综合解决方案,以帮助用户清晰观测整个软件技术栈与业务的状态,从而应对云原生时代的技术挑战。虽然它继承于蚂蚁的 AntMonitor 平台,但是它不是 AntMonitor 的简单复刻。它浓缩了 AntMonitor 上最重要的几个特性:基于日志的实用观测能力、业务指标监控以及 AIOps 的前沿探索(内部成熟时序智能算法)。同时它也积极与业界接轨,融入可观测领域有共识的其他数据类型,比如 Trace,Event 等以做到综合演进。
2.重点技术特性
当前主流共识是,可观测性系统主要基于 Metric、Trace、Log 三大数据类型进行建设。围绕着这三种数据类型,业界无论是商业公司还是开源社区都构建了多种多样的技术产品与项目,比如 Datadog 系列产品,Prometheus、Zipkin、Skywalking、ELK、Jaeger 等。这些项目极大的丰富了人们在云原生可观测性实践中的选择。
然而纵观业界的这些项目,我们仍然可以发现若干问题需要被更好地解决。首先,各个开源项目基本以某一类数据为其主体,但是整体各类数据相互转化与集成解决方案较少(或者都是商业解决方案)。其次,我们发现日志是一类相对使用频度较低的数据,且尚未有足够易用的实时日志解析与告警产品。第三个问题在于,可观测平台理论上是上层 AIOps 的基座,但是目前开源的可观测方案缺少成体系的 AIOps 解决方案。
基于业界现状和上面的问题分析,加之蚂蚁多年日志监控与时序智能的经验,HoloInsight 会将当前的工作重心放在进行实时日志观测能力与 AIOps 方向。
日志分析与观测
日志这类数据,天然有着良好的特性。首先日志是非常规整的随时间增长的数据,并且在磁盘上是持久化的。因而对使用方而言,有非常好的容错能力。其次日志非常好地屏蔽了系统本身的差异性,无论是 Java 开发的系统还是,Python 或者 C++ 写的系统,日志落盘之后就都是同质的数据了,对观测系统而言无需进行适配。第三点,基于日志的观测都是无侵入的,无需将第三方的 SDK 接入业务程序,有效防止外部代码侵入带来的各种性能、稳定性、安全等方面的隐忧。
基于日志的观测能力,在蚂蚁集团进行了多年实践,其易用性得到了各类用户的认可,这也是开源 HoloInsight 的核心能力之一。在这个方向上,我们计划提供多种多样的功能,以满足保障系统稳定性与业务发展的各方面诉求,包括但不限于:
友好的日志分析用户交互(无需任何表达式)
易用、高性能、无侵入的日志解析计算能力
日志数据维度扩展能力
基于实时日志的秒级业务监控(如交易量)
错误日志的模式聚合分析
整体上这是一整套日志实时分析解决方案。这里就基于日志的业务监控来进行详细说明:Agent 按规则采集并解析指定的文件,生成不同的业务维度和指标,自由统计所需指标并作组合和计算,生成需要的数据。接下来处理流程将与 Metric 数据统一,可以进一步配置告警,及时掌握数据异常情况并进行相应处理。
处理逻辑上,可以参考下图案例。从日志里统计在每分钟每个收费站各通行了多少辆车,平均花了多长时间,可以解析对应日志耗时字段,生成每一分钟内的车辆总数和每辆车收费时长等指标。
技术实现上,参考下图。系统在 HoloInsight-Agent 里面集成了日志采集解析能力,并和 HoloInsight-Server 形成一套整体的日志处理对接方案。
时序智能与 AIOps
众所周知,可观测平台本质上是系统运行态的实时数据中枢,大部分数据拥有明显的时序特征。因此它也可以成为 AIOps 数据底座存在。蚂蚁可观测技术团队在时序数据和 AI 工程能力之上,构建了各种场景的智能化 SRE 实践,极大提升了 SRE 和一线工程师工作效率,免去日常繁琐的工作。此外,随着近期 ChatGPT 等技术的爆火,也让我们更加坚信 AI 在未来发挥更大作用的潜能。在可观测平台中集成大量时序 AI 能力,是未来这个领域技术演进的重要道路。
此次开源的 HoloInsight 项目中,我们将会陆续把时序智能相关代码全部开放,并与 HoloInsight 其他功能进行深度整合。具体 HoloInsight 时序智能对业务的支撑关系可以参考下图:
这里就智能异常检测这一常用功能进行进一步的介绍。异常检测是系统运维中一项基础且重要功能。旨在通过各种手段发现时间序列数据中的异常波动,为后续的告警、自动止损、根因分析等提供决策依据。业界常规发现异常的方式主要是通过手动配置各种告警规则。但是这样的模式存在几个难以解决的问题:
监控项太多,每个系统的告警标准又不尽相同,用户需要手动逐个进行配置,过程痛苦且繁琐;
规则告警噪声较高,对重要指标可以通过不断的调整规则达到理想的告警量,但绝大部分指标都没有精力"精耕细作",最终导致告警多到无法正常作业;
后期维护成本高,尤其在业务与系统变更或人员交替过程中,告警规则的维护成本居高不下。
HoloInsight(也即蚂蚁内部的 AntMonitor)的智能异常检测在经过多年的开发和落地实践后,逐渐形成了一套适用于多个应用场景的算法方案。该算法方案主要由前置过滤、单指标异常检测和后置降噪模块组成。
首先,采用前置过滤模块来过滤绝大部分正常数据(可以极大的提升算法效率);然后,通过算法路由将时序数据进行分类,将不同类型数据映射到对应的异常检测模型以获得最优的检测效果;
同时,结合打标闭环模块,部分解决不同业务拥有不同异常评判标准的难题;
最后,引入多维度异常检测算法,还原业务判断异常的排查流程。
此外,进一步结合告警聚合、规则耦合等方案来降低告警打扰率,实现真正的智能告警落地。下图是整个智能异常检测(智能告警)的架构图。
3.轻量开放的架构
前面也提到,HoloInsight 绝不是简单的将内部代码的开放,而是面向开源,并结合历史技术积累的一次重新架构设计。这里首先要解决的问题可以聚焦为以下几个问题:
1.架构轻量化
HoloInsight 的灵活部署架构可以轻松应对不同部署规模,整套系统里的多个组件即可单独运行又可合并运行。小规模场景下,1~2 台机器便可支撑整个服务端,帮助用户节省成本。随着规模扩大,可以扩展为分布式部署方案,将读写组件分离出来单独部署,提升服务端处理能力。
2. 模块化设计与开源协议兼容
作为一个开源项目,架构开放性是非常重要的。这里要特别强调,HoloInsight 项目有自身的重点的工作方向(日志观测与时序智能),且业界可观测领域也有很多优秀的实践,所以 HoloInsight 并不希望成为单打独斗的项目,而是希望能协同各种优秀开源组件,共同推进可观测领域的技术演进与问题解决。
在此前提下,在架构上重点关注了与开源上下游各个项目的集成与组合可能性,确保整体项目任何组件的插拔替换能力。具体工程实践上,项目倡导面向 API 与模块化编程,并且 API 需要保持与业界协议的兼容性。
这里举两个具体的实例。数据输入协议上,项目采用 OpenTelemetry,通过统一的标准方式进行数据采集和处理,适配不同的 Agent,降低不同场景下对不同来源和类型观测数据的适配成本。存储协议上,项目定义了标准存储读写接口,并适配到了不同的底层存储组件,比如 Elasticsearch,CeresDB,InfluxDB 等。查询协议也进行了与业界协议的兼容,比如和 PromQL 的兼容。
3. 功能可扩展性
作为一个偏向产品解决方案的开源项目,HoloInsight 设计上提供了各种不同的功能扩展机制。开发者和用户可以对 HoloInsight 进行不同形式的二次开发。
第一类扩展是模板开发,模板沿用 Datadog 的命名,这里称之为 Integration。用户可以通过页面定义一类新系统的观测模板(包含采集规则、图表展示、告警规则等),不需要针对性编写代码即可实现定制。比如 MySQL、HBase 的观测模板。
第二类扩展机制是下游系统对接。这里称之为组件市场,主要为外部系统提供统一接口协议 API(webhook),使用者可以在 HoloInsight 里快速且无缝使用另一套系统。以可观测数据底座为基础,围绕 SRE 能力包括 数据智能、应急、定位等能力得以整合,形成适应于不同场景的一体化解决方案。
4.开源与后续里程碑
可观测已然是一个生态非常丰富的领域。大量知名的开源项目和商业公司都在尝试使用不同的方式去解决这个领域的难题,并推动技术的演进。这些优秀实践非常值得我们学习。同时在这样的背景下,我们也希望在 HoloInsight 这个项目中,将蚂蚁集团多年的实践经验也开放出来,尝试沿着这些思路和业界的其他专家一起共同推动领域问题的解决。
当前 HoloInsight 基础功能基本具备,可以在不同场景下开始使用了。智能化相关工作仍然在快速迭代过程中。未来半年,核心的里程碑目标与研发重点将集中在这几个方向:
开放智能异常检测框架与实用算法,提供实用的智能告警与根因定位功能
对接更多业界已有的数据采集技术与协议,并进行深度集成(比如 ebpf,prometheus 协议)
适配不同的底层时序数据存储(比如 InfluxDB,CeresDB,victoriametrics,elasticsearch 等),简化不同环境使用的便利性
提供更多技术栈(java,python,nodejs 等不同语言开发的应用程序;hbase,mysql 等常见开源组件)开箱即用的基础观测能力
重点提升 HoloInsight 的前端与 dashboard 的使用体验
5.加入 HoloInsight 社区
作为一个开放的项目,我们认可开源的研发模式,并致力于将 HoloInsight 社区打造成一个开放和有创造力的社区。后续,所有的研发、讨论等相关工都会在社区透明运行。我们欢迎任何形式的参与,包括且不限于提问、代码贡献、技术讨论等。期待收到社区想法和反馈,以推动项目往前进一步发展。
https://github.com/traas-stack/holoinsight( 项目 GitHub 地址)
版权声明: 本文为 InfoQ 作者【TRaaS】的原创文章。
原文链接:【http://xie.infoq.cn/article/1142acdf83e749b92c04bfea2】。文章转载请联系作者。
评论