未经许可,禁止以任何形式转载,若要引用,请标注链接地址
全文共计3279字,阅读大概需要3分钟
一、 任务描述
本实验任务主要完成基于ubuntu环境使用nginx+flume的工作方式进行数据采集。通过完成本实验任务,要求学生了解并掌握nginx的安装、nginx的基础语法、采集数据方法以及配置格式,为从事大数据平台运维工程师、大数据技术支持工程师等岗位工作奠定夯实的技能基础。
二、 任务目标
掌握flume的应用原理
掌握nginx+flume对日志信息的采集过程
三、 任务环境
本次环境是:Ubuntu16.04+flume-ng-1.5.0-cdh5.3.6
四、 任务分析
Flume是Cloudera提供的日志收集系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理操作,并写到各种storage。Flume是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统。本试验就是通过学习flume工具实现对指定目录下所有的日志文件数据信息进行采集并实时把采集到的信息保存到hdfs中指定的位置。
♥ 知识链接
Flume拦截器
已有的拦截器有:
Timestamp Interceptor :在event的header中添加一个key叫:timestamp,value为当前的时间戳。这个拦截器在sink为hdfs 时很有用,后面会举例说到
Host Interceptor:在event的header中添加一个key叫:host,value为当前机器的hostname或者ip。
Static Interceptor:可以在event的header中添加自定义的key和value。
Regex Filtering Interceptor:通过正则来清洗或包含匹配的events。
Regex Extractor Interceptor:通过正则表达式来在header中添加指定的key,value则为正则匹配的部分
五、 任务实施
步骤1、nginx配置
启动nginx服务
图片1 启动nginx服务
使用命令进入nginx.conf文件下:vi /etc/nginx/nginx.conf,编辑文件(完整代码如下)
1. #user nginx; 2. worker_processes 1; 3. 4. error_log /var/log/nginx/error.log warn; 5. pid /var/run/nginx.pid; 6. 7. 8. events { 9. worker_connections 1024; 10. } 11. 12. 13. http { 14. include /etc/nginx/mime.types; 15. default_type application/octet-stream; 16. 17. log_format main "$remote_addr,[$time_local]$http_user_agent"$request""; 18. # "$status $body_bytes_sent "$http_referer" " 19. # ""$http_user_agent" "$http_x_forwarded_for""; 20. 21. access_log /var/log/nginx/access.log main; 22. 23. sendfile on; 24. #tcp_nopush on; 25. 26. keepalive_timeout 65; 27. 28. #gzip on; 29. server { 30. listen 80; 31. server_name localhost; 32. 33. #charset koi8-r; 34. 35. access_log /var/log/nginx/access.log main; 36. 37. location / { 38. root /web/baidu; 39. index index.html index.htm; 40. } 41. 42. } 43. include /etc/nginx/conf.d/*.conf; 44. 45. }
图片2 展示nginx配置代码
在/web/baidu下创建index.html文件,编写展示的内容
图片3 编辑访问的html文件
重启nginx服务
图片4 重启nginx服务
步骤2、日志收集
访问服务器:http: //localhost (自己的ip)查看nginx的web页面
图片5 使用浏览器访问nginx
查看日志是否生成:使用命令: cat /var/log/nginx/access.log,成功的收取日志。
图片6 查看生成的日志
步骤3、使用Flume把日志数据写入到HDFS中
通过执行命令start-all.sh启动hadoop,修改配置文件:进入conf目录下:cd /simple/flume/conf/自己创建一个配置文件,使用命令:touch test2.conf
修改配置文件内容:
1. agent.sources = r1 2. agent.sinks = k1 3. agent.channels = c1 4. 5. ## common 6. agent.sources.r1.channels = c1 7. agent.sinks.k1.channel = c1 8. 9. ## sources config 10. agent.sources.r1.type = exec 11. ##监听的日志位置 12. agent.sources.r1.command = tail -F /var/log/nginx/access.log 13. agent.sources.r1.interceptors = t1 14. agent.sources.r1.interceptors.t1.type = timestamp 15. 16. 17. ## channels config 18. agent.channels.c1.type = memory 19. agent.channels.c1.capacity = 1000 20. agent.channels.c1.transactionCapacity = 1000 21. agent.channels.c1.byteCapacityBufferPercentage = 20 22. agent.channels.c1.byteCapacity = 1000000 23. agent.channels.c1.keep-alive = 60 24. 25. #sinks config 26. agent.sinks.k1.type = hdfs 27. agent.sinks.k1.channel = c1 28. #存放的hdfs位置 29. agent.sinks.k1.hdfs.path = hdfs://localhost:9000/usr/logsdata/%m/%d 30. agent.sinks.k1.hdfs.fileType = DataStream 31. agent.sinks.k1.hdfs.filePrefix = ZD-%H-%H 32. agent.sinks.k1.hdfs.fileSuffix=.log 33. agent.sinks.k1.hdfs.minBlockReplicas=1 34. agent.sinks.k1.hdfs.rollInterval=3600 35. agent.sinks.k1.hdfs.rollSize=132692539 36. agent.sinks.k1.hdfs.idleTimeout=10 37. agent.sinks.k1.hdfs.batchSize = 1 38. agent.sinks.k1.hdfs.rollCount=0 39. agent.sinks.k1.hdfs.round = true 40. agent.sinks.k1.hdfs.roundValue = 2 41. agent.sinks.k1.hdfs.roundUnit = minute
进入flume的bin目录下,使用命令:./flume-ng agent -f /simple/flume/conf/test2.conf -c ../conf/ -n agent -Dflume.root.logger=INFO,console
图片7 启动flume
没有出现错误提示,一直在监听服务器是否产生日志。
图片8 监听服务器
执行命令:hadoop fs -ls /usr/logsdata/查看是否上传到hdfs系统上(07目录即为生成的存放文件的目录)
图片9 查看hdfs上生成的目录