4.1 日志生成
使用尚硅谷提供的模拟生成数据的jar包,可以将日志发送给莫一个指定的端口,需要大数据程序员了解如何从指定端口接收数据和对数据进行处理的流程。
(1) 拷贝 /资料/数据生成脚本/行为数据 目录下的内容到node001的 /home/djin/work/module/rt_applog/ 目录
(2) 根据实际需要修改 application.yml
(3) 使用模拟日志生成器的 jar 运行
(4) 目前我们还没有地址接收日志,所以程序运行后的结果有如下错误
注意:ZooKeeper 从 3.5 开始,AdminServer 的端口也是 8080,如果在本机启动了 zk,那么可能看到 404、405 错误,意思是找到请求地址了,但是接收的方式不对。
4.2 日志采集模块-本地测试
4.2.1 SpringBoot 简介
SpringBoot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring
应用的初始搭建以及开发过程。 该框架使用了特定的方式来进行配置,从而使开发人员不
再需要定义样板化的配置。
1) 有了 springboot 我们就可以…
不再需要那些千篇一律,繁琐的 xml 文件。
➢ 内嵌 Tomcat,不再需要外部的 Tomcat
➢ 更方便的和各个第三方工具(mysql,redis,elasticsearch,dubbo,kafka 等等整合),而只要维护一个配置文件即可。
2) springboot 和 ssm 的关系
springboot 整合了 springmvc,spring 等核心功能。也就是说本质上实现功能的还是
原有的 spring ,springmvc 的包,但是 springboot 单独包装了一层,这样用户就不必直接
对 springmvc,spring 等,在 xml 中配置。
3) 没有 xml,我们要去哪配置
springboot 实际上就是把以前需要用户手工配置的部分,全部作为默认项。除非用户
需要额外更改不然不用配置。这就是所谓的:“约定大于配置”
如果需要特别配置的时候,去修改 application.properties(application.yml)
4.2.2 快速搭建 SpringBoot 程序 gmall-logger,采集模拟生成的日 志数据
1)在IDEA中安装lombok插件
在 Plugins 下搜索 lombok 然后在线安装即可,安装后注意重启
2) 创建空的父工程 gmall2022,用于管理后续所有的模块 module
我们这里就是为了将各个模块放在一起,但是模块彼此间还是独立的,所以创建一个 Empty Project 即可;如果要是由父 module 管理子 module,需要将父 module 的 pom.xml 文件的
3) 新建 SpringBoot 模块,作为采集日志服务器
- 在父 project 下增加一个 Module,选择 Spring Initializr,并设置国内源,项目名称等

- 选择版本以及通过勾选自动添加 lombok、SpringWeb、Kafka 相关依赖

完成之后开始下载依赖,完整的 pom.xml 文件如下 ```xml <?xml version=”1.0” encoding=”UTF-8”?> <project xmlns=”http://maven.apache.org/POM/4.0.0“ xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0 com.djin gmall-logger 0.0.1-SNAPSHOT gmall-logger gmall-logger 1.8 UTF-8 UTF-8 2.4.1 org.springframework.boot spring-boot-starter-web org.springframework.kafka spring-kafka org.projectlombok lombok true org.springframework.boot spring-boot-starter-test test org.springframework.kafka spring-kafka-test test org.springframework.boot spring-boot-dependencies ${spring-boot.version} pom import org.apache.maven.plugins maven-compiler-plugin 3.8.1 1.8 1.8 UTF-8 org.springframework.boot spring-boot-maven-plugin 2.4.1 com.djin.gmalllogger.GmallLoggerApplication repackage repackage
4. 创建 LoggerController 输出 SpringBoot 处理流程
```java
package com.djin.gmalllogger.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
@Slf4j
public class LoggerController {
@Autowired
private KafkaTemplate<String, String> kafkaTemplate;
@RequestMapping("test")
public String test1() {
System.out.println("success");
return "success";
}
@RequestMapping("test2")
public String test2(@RequestParam("name") String nm,
@RequestParam(value = "age", defaultValue = "23") int age) {
System.out.println(nm + ":" + age);
return "success";
}
@RequestMapping("applog")
public String geting(@RequestParam("param") String jsonStr) {
//打印数据
System.out.println(jsonStr);
//将数据落盘
// log.debug(jsonStr);
log.info(jsonStr);
// log.warn(jsonStr);
// log.error(jsonStr);
// log.trace(jsonStr);
//将数据写入Kafka
// kafkaTemplate.send("ods_base_log", jsonStr);
return "success";
}
}
- 运行 GmallLoggerApplication,启动内嵌 Tomcat

- 用浏览器测试并查看控制台输出
4.2.3 SpringBoot 整合Kafka
1) 修改SpringBoot核心配置文件applicatin.propeties
# 应用名称
spring.application.name=gmall-logger
# 应用服务 WEB 访问端口
server.port=8083
#============kafka============
# 指定kafka代理地址,可以多个
spring.kafka.bootstrap-servers=node001:9092,node002:9092,node003:9092
# 指定消息key和消息体的编解码方式
spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer
2) 在 LoggerController 中添加方法,将日志落盘并发送到 Kafka 主题中
3) 在 Resources 中添加 logback.xml 配置文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="LOG_HOME" value="E:/study/logs"/>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%msg%n</pattern>
</encoder>
</appender>
<appender name="rollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/app.%d{yyyy-MM-dd}.log</fileNamePattern>
</rollingPolicy>
<encoder>
<pattern>%msg%n</pattern>
</encoder>
</appender>
<!-- 将某一个包下日志单独打印日志 -->
<logger name="com.djin.gmalllogger.controller.LoggerController"
level="INFO" additivity="false">
<appender-ref ref="rollingFile"/>
<appender-ref ref="console"/>
</logger>
<root level="error" additivity="false">
<appender-ref ref="console"/>
</root>
</configuration>
➢ logback 配置文件说明
◼ appender
追加器,描述如何写入到文件中(写在哪,格式,文件的切分)
ConsoleAppender—追加到控制台
RollingFileAppender—滚动追加到文件
◼ logger
控制器,描述如何选择追加器
注意:要是单独为某个类指定的时候,别忘了修改类的全限定名
◼ 日志级别
TRACE
[DEBUG INFO WARN ERROR]
FATAL
4) 修改 node001 上的 rt_applog 目录下的 application.yml 配置文件
注意:mock.url 设置为自身 Windows 的 IP 地址
5) 测试
➢ 运行 Windows 上的 Idea 程序 LoggerApplication
➢ 运行 rt_applog 下的 jar 包
➢ 启动 kafka 消费者进行测试
kafka-console-consumer.sh --bootstrap-server node001:9092,node002:9092,node003:9092 --topic ods_base_log
4.3 日志采集模块-打包单机部署
4.3.1 修改gmall-logger中的logback.xml 配置日志路径
4.3.2 打包

4.3.3 将打好包的jar包上传到node001的/home/djin/work/module/rt_applog 目录
4.3.4 修改/home/djin/work/module/rt_applog/application.yml
http 模式下,发送的地址
mock.url=http://node001:8083/applog
4.3.5 测试
➢ 运行 rt_applog目录下的gmall-logger-1.0.jar
➢ 运行 rt_applog 下的 gmall2020-mock-log-2020-12-18.jar 包
➢ 启动 kafka 消费者进行测试
kafka-console-consumer.sh --bootstrap-server node001:9092,node002:9092,node003:9092 --topic ods_base_log
4.4 日志采集模块-打包集群部署,并用Nginx进行反向代理
4.4.1 搭建Nginx环境,将监听端口修改为web请求端口8083
搭建:参见第6章 附录1:Nginx教程
修改端口
4.4.2 将日志采集的jar包同步到node002,node003
pssh -h /node.list mkdir -p /home/djin/work/module
pscp -h /node.list -r /home/djin/work/module/rt_applog /home/djin/work/module/
pssh -h /node.list -i ls /home/djin/work/module
4.4.3 修改模拟日志生成的配置
发送到的服务器路径修改为 nginx 的,我的nginx和之前测试的同一台服务器
vim /home/djin/work/module/rt_applog/application.yml
4.4.4 测试
➢ 运行 kafka 消费者,准备消费数据
kafka-console-consumer.sh --bootstrap-server node001:9092,node002:9092,node003:9092 --topic ods_base_log
➢ 启动 nginx 服务
/opt/src/nginx/sbin/nginx
➢ 运行采集数据的 jar
[root@node001 rt_applog]# java -jar gmall-logger-1.0.jar
[root@node002 rt_applog]# java -jar gmall-logger-1.0.jar
[root@node003 rt_applog]# java -jar gmall-logger-1.0.jar
➢ 运行模拟生成数据的 jar
[root@node001 rt_applog]# java -jar gmall2020-mock-log-2020-12-18.jar
4.4.5 集群群起脚本
将采集日志服务(nginx 和采集日志数据的 jar 启动服务)放到脚本中。
在/home/djin/bin 目录下创建gmall-logger.sh,并授予执行权限
(base) [root@node001 bin]# cat gmall-logger.sh
#!/bin/bash
JAVA_BIN=/usr/local/java/bin/java
APPNAME=gmall-logger-1.0.jar
case $1 in
"start")
{
for node in node001 node002 node003
do
echo "=======:start gmall-logger in $node"
ssh $node "$JAVA_BIN -Xms32m -Xmx64m -jar /home/djin/work/module/rt_applog/$APPNAME >/dev/null 2>&1 &"
done
};;
"stop")
{
for node in node001 node002 node003
do
echo "=======:stop gmall-logger in $node"
ssh $node "ps -ef|grep $APPNAME|grep -v grep|awk '{print \$2}'|xargs kill" >/dev/null 2>&1 &
done
};;
esac
4.4.6 再次测试
➢ 运行 kafka 消费者,准备消费数据
kafka-console-consumer.sh --bootstrap-server node001:9092,node002:9092,node003:9092 --topic ods_base_log
➢ 启动 nginx 服务采集服务集群
[root@node001 bin]# gmall-logger.sh start
➢ 运行模拟生成数据的 jar
[root@node001 rt_applog]# java -jar gmall2020-mock-log-2020-12-18.jar


