本实验任务主要完成基于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则为正则匹配的部分
启动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服务
访问服务器:http: //localhost (自己的ip)查看nginx的web页面
图片5 使用浏览器访问nginx
查看日志是否生成:使用命令: cat /var/log/nginx/access.log
,成功的收取日志。
图片6 查看生成的日志
通过执行命令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上生成的目录