电商日志分析项目 – 02 日志的生成和采集(Flume)

Hadoop安装与配置

Hadoop3.1.4的单机安装参考

Flume的安装与配置

Flume的安装与配置参考

Apache httpd 安装

安装httpd的原因主要是使用它提供的ab压测工具.

  1. 安装httpd

  1. 配置httpd,为了避免和ngixn端口冲突修改端口号为81,配置如下:

修改内容如下:

  1. 启动服务

  1. 查看启动状态

注意:

  • 其实使用httpd只是为了使用ab工具,无需启动httpd服务

AB压测生成日志

访问http://hadoop100/university/ 登陆进入后台界面

后台UI界面生成商品链接

点击获取商品链接,页面打印生成的JSON格式数据
file

同时在服务器生成文件/tmp/project-urls.txt,里面保存着所有商品链接:

后台UI界面AB压测生成日志

编写压测脚本ab_test.sh,内容可自行修改,如下:

说明:

  • 给与执行权限方便执行
  • shuf在指定范围生成随机数
  • ab apache benchmark工具,常用于压力测试
    • -n 请求数
    • -c 并发数
  • 压测结果可在/tmp/project-abtest-resuilts.log中找到

压测结果说明
file

点击AB压测生成日志
file

产生的日志在/var/log/nginx/access.log中。

使用FLume收集滚动日志上传到HDFS上

修改nginx生成的日志文件所有者

nginx默认生成的日志文件access.log的用户组和用户分别是adm和nginx,如下所示:

而现在需要让另一用户读取该文件,做日志的分析监控. 应该修改日志文件的所属用户组和用户,避免出现权限问题。

修改Nginx运行时进程的用户与组

Nginx运行时进程需要有用户与组的支持,用以实现对网站文件读取时进行访问控制。主进程由 root创建,子进程由指定的用户与组创建, 一般默认为 nginx admnobody nobody

由于我们项目中使用的操作账户为hadoop,而这个用户对nginx用户生成的日志没有操作权限,因此使用Flume收集时会出现权限问题导致收集失败。

当然也可以简单粗暴的临时使用下面的命令解决问题

但是这样并不能从根本解决问题,因为下次滚动生成的日志所有者还会变成原来配置的。

修改 nginx 用户与组有两种办法。如果是编译安装,可以在编译前指定用户和组;也可以修改配置文件指定用户与组,然后重启服务器即可。

编译 nginx 时指定用户与组

即修改 ./configure 后面指定用户与组的参数

修改 nginx 配置文件指定用户与组

打开文件/etc/nginx/nginx.conf,我这里默认是

现在我们改成

sudo service nginx restart重启服务后,查看进程情况,主进程由root创建,子进程则由nginx创建。

file

修改 Nginx 日志滚动策略

可以通过修改这个文件修改 Nginx 的日志滚动策略(如有需要)

其中nginx adm就是滚动日志的权限拥有者及所在群组, 640表示滚动日志的权限。下面比如我们需要将滚动日志的用户组和用户改为hadoop:hadoop, 只需要修改此处:

滚动access.log日志文件

接着编写Linux Shell脚本实现/var/log/nginx/access.log日志滚动到flume-logs目录下。

/opt/bin/project目录下新建rolling-log.sh,并添加执行权限,内容如下:

后台管理界面点击生成滚动日志

file

编写Flume Agent配置文件:

创建脚本flume_start.sh,用于启动Flume Agent

编写停止Flume脚本 flume_stop.sh,停止Flume

编写重启Flume脚本 flume-log2hdfs.sh,综合了前两个脚本

后台管理界面点击启动FLume采集
file

查看滚动日志是否成功上传到HDFS系统

file

异常: 日志收集失败,报错:

原因: flume/lib/guava-xxx.jar 和 hadoop自带的jar包发生冲突

解决: 将flume/lib下的guava包删除或者改名, 只保留hadoop的版本即可

Views: 128