Flume-NG + HDFS + HIVE 日志收集分析

简介: 国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私募机构九鼎控股打造,九鼎投资是在全国股份转让系统挂牌的公众公司,股票代码为430719,为“中国PE第一股”,市值超1000亿元。

国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html
内部邀请码:C8E245J (不写邀请码,没有现金送)
国内私募机构九鼎控股打造,九鼎投资是在全国股份转让系统挂牌的公众公司,股票代码为430719,为中国PE第一股,市值超1000亿元。 

------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

最近做了一个POC,目的是系统日志的收集和分析,此前有使用过splunk,虽然用户体验很好,但一是价格昂贵,二是不适合后期开发(splunk已经推出了SDK,后期开发已经变得非常容易)。在收集TB级别的日志量上flume-ng是更好的选择,因为后面的存储是扩展性极佳的HDFS。先简要介绍一下测试环境:
5台VM机器(RHEL6.3):
1, collector01
2, namenode
3, datanode01
4, datanode02
5, datanode03
第一台机器collector01用户日志收集,数据汇总到collector01后写入hdfs, 其余4台仅服务Hadoop相关服务,其上安装了CDH4.0,HDFS/MapReduce/hive等等。
注意:
1, flume-ng如需将数据写入hdfs,本机也同样需要安装hadoop 相关的package
2, CDH4.0在使用中遇到不少bug,浪费了一些时间,建议使用CDH3 (当初选在CDH4.0 是因为有impala package,但此次测试并未加入impala部分)

Flume-NG基本概念

Apache Flume-NG是一个分布式,可靠的日志收集,聚合系统,最早由cloudera开发,现已经并入Apache社区,相比较之前的flume-og (Flume)而言,结构更精简清晰(没有了master,collecter的概念)部署更容易。

flume-ng

如上图,Flume-NG有3个重要的概念

1, Source

2, Channel

3, Sink

正如其名字所示例的那样, Source是数据源,Channel负责数据的传送,而Sink则是数据的目的地。Flume-NG中很重要的一点就是:一个flume instance的Sink可以是另外一个flume instance的source,这样就可以首尾相连,形成一条链。log 数据也就可以传送到任意地方,最终进入HDFS存储。Source/Channel/Sink各自有不同的Type,适用不同的场景,具体可以参看文档,我这里就不赘述了,下面就简单介绍一下我POC过程中使用的配置情况:

Flume-NG Agent and Client 

Agent:

运行主机: collector01

Hadoop 版本: CDH 4.0 (如前所述,如需sink到HDFS, hadoop相关的package需要安装)

Flume-NG 版本: 1.3.0

Flume-NG 位置: /data/apache-flume-1.3.0-bin

Haoop HDFS name node: hdfs://namenode:8020

Flume-NG Agent 配置文件:

[root@collector01 apache-flume-1.3.0-bin]# cat /data/apache-flume-1.3.0-bin/conf/flume.conf # Define a memory channel called c1 on a1 a1.channels.c1.type = memory # Define an Avro source called r1 on a1 and tell it # to bind to 0.0.0.0:41414. Connect it to channel c1. a1.sources.r1.channels = c1 a1.sources.r1.type = avro a1.sources.r1.bind = 0.0.0.0 a1.sources.r1.port = 41414 a1.sinks.k1.type = hdfs a1.sinks.k1.channel = c1 a1.sinks.k1.hdfs.path = hdfs://namenode:8020/user/hive/warehouse/squid a1.sinks.k1.hdfs.filePrefix = events- a1.sinks.k1.hdfs.fileType = DataStream a1.sinks.k1.hdfs.writeFormat = Text a1.sinks.k1.hdfs.rollSize = 0 a1.sinks.k1.hdfs.rollInterval= 0 a1.sinks.k1.hdfs.rollCount = 600000 a1.sinks.k1.hdfs.rollInterval = 600 # # Finally, now that we've defined all of our components, tell # a1 which ones we want to activate. a1.channels = c1 a1.sources = r1 a1.sinks = k1

运行Agent:

bin/flume-ng agent --conf ./conf/ -f conf/flume.conf -Dflume.root.logger=DEBUG,console -n a1

运行以上命令后, flume-ng将会在启动avro Source监听41414端口, 等待日志进入。参数 “-Dflume.root.logger=DEBUG,console”仅为debug用途,这样当log数据进入的时候可以清新看到具体情况,请勿在真实环境使用,否则terminal会被log淹没。
以上配置文件将会把41414端口侦测到的日志写入HDFS hdfs://namenode:8020/user/hive/warehouse/squid. 且每 600000 行roll out成一个一个新文件。

Client:

bin/flume-ng avro-client --conf conf -H collector01 -p 41414 -F /root/1024.txt -Dflume.root.logger=DEBUG,console

在客户主机上运行此命令,将会把日志文件 /root/1024.txt上传到collector01:41414端口。flume-ng当然也可以配置检控日志文件的变化(tail -F logfile),参看exec source的文档
一下为HDFS中收集到的日志:
hdfs data
使用HiVE分析数据:

Hive 将会利用hdfs中的log进行分析, 你需要写好相应的分析SQL语句,hive将调用 map reduce完成你的分析任务。我测试用的log是squid log,log entry如下:

1356867313.430 109167 10.10.10.1 TCP_MISS/200 51498 CONNECTsecurepics.example.com:443 – HIER_DIRECT/securepics.example.com -

若要适应hive分析,就需要在hdfs数据的基础上create table. 而最重要的一步就是根据log的内容来写正则表达式,匹配log中的每一列。

 

[ ]*([0-9]*)[^ ]*[ ]*([^ ]*) ([^ ]*) ([^ |^ /]*)/([0-9]*) ([0-9]*) ([^ ]*) ((?:([^:]*)://)?([^/:]+):?([0-9]*)?(/?[^ ]*)) ([^ ]*) ([^/]+)/([^ ]+) (.*)
只能使用basic re是很让人头疼的,意味着没法使用d, s, w这样的语法。在写以上正则的时候,这个网站 http://rubular.com帮了我大忙。可以动态查看到正则的结果。

 

在Hive中运行如下命令创建Table:
 

hive>

CREATE EXTERNAL TABLE IF NOT EXISTS squidtable(ttamp STRING, duration STRING,
clientip STRING, action STRING, http_status STRING, bytes STRING, method STRING,
uri STRING, proto STRING, uri_host STRING, uri_port STRING, uri_path STRING,
username STRING, hierarchy STRING, server_ip STRING, content_type STRING)
ROW FORMAT SERDE ‘org.apache.hadoop.hive.contrib.serde2.RegexSerDe’
WITH SERDEPROPERTIES (
input.regex” = “[ ]*([0-9]*)[^ ]*[ ]*([^ ]*) ([^ ]*) ([^ |^ /]*)/([0-9]*) ([0-9]*) ([^ ]*) ((?:([^:]*)://)?([^/:]+):?([0-9]*)?(/?[^ ]*)) ([^ ]*) ([^/]+)/([^ ]+) (.*)”,
“output.format.string” = “%1$s %2$s %3$s %4$s %5$s %6$s %7$s %8$s %9$s %10$s %11$s %12$s %13$s %14$s %15$s %16$s”
)
STORED AS TEXTFILE
LOCATION ‘/user/hive/warehouse/squid';

一些分析SQL例子:

# How many log entry inside table select count(*) from squidtable; # How many log entry inside table with client ip 10.10.10.1 select count(*) from squidtable where clientip = "10.10.10.1"; # some advance query SELECT clientip, COUNT(1) AS numrequest FROM squidtable GROUP BY clientip SORT BY numrequest DESC LIMIT 10;
相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
|
27天前
|
数据采集 缓存 大数据
【赵渝强老师】大数据日志采集引擎Flume
Apache Flume 是一个分布式、可靠的数据采集系统,支持从多种数据源收集日志信息,并传输至指定目的地。其核心架构由Source、Channel、Sink三组件构成,通过Event封装数据,保障高效与可靠传输。
151 1
|
SQL 分布式计算 Hadoop
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
227 4
|
SQL 分布式计算 Hadoop
Hadoop-19 Flume Agent批量采集数据到HDFS集群 监听Hive的日志 操作则把记录写入到HDFS 方便后续分析
Hadoop-19 Flume Agent批量采集数据到HDFS集群 监听Hive的日志 操作则把记录写入到HDFS 方便后续分析
244 2
|
存储 数据采集 分布式计算
Hadoop-17 Flume 介绍与环境配置 实机云服务器测试 分布式日志信息收集 海量数据 实时采集引擎 Source Channel Sink 串行复制负载均衡
Hadoop-17 Flume 介绍与环境配置 实机云服务器测试 分布式日志信息收集 海量数据 实时采集引擎 Source Channel Sink 串行复制负载均衡
231 1
|
SQL 分布式计算 关系型数据库
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
319 0
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
3473 31
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
6月前
|
监控 容灾 算法
阿里云 SLS 多云日志接入最佳实践:链路、成本与高可用性优化
本文探讨了如何高效、经济且可靠地将海外应用与基础设施日志统一采集至阿里云日志服务(SLS),解决全球化业务扩展中的关键挑战。重点介绍了高性能日志采集Agent(iLogtail/LoongCollector)在海外场景的应用,推荐使用LoongCollector以获得更优的稳定性和网络容错能力。同时分析了多种网络接入方案,包括公网直连、全球加速优化、阿里云内网及专线/CEN/VPN接入等,并提供了成本优化策略和多目标发送配置指导,帮助企业构建稳定、低成本、高可用的全球日志系统。
764 54
|
11月前
|
监控 安全 Apache
什么是Apache日志?为什么Apache日志分析很重要?
Apache是全球广泛使用的Web服务器软件,支持超过30%的活跃网站。它通过接收和处理HTTP请求,与后端服务器通信,返回响应并记录日志,确保网页请求的快速准确处理。Apache日志分为访问日志和错误日志,对提升用户体验、保障安全及优化性能至关重要。EventLog Analyzer等工具可有效管理和分析这些日志,增强Web服务的安全性和可靠性。
327 9
|
9月前
|
存储 SQL 关系型数据库
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log、原理、写入过程;binlog与redolog区别、update语句的执行流程、两阶段提交、主从复制、三种日志的使用场景;查询日志、慢查询日志、错误日志等其他几类日志
750 35
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log

热门文章

最新文章

下一篇