以往基础设施运维管理(ITOM)、配置管理数据库、网络性能监控系统和应用性能监控系统的建设有相对标准化的产品作为基础,也有方法学作为参考。相比之下,应用智能运维系统更贴近企业多样化的应用系统、业务流程和用户场景,没有开箱即用的工具平台和普遍适用的方法学参考。因此,其对扩展性和可定制化能力的要求较高,往往需要针对特定场景定制智能化算法,对团队的技术能力要求较高。

应用智能运维是在现有的应用性能管理系统、日志分析系统等的基础上,围绕用户场景和业务目标自动融合数据、智能化提取信息的过程。其通过规则积累指定应用运维经验,通过算法替代运维专家的逻辑思考,为发现风险、定位风险和处理风险提供了决策支持。

落地智能化的运维算法难度较大,解决实际应用场景问题,要求应用运维团队不但要有应用性能工程、APM、应用链路追踪、日志分析等传统运维技术,还要有大数据存储、索引、清洗、统计等方面的经验,能够熟练使用机器学习和人工智能算法。企业需要在建设前期积累的关键技术能力有以下三部分。

1、数据采集

数据是实现精准预测、异常检测和根源问题定位分析算法的基础,没有覆盖全面、高质量、高精度的监控数据,再精妙的算法也很难发挥作用。围绕业务部门对服务质量目标保障的需求,要覆盖应用全链路的监控数据,就需要更丰富的监控数据采集手段。要达到监控范围涵盖应用从用户端到服务端的运行期状态、数据采集能力支持从基础设施到上层应用全栈软硬件的效果,需要解决用户数字体验与终端设备监控、业务流程及系统可用性检测、网络状态监控、代码执行链路追踪、日志分析及标准化协议/接口对接等技术问题。目前,常用的覆盖从用户端到服务端的软件及基础设施的数据采集技术主要有以下几种。

  • 用户数字体验与终端设备监控。采集B/S架构下的应用Web页面与用户交互的用户数字体验指标数据,主要利用页面植入JavaScript探针技术实现。对于移动终端应用,需要在开发阶段通过SDK代码埋点的方式,在关键代码执行链路上插入监控代码,监控用户的使用习惯和指定业务流程。目前,主流的APM产品和工具均能提供这种能力。
  • 业务流程及系统可用性检测。通过配置脚本定时或随机拨测关键业务流程、页面和接口的方式来主动检测应用的可用性。在系统没有用户使用或系统上线初期,这样做能够主动发现服务假死、应用或独立部署的服务节点意外宕机、接口调用性能异常等问题。常用工具有用于模拟用户操作以检测业务流程可用性的Selenium、拨测页面和接口的SaaS云服务“site 24x7”、开源项目Blackbox等。
  • 网络状态监控。这是一种基于旁路镜像网络流量、通过探针被动侦听网络包原理分析应用在网络层交互动作的监控方式。其通过拆包分析网络数据包,可以获得网络交互性能、网络协议类型和应用业务操作过程等信息。由于是被动侦听,当遇到应用异常或网络信道加密时,其很难拿到有用信息。这类工具和产品统称为网络性能管理工具。
  • 代码执行链路追踪。获取分布式事务执行过程和应用服务器的代码执行链路数据是APM平台的核心能力,其主要原理是采用独立于程序外的代理(Agent)来监听程序执行过程。对分布式系统的代码执行链路追踪监控的原理,来自Google大规模分布式系统的跟踪系统Dapper。
  • 日志分析。应用运行期日志是定位分析故障的重要信息来源相比之下,监听分析日志文件中的数据是获取应用运行期状态更简单、直接的方式。近几年,Splunk、Elastic、Sumologic等用于日志提取、分析的产品/服务厂商推动了海量日志采集、存储、分析及可视化技术的快速发展。
  • 标准先协议/接口对接。通过标准化协议/接口采集监控数据是最基本的监控数据获取方式,常用协议有面向Windows操作系统的WMI和JMX Java虚拟机的运行状态监控管理协议、简单网络管理协议(SNMP),以及网络监测导出协议sFlow、NetFlow等。
2、数据存储

常用的监控数据分析技术处理的数据量较小,类型单一。例如,对于时间序列指标数据,常用RRD数据库或时间序列数据库对数据进行统计计算。计算类型大多是求最大值、最小值,求平均,找标准差及多指标聚合等。

对于日志、用户操作行为等半结构化的文本数据,可以用ElasticSearch等文本索引工具对海量文本数据进行索引,利用类SQL语句提取关键信息字段。

对于代码调用链路,尤其是分布式事务处理的代码链路,需要对海量数据按预先注入的TraceID、SpanID进行关联,由于链路层级深度不确定,用关系数据库连接处理就是灾难。采用Apache Solr、ElasticSearch这类文本索引检索引擎,需要占用大量的内存来创建索引,对计算和内存的压力将非常大,也不合适。最适合的数据库是HBase、Cassandra等,其能够由指定ID快速检索出相关数据,并拼接出完整的链路。

不同数据存储方式的实现原理不同,核心能力也有差别。为了支撑上层多样化数据的统计分析、检索,需要综合利用各数据库的优势。

3、数据分析

海量运维大数据分析是实现应用智能运维的关键。如果把监控数据比作石油,数据分析就是从石油中提炼适用于不同应用场景的汽油、柴油、重油、沥青、润滑油的过程。需求不同,对石油提炼的过程和工艺大相径庭。同样,监控数据采集上来,未经加工,本着发现风险和异常的原则来看,这些数据大部分都是正常状态的无用数据,价值密度很低,可读性很差,因此称为“状态裸数据”。

数据采集层通过数据预处理和格式转换(通常预定义为XML Schema、JSON Schema等元数据格式)将这些数据转化为格式化数据,推送到数据存储平台存储。

集中存储的监控大数据经过清洗、过滤、预处理等操作进一步提升了价值密度,转换成信息输入数据,用于统计分析。常用的数据分析技术包括异常检测、指标关联分析、趋势预测、因果分析等,用这些技术对信息进行深度加工,可找出支持运维和运营决策及采取下一步动作的信息。