在数据分析领域,数据采集是所有工作的第一道工序,是一切分析的来源。在数据仓库等应用场景中,一般采用ETL进行数据采集,面向的是结构化数据,如数据库表或CSV文件。相应的工具以SQL方式为主,支持ERP、CRM等商业系统数据的采集。在日志分析等应用场景中,一般采用实时或周期性服务进行数据采集,一般面向的是非结构化数据,如日志文件、网络流量、指标类数据(如应用性能监控,APM)等,处理过程包括采集、解码、转换、清理等。
支持非结构化数据采集的开源工具有Flume、Logstash、File Beats、Fluentd、Heka等;支持结构化数据采集的开源工具有Gobblin、Chukwa、Suro、Morphlines、HIHO等。
本节就以安全分析中常用的开源日志采集工具Logstash为例进行介绍。Logstash是一个基于Ruby语言开发的数据采集框架,支持众多输入插件、处理插件、输出插件,采用JRuby作为运行时,易于部署。同时,Logstash良好兼容Elasticsearch,最早由Jordan Sissel创建,在2013年加入Elastic公司的ELK套件。
图3-1所示为Logstash的一个典型部署拓扑,从中可以看到Logstash扮演了两种不同的角色,分别是日志收集和日志解析。
·图3-1 Logstash的部署拓扑
安装Logstash非常方便,进入官网下载页面找到对应的操作系统和版本,单击下载即可。也可以采用系统软件仓库(如Cent OS的yum、Ubuntu的apt、macOS的Homebrew等)完成安装。如果必须在一些年代久远的操作系统上运行Logstash,可以用源代码包部署,但要提前安装好Java环境。
Logstash主要包含输入、处理、输出三类插件,常用输入类有文件读取、Syslog网络接收;处理类有JSON、Multiline、Date、Grok、Mutate;输出类有Elasticsearch输出、文件输出、调试输出。
1.读取文件( File )
网站访问日志分析是一个运维工程师最常见的工作之一,所以先来学习一下怎么用Logstash处理日志文件。
以下是一段读取文件的输入插件配置案例:
其中包括文件路径(path)、文件编解码类型(codec)等基本配置,也包括读取位置(sincedb)、排除(exclude)、开始位置(start_position)等高级配置。
2.接收Syslog数据( Syslog )
Syslog可能是运维领域最流行的数据传输协议,若要从设备上收集系统日志,Syslog应该是第一选择。尤其是网络设备,比如思科设备,Syslog几乎是唯一可行的办法。通过Logstash的读取Syslog数据插件可以接收各种系统和设备发送的Syslog日志报文。
下面是一段接收Syslog数据的输入插件配置案例:
3. JSON编解码
该插件可以解码JSON格式的数据源或者编码JSON格式用于数据输出。它支持两种格式,json用于解析整个JSON格式文件;json_lines用于流式地处理一行行的JSON格式文本内容。
下面是一段流式解析JSON格式UDP报文的配置案例:
4.合并多行数据
有些时候,应用程序调试日志会包含非常丰富的内容,为一个事件打印出很多行信息。这种日志通常很难通过命令行解析的方式做分析,而Logstash为此准备了codec/multiline插件。
下面是一段对文件日志进行多行处理的配置案例:
5.时间格式处理
filters/date插件可以用来解析日志记录中的时间字符串,转换变成Logstash::Timestamp对象,然后转存到@timestamp字段里。
下面是一段对日志进行时间处理的配置案例:
6. Grok正则捕获
Grok是Logstash最重要的插件。在Grok里可以预定义命名正则表达式,然后(在Grok参数或者其他正则表达式里)引用它。
比如下面的一段文本内容:
可以用如下的Grok命名正则表达式进行解析:
下面是一段对日志进行Grok解析的配置案例:
7.数据修改 (Mutate)
Mutate插件是Logstash的另一个重要插件。它提供了丰富的基础类型数据处理能力,包括类型转换、字符串处理和字段处理等。
8. Elasticsearch输出
Logstash可以将数据写入Elasticsearch。建议采用HTTP协议。和Node协议相比,它虽然性能低一点,但是可以让Logstash和Elasticsearch间不存在兼容问题。
接下来结合两个案例来看看如何组合这些Logstash的插件。
(1)数据采集案例1
Web访问日志,如Apache、Nginx访问日志,日志样例如下:
对其进行如下的输入、处理、输出模块配置,Logstash就可以进行处理并插入到Elasticsearch中。
在Elasticsearch中可以看到解析后的结构化信息:
(2)数据采集案例2
系统Syslog日志,如Linux系统日志,日志样例如下:
对其进行如下的输入、处理、输出模块配置,Logstash就可以进行处理并插入到Elasticsearch中。
在Elasticsearch中可以看到解析后的结构化信息:
完成数据采集后,就需要进行存储,以便用于后续的分析和查询。数据存储方式主要分为非结构化存储和结构化存储。接下来的几节分别以HDFS、HBase为例介绍两种不同的大数据存储。
说到大数据的起源,不能不提Google发布的关于大数据的三大技术:Google File System(大规模分布式文件系统)、MapReduce(大规模分布式计算框架)、BigTable(大规模分布式数据库)。而后Hadoop开源项目是Doug Cutting在Yahoo依据Google三大论文开始的实践,起源于Nutch分布式搜索引擎项目,并很快形成了一个庞大的用户社区和生态系统。