大数据实时项目-01-数据采集

一、实时计算需求

1 实时需求与离线需求的比较

离线需求,一般是根据前一日的数据生成报表,虽然统计指标、报表繁多,但是对时效性不敏感。

实时需求,主要侧重于对当日数据的实时监控,通常业务逻辑相对离线需求简单一下,统计指标也少一些,但是更注重数据的时效性,以及用户的交互性。

二、实时统计架构

1、离线

file
MySQL有分析能力,但是存储能力有限,所以,往往用来保存结果。

2、实时

file

比较

离线数据主动问数据源要数据,而实时数据不知道什么时候来数据,所以,它是被动接收数据。

三、 模拟日志生成器

1、日志生成器代码

file

2、生产jar包并拷贝到虚拟机某个目录

在拷贝的时候,将resource目录下的配置文件也一同拷贝到 jar 包同目录下,这样方便修改配置文件

创建目录:

$ mkdir /opt/applog

拷贝jar包到该目录下:

[root@centos01 applog]# pwd
/opt/applog
[root@centos01 applog]# ls -l
总用量 10868
-rw-r--r--. 1 root root      610 10月 24 18:59 application.properties
-rw-r--r--. 1 root root 11114573 10月 24 18:59 gmall2020-mock-log-2021-10-23.jar
-rw-r--r--. 1 root root     3210 10月 24 18:59 logback.xml
-rw-r--r--. 1 root root      493 10月 24 18:59 path.json

3 修改application.properties

[root@centos01 applog]# cat application.properties 
# 外部配置打开
# logging.config=./logback.xml
#业务日期
mock.date=2021-10-24

#模拟数据发送模式
mock.type=http
#http模式下,发送的地址
mock.url=http://192.168.222.10:8080/applog

#启动次数
mock.startup.count=10000
#设备最大值
mock.max.mid=50
#会员最大值
mock.max.uid=500
#商品最大值
mock.max.sku-id=10
#页面平均访问时间
mock.page.during-time-ms=20000
#错误概率 百分比
mock.error.rate=3
#每条日志发送延迟 ms
mock.log.sleep=10
#商品详情来源  用户查询,商品推广,智能推荐, 促销活动
mock.detail.source-type-rate=40:25:15:20

file

4、使用模拟日志生成器的jar 运行

java -jar gmall2020-mock-log-2021-10-23.jar

启动之后,出现了错误,这是由于网络地址还没发送:

...
Caused by: java.lang.RuntimeException: 发送失败...检查网络地址...
    at com.atgugu.gmall2020.mock.log.util.HttpUtil.post(HttpUtil.java:43)
    at com.atgugu.gmall2020.mock.log.Mocker.run(Mocker.java:119)
    at com.atgugu.gmall2020.mock.log.MockTask.mainTask(MockTask.java:23)
    at com.atgugu.gmall2020.mock.log.Gmall2020MockLogApplication.main(Gmall2020MockLogApplication.java:16)
    ... 8 more
[root@centos01 applog]# ls -l
总用量 10868
-rw-r--r--. 1 root root      615 10月 24 19:23 application.properties
drwxr-xr-x. 2 root root       51 10月 24 19:26 gmall2020
-rw-r--r--. 1 root root 11114573 10月 24 18:59 gmall2020-mock-log-2021-10-23.jar
-rw-r--r--. 1 root root     3210 10月 24 18:59 logback.xml
drwxr-xr-x. 2 root root       34 10月 24 19:26 logs
-rw-r--r--. 1 root root      493 10月 24 18:59 path.json
[root@centos01 applog]# 

四、 搭建日志采集系统集群

1、采集系统

file

2、查看宿主机通信IP

查看宿主机IP,宿主机和虚拟机里边的服务可以通信。
file

3、修改生成日志器发送地址

file

application.properties 配置文件:

[root@centos01 applog]# cat application.properties 
# 外部配置打开
# logging.config=./logback.xml
#业务日期
mock.date=2021-10-24

#模拟数据发送模式
mock.type=http
#http模式下,发送的地址
mock.url=http://192.168.222.1:8080/applog

#启动次数
mock.startup.count=10000
#设备最大值
mock.max.mid=50
#会员最大值
mock.max.uid=500
#商品最大值
mock.max.sku-id=10
#页面平均访问时间
mock.page.during-time-ms=20000
#错误概率 百分比
mock.error.rate=3
#每条日志发送延迟 ms
mock.log.sleep=5000
#商品详情来源  用户查询,商品推广,智能推荐, 促销活动
mock.detail.source-type-rate=40:25:15:20

4、启动生成日志服务

[root@centos01 applog]# java -jar gmall2020-mock-log-2021-10-23.jar

file

可以看到在服务器部署的日志生成器生成的日志,在IDEA中可以实时获取的到,至此我们打通了Linux的日志生成和Windows端的日志采集完整流程。

5、日志落盘

创建 logback.xml 日志文件:
file

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property name="LOG_HOME" value="/opt/applog/gmall2020" />
    <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.atguigu.gmall.logger.controller.LoggerController"
            level="INFO" additivity="true">
        <appender-ref ref="rollingFile" />
        <appender-ref ref="console" />
    </logger>

    <root level="error" additivity="true">
        <appender-ref ref="console" />

    </root>
</configuration>

然后重启服务,可以看到日志已经保存到根目录文件中了
file

为者常成,行者常至