智能运维之道:基于AI技术的应用实践
上QQ阅读APP看书,第一时间看更新

3.1.3 数据采集及辅助处理技术

在一个完整的生产系统中(如图3-1所示),除了上述离线及实时数据处理核心模块外,还需要数据采集、任务调度、数据迁移导出等辅助模块,而这些辅助模块均有相应的开源工具。在智能运维系统中这些工具依然通用,本节将对各工具使用方法做简要介绍。

1.数据采集

数据采集是将智能运维所需的业务数据转存至智能运维平台,所接入的数据一般包含性能指标数据、业务日志数据、用户行为数据、网络探针数据、运维流程数据、监控预警数据等。

数据采集目前应用较为广泛的组件是Flume, Flume可以高效地将多个服务器采集的日志信息转移到下游消息队列或文件系统中去。Flume中最核心的角色是Agent,图3-13所示每个Agent由Source、Sink、Channel 3部分组成。Agent在采集过程中扮演传递者的角色。图3-14所示为Flume集群模式,多个Agent组合连接构成分布式采集系统。

● Source:采集源,对接数据源,获取上游数据。

● Sink:下沉目标,数据采集后的目的地,连接下一级Agent或者落入存储系统。

● Channel:数据传输通道,将数据从Source传输到Sink。

Flume可以单Agent模式,也可以多Agent集群部署。在开发过程中,只需要编写配置文件指定各环节的采集源、下沉目标及数据传输方式,就能很容易地实现数据采集系统。

图3-13 Flume单机模式

图3-14 Flume集群模式

2.任务调度

一个完整的智能运维系统通常会包含大量的子任务单元,而任务单元间常常会存在先后的依赖关系。为了高效串联起各子任务,就需要一个任务流调度组件来分配调度子任务。在业务简单、时效要求低的场景下,可以直接使用Linux系统自带的Crontab来完成;在业务较复杂的情况下,就需要如Azkaban、Ooize的开源任务调度组件来实现。

Azkaban、Ooize等任务调度组件提供了Web用户界面便于用户操作,用户可以自定义任务间的依赖关系。当前置任务失败时,可以设置任务自动重启,同时提供了工作流的日志记录和审查功能,能有效降低系统的运维工作量。

3.数据迁移

在传统的业务系统中,常用关系型数据库如MySQL或者Oracle存储数据。在系统升级到分布式计算或想利用Hadoop生态组件实现计算时,原有的数据就涉及迁移和传送。

Sqoop是一种提供Hadoop与关系型数据库高效传输的工具,其底层原理是Hadoop的MapReduce任务。图3-15展示了Sqoop将数据从关系型数据库导出到HDFS的流程图。在导入HDFS之前,Sqoop会查询表中各列的数据类型,运行的MapReduce程序则根据原有的数据类型来保存相应的值。

图3-15 Sqoop数据导入机制