Flume-NG + HDFS + HIVE 日志收集分析
国内私募机构九鼎控股打造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有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中收集到的日志:
使用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 -
[ ]*([0-9]*)[^ ]*[ ]*([^ ]*) ([^ ]*) ([^ |^ /]*)/([0-9]*) ([0-9]*) ([^ ]*) ((?:([^:]*)://)?([^/:]+):?([0-9]*)?(/?[^ ]*)) ([^ ]*) ([^/]+)/([^ ]+) (.*)
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;
Flume-NG + HDFS + HIVE 日志收集分析的更多相关文章
- Flume-NG + HDFS + HIVE日志收集分析
摘自:http://blog.csdn.net/cnbird2008/article/details/18967449
- Flume + HDFS + Hive日志收集系统
最近一段时间,负责公司的产品日志埋点与收集工作,搭建了基于Flume+HDFS+Hive日志搜集系统. 一.日志搜集系统架构: 简单画了一下日志搜集系统的架构图,可以看出,flume承担了agent与 ...
- syslog-ng日志收集分析服务搭建及配置
syslog-ng日志收集分析服务搭建及配置:1.网上下载eventlog_0.2.12.tar.gz.libol-0.3.18.tar.gz.syslog-ng_3.3.5.tar.gz三个软件: ...
- 用ELK搭建简单的日志收集分析系统【转】
缘起 在微服务开发过程中,一般都会利用多台服务器做分布式部署,如何能够把分散在各个服务器中的日志归集起来做分析处理,是一个微服务服务需要考虑的一个因素. 搭建一个日志系统 搭建一个日志系统需要考虑一下 ...
- ELK:日志收集分析平台
简介 ELK是一个日志收集分析的平台,它能收集海量的日志,并将其根据字段切割.一来方便供开发查看日志,定位问题:二来可以根据日志进行统计分析,通过其强大的呈现能力,挖掘数据的潜在价值,分析重要指标的趋 ...
- ELK/EFK——日志收集分析平台
ELK——日志收集分析平台 ELK简介:在开源的日志管理方案之中,最出名的莫过于ELK了,ELK由ElasticSearch.Logstash和Kiabana三个开源工具组成.1)ElasticSea ...
- ELK日志收集分析系统配置
ELK是日志收益与分析的利器. 1.elasticsearch集群搭建 略 2.logstash日志收集 我这里的实现分如下2步,中间用redis队列做缓冲,可以有效的避免es压力过大: 1.n个ag ...
- 基于logstash+elasticsearch+kibana的日志收集分析方案(Windows)
一 方案背景 通常,日志被分散的储存不同的设备上.如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志.这样是不是感觉很繁琐和效率低下.开源实时日志分析ELK平台能够完美的 ...
- logstash+elasticsearch+kibana搭建日志收集分析系统
来源: http://blog.csdn.net/xifeijian/article/details/50829617 日志监控和分析在保障业务稳定运行时,起到了很重要的作用,不过一般情况下日志都分散 ...
随机推荐
- JS面向对象组件(五) -- 复制对象(拷贝继承)
研究到这儿,竟然出现了一个面试题目 var a = { name : '小明' }; var b = a; b.name = '小强'; alert( a.name ); 结果必然是“小强”,原因是对 ...
- 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境:2.搭建环境-2.4. 安装JDK
2.4.安装JDK 2.4.1.准备JDK 在百度搜索:JDK下载 2.4.2.上传JDK put E:\软件安装文件\jdk-8u11-linux-x64.rpm /home/linuxrac1/D ...
- struts2 action 返回图片流
数据库为mssql zp字段为image类型 java代码 OutputStream out = null; try { String contenttype = "image/jpeg&q ...
- [Papers]NSE, $u$, Lorentz space [Sohr, JEE, 2001]
$$\bex \bbu\in L^{p,r}(0,T;L^{q,\infty}(\bbR^3)),\quad\frac{2}{p}+\frac{3}{q}=1,\quad 3<q<\inf ...
- Loadrunner 性能指标定位系统瓶颈
判断CPU瓶颈 1, %processor time 平均值大于95 2, processor queue length大于2 (大于处理器个数+1).可以确定CPU瓶颈 3, CPU空闲时间为零(z ...
- 序列for循环语句
序列for循环语句 序列for循环语句允许重复遍历一组序列,而这组序列可以是任何可以重复遍历的序列,如由begin()和end()函数定义的STL序列.所有的标准容器都可用作这种序列,同时它也同样可以 ...
- OPENGL学习笔记整理(五):着色语言
有些事情本身就是十分奇怪的.在传统上,图形硬件的设计目的是用于快速执行相同的硬编译指令集.不同的计算步骤可以被跳过,参数可以被调整,但计算本身确实固定不变的.然而,随着技术的发展,却越来越变得可以编程 ...
- 【LeetCode】104 - Maximum Depth of Binary Tree
Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the long ...
- PHPSTORM 与 Xdebug 配合调试
基本的配置可以参考网上的文档, 浏览器中装插件(xdebug)或直接在请求中加上如下的参数也可启动调试 ?XDEBUG_SESSION_START=PHPSTORM
- ubuntu 下安装sh 文件
1. cd 到 指定文件夹 如: cd /home/ddy/下载 2. sudo chmod +x *.sh 3. sudo ./*.sh ok 了 (1)数据预处理 可以用下载好的数据集,也可 ...