赞
踩
<property name="LOG_HOME" value="/opt/module/rt_gmall/gmall2022" />
<logger name="com.hzy.gmall.controller.LoggerController"
注意:路径和上面创建的路径保持一致,根据自己的实际情况进行修改
#指定使用的端口号
server.port=8081
启动kafka消费者进行测试。
bin/kafka-console-consumer.sh --bootstrap-server hadoop101:9092 --topic ods_base_log
运行hadoop101上的rt_gmall下的日志处理jar包
java -jar gmall2022-logger-0.0.1-SNAPSHOT.jar
运行rt_applog下的jar包,生产日志文件。
java -jar gmall2022-mock-log-2022-11-28.jar
cd /opt/module/rt_gmall/gmall2022
进入上述文件夹,查看是否有日志文件产生。
模拟日志产生,将生成的日志信息发送给hadoop101,8081端口的日志采集服务,日志采集服务接收到产生的日志信息,打印到控制台,落盘,最后发送到kafka主题中,kafka消费者消费到数据,打印到控制台。
这时出现一个问题,如果当一台日志采集服务器忙不过来时,就需要添加多台机器(集群),通过Nginx转发请求,如下图(待修改,完整图例见标题3)。
Nginx (“engine x”) 是一个高性能的HTTP和反向代理服务器,特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
Nginx 是由俄罗斯人 Igor Sysoev 采用C语言开发编写的,第一个公开版本0.1.0发布于2004年10月4日。
正向代理类似一个跳板机,代理访问外部资源。比如:我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器,它能访问那个我不能访问的网站,于是我先连上代理服务器,告诉它我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器,如从租户的角度出发,房东将房子交给中介,中介再将房租给租户。
# 在hadoop101上运行yum,安装相关依赖包 sudo yum -y install openssl openssl-devel pcre pcre-devel zlib zlib-devel gcc gcc-c++ # 将nginx-1.12.2.tar.gz上传到/opt/software下 # 解压 tar -zxvf nginx-1.12.2.tar.gz # 进入解压缩目录,执行 ./configure --prefix=/opt/module/nginx make && make install # 在/opt/module/nginx/sbin目录下执行 ./nginx # 如果在给root用户下面启动会报错 # 原因:nginx占用80端口,默认情况下非root用户不允许使用1024以下端口 # 解决:让当前用户的某个应用也可以使用1024以下的端口 sudo setcap cap_net_bind_service=+eip /opt/module/nginx/sbin/nginx # 注意:要根据自己的实际路径进行配置 # 查看启动情况 ps -ef |grep nginx # 因为nginx不是用java写的,所以不能通过jps查看 # 在浏览器中输入http://hadoop101:80访问
结果如下图:
# 重启Nginx ./nginx -s reload # 关闭Nginx ./nginx -s stop # 通过配置文件启动 ./nginx -c /opt/module/nginx/conf/nginx.conf /opt/module/nginx/sbin/nginx -c /opt/module/nginx/conf/nginx.conf # 其中-c是指定配置文件,而且配置文件路径必须指定绝对路径 # 配置检查 # 当修改Nginx配置文件后,可以使用nginx命令进行配置文件语法检查,用于检查Nginx配置文件语法是否正确 /sbin/nginx -c /opt/module/nginx/conf/nginx.conf -t # 如果80端口号被占用,一般是网络服务启动造成(httpd) sudo systemctl stop httpd sudo systemctl disable httpd # 部分机器启动时报错: /usr/local/nginx/sbin/nginx: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory # 解决: ln -s /usr/local/lib/libpcre.so.1 /lib64
Nginx核心配置文件位于Nginx安装目录(/opt/module/nginx/conf)下,名字为nginx.conf。
基本配置
server配置,可以有多个
# 在server内部配置,拦截请求
location /applog{
# 指定代理服务器
proxy_pass http://www.logserver.com;
}
# 在server外部,http内部配置
upstream www.logserver.com{
# 配置代理服务器
server hadoop101:8081 weight=1;
server hadoop102:8081 weight=2;
server hadoop103:8081 weight=3;
}
# 将日志采集的jar包同步到hadoop102和hadoop103
xsync.sh /opt/module/rt_gmall/
# 在三台机器上,启动采集服务
cd /opt/module/rt_gmall/
java -jar gmall2022-logger-0.0.1-SNAPSHOT.jar
# 启动一台kafka消费者
bin/kafka-console-consumer.sh --bootstrap-server hadoop101:9092 --topic ods_base_log
# 启动nginx
# 修改日志生成器中的
mock.url: "http://hadoop101:80/applog"
# 执行日志生成器
结果如图:
注意:图片中红色标记表示的程序的执行顺序。
整体架构如图:
将采集日志服务(nginx和采集日志数据的jar启动服务)放到脚本中。
在/home/hzy/bin目录下创建logger.sh,并授予执行权限。
#!/bin/bash JAVA_BIN=/opt/module/jdk1.8.0_212/bin/java APPNAME=gmall2022-logger-0.0.1-SNAPSHOT.jar case $1 in "start") { for i in hadoop101 hadoop102 hadoop103 do echo "========: $i===============" ssh $i "$JAVA_BIN -Xms32m -Xmx64m -jar /opt/module/rt_gmall/$APPNAME >/dev/null 2>&1 &" done echo "========NGINX===============" /opt/module/nginx/sbin/nginx };; "stop") { echo "======== NGINX===============" /opt/module/nginx/sbin/nginx -s stop for i in hadoop101 hadoop102 hadoop103 do echo "========: $i===============" ssh $i "ps -ef|grep $APPNAME |grep -v grep|awk '{print \$2}'|xargs kill" >/dev/null 2>&1 done };; esac
启动zookeeper,kafka和一个kafka消费者。
启动脚本。
为在页面查看到结果,在三台机器上执行tail -f gmall20/app.log
。
执行日志生成脚本,查看结果。
目前程序框架图如下:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。