2.1 数据驱动的网络运维
数据价值在大数据时代得到了更为直观的体现,众多企业已由“业务驱动”型战略转向了“数据驱动”型战略。对数据进行有效的存储和管理是实现大数据分析的基础[1]。一个高效安全的数据分析平台可以完成数据收集、存储和计算甚至可视化等任务,可以极大地提升网络运维的效率,是实现运维智能化的基础,也是网络运维中至关重要的一环。优秀的数据分析平台需要具备高可靠性以保证数据的安全、高扩展性以适应不断变化的需求、高效性以处理庞大的数据量。随着时代的发展,实时性逐渐开始占据重要地位:运维平台需要能够及时反馈系统运行状态,帮助运营维护人员完成日常监测,实时掌握系统的整体状态。
对于数据驱动的网络运维,目前业界的实践可以分为以下几个阶段。
• 网络运维 1.0 阶段:实现了对网络运维中所产生数据的集中存储与审计,没有复杂的事务处理,完全依靠网络管理员的个人经验实现运维管理。
• 网络运维2.0阶段:利用Hadoop、Spark等分布式大数据平台实现了离线批处理,适合大规模的网络运维数据处理,但缺乏易用的数据分析平台,仍然需要依靠领域专家的功能开发。
• 网络运维3.0阶段:出现了对网络运维数据进行存储、管理、分析以及可视化的平台套件,如业界常用的Splunk、ELK等,但无法满足运维中的复杂需求。
• 网络运维4.0阶段:诞生了结合大数据挖掘技术的一站式智能运维平台,在网络运维3.0阶段的基础上,结合自然语言处理、大数据挖掘和机器学习等技术处理异构日志、故障溯源及工单分析等复杂的运维任务,研发领域相关的可定制化高可用处理引擎,构建基于多源数据的智能运维协同分析平台[2]。
下面将对这4个阶段进行具体分析,配以实例详细分析网络运维的发展过程以及未来的发展方向。
2.1.1 网络运维1.0阶段:简单数据处理
计算机在工作过程中会生成大量的日志数据,对这些日志进行分析处理、故障溯源,是运维中非常重要的一部分。日志是指带时间戳的基于时间序列的机器数据,它包含设备名称、操作时间以及服务器等系统信息[3]。日志是非常重要的数据源,可以准确而充分地反映用户的实际行为,具有很高的分析价值。
在网络运维1.0阶段,网络运维所产生的日志数据并不是很多,数据级别多是MB级或是GB级,尚处于单机能够处理的范围。syslog是用来记录和保存系统日志的协议,它支持标准的纯文本日志形式。计算机系统每进行一次操作,就会产生相应的操作日志,并被syslog保存下来[4]。在Linux/UNIX系统下,有诸如grep、sort、join 等现成的工具可以进行日志分析。逻辑稍微复杂一点的,可以利用 Perl 或者Python脚本语言编写相应的脚本,完成所要完成的工作。
当我们需要频繁、多次地对日志数据进行操作分析时,上述方法显然并不适用。如果每次对日志进行操作分析时,都需要网络管理员编写相应的脚本,会极大地增加网络管理员的工作量。此外,对于一些常见操作会出现许多重复的代码,造成资源的浪费。数据库的使用能够很好地解决这一问题。数据库可以轻松地完成数据的录入、保存、查询以及简单的修改等操作。数据库的优点在于其结构化的数据存储形式便于对大量数据进行管理:将日志中一些不必要的字段去掉,只保留如 id、time、agent 等重要的字段信息。因而可以很轻松地实现对结构化数据的统计。例如针对MySQL数据库,完成统计数据库中存储的网页浏览总量的任务,只需进行简单的“SELECT + COUNT”操作即可,极大地简化了网络管理员的工作量。
2.1.2 网络运维2.0阶段:分布式大数据处理框架
随着数据量的快速增长,数据处理的级别已经达到了TB级甚至PB级,并且日志数据的特征之一就是随时间持续增长。因此传统的单机数据库已经无法处理如此庞大繁杂的数据。分布式处理技术的出现很好地解决了这一问题,大大提高了数据处理的效率。
对大数据的处理通常包括数据收集、数据接入、数据计算、数据输出4个步骤[5],也就是对数据的收集、存储、计算以及可视化展示。一个完整的大数据系统应该包括这 4个过程[6]。数据收集是大数据处理的第一个环节,也是非常重要的一环,直接决定了接下来所处理数据的完整性和代表性。一个好的数据收集系统要做到能从多个数据源收集各种类型的数据。目前比较主流的开源数据收集系统有 Apache 的Chukwa、Facebook使用的Scribe、Cloudera的Flume、LinkedIn使用的Kafka以及Fluentd等[7]。存储同样是数据处理过程中非常重要的一个阶段。为了防止数据丢失,数据存储系统应当有自己的容错机制。HDFS是Hadoop中的数据存储模块,在其他系统中的应用也非常广泛。数据的分析处理主要是利用数据计算引擎,结合数据挖掘算法整合出隐藏于数据中的有价值的信息。目前主流的数据计算系统主要有Hadoop的MapReduce、Spark等,之后它们又各自发展了Storm和Spark Streaming来处理流式数据。
2.1.3 网络运维3.0阶段:网络运维平台套件
可以看到网络运维2.0阶段的几个分布式大数据平台有着各自的优缺点,可以满足不同的网络运维要求。在这一阶段,几大主流的分布式大数据平台的性能已经足够满足大规模网络运维的数据处理要求。但是它们远远没有达到简单易用的程度,对操作人员的专业能力要求较高,缺少简单易用的数据开发平台。
随着大数据技术的发展,业内迫切需要开发完整、简单易用的大数据处理套件,从而实现网络运维的智能化。在网络运维3.0阶段,出现了Splunk、日志易等大数据处理软件,也有类似于ELK的开源大数据处理套件。它们都能够实现大数据的采集、存储、处理,并展示这一完整的大数据处理流程,功能十分强大。
ELK、Splunk与日志易之类的一站式大数据处理软件/组合的出现,标志着网络运维朝着智能化的方向更近了一步。开发者不需要将大量时间花费在调研数据处理的各个过程中所需系统的优劣、不同系统组合后性能是否达标等问题。这些大数据处理套件的性能足够强大,开发者可以即拿即用,节省了大量的时间。并且,经过广泛的使用与经验总结,这些系统的资料信息已经大批量地出现在网络上,开发者遇到的问题几乎都可以找到解决方案。简言之,这些套件已经是十分成熟的系统。
2.1.4 网络运维4.0阶段:智能化网络运维
数据驱动的网络运维发展到3.0阶段,大数据处理框架和平台已经能够很好地完成数据的采集、存储、处理和可视化展示等工作,功能已经十分强大,但是这些分析平台在智能化方面做得还不够出色。面对实际应用中异构日志的技术处理、故障溯源、工单分析等复杂的运维需求,它们并不能提供较为完美的解决方案[8]。下一步,我们需要在已有智能运维平台的基础上,分析具体的项目需求,结合自然语言处理、大数据挖掘和机器学习技术,开发高效的算法,研发该领域相关的可定制化高可用处理引擎,构建基于多源数据的智能运维协同分析平台[9-10]。例如,利用智能运维平台进行工单质检,加入相应的规则算法,对已经存储在平台中的工单数据的字段值进行抽取,自动筛选出诸如关键字段值为空或字段类型明显与实际不符的错误。另外,抽取工单的时间字段,比对告警发生时间与解决时间,筛选出有明显时间逻辑错误的工单。通过类似于上述两种工单的质检规则,可以自动筛选出满足算法中关于“质量不合格”定义的工单,将不合格的工单交由运维人员集中进行人工审核,这样就能够极大地减轻运维人员的工作量,提高工作效率。