其他分享
首页 > 其他分享> > 项目数据准备

项目数据准备

作者:互联网

1、日志数据模拟生成

这里模拟日志的思路和采集一样,但是并没有直接将日志生成到文件,而是将日志发送给某一个指定的端口,需要大数据程序员了解流程

(1)    拷贝模拟器(用户行为)内容到hadoop201的/opt/module/rt_applog目录

-rw-rw-r--. 1 hui hui      607 Apr 24 05:07 application.properties
drwxrwxr-x. 2 hui hui       51 Apr 24 05:07 gmall2020
-rw-rw-r--. 1 hui hui 11114596 Dec 17  2020 gmall2020-mock-log-2020-05-10.jar
-rw-rw-r--. 1 hui hui     3220 Dec 17  2020 logback.xml
drwxrwxr-x. 2 hui hui       62 Apr 24 00:39 logs
-rw-rw-r--. 1 hui hui      493 Dec 17  2020 path.json

(2)    根据实际需要修改application.properties

[hui@hadoop201 rt_applog]$ less application.properties
# 外部配置打开
logging.config=./logback.xml

#业务日期
mock.date=2022-04-23

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

(3)    使用模拟日志生成器的jar 运行

[hui@hadoop201 rt_applog]$ java -jar gmall2020-mock-log-2020-05-10.jar 

2、开发SparingBoot 采集模拟生成的日志

2.1、SpringBoot 简介

Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。 该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。

Springboot 和 ssm 的关系:springboot整合了springmvc ,spring等核心功能。也就是说本质上实现功能的还是原有的spring ,springmvc的包,但是springboot单独包装了一层,这样用户就不必直接对springmvc, spring等,在xml中配置。

SpringBoot 配置文件:Springboot实际上就是把以前需要用户手工配置的部分,全部作为默认项。除非用户需要额外更改不然不用配置。这就是所谓的:“约定大于配置”如果需要特别配置的时候,去修改application.properties  (application.yml)

2.2、创建空的父工程gmall2020-parent,用于管理后续所有的模块module

我们这里就是为了将各个模块放在一起,但是模块彼此间还是独立的,所以创建一个Empty Project即可;如果要是由父module管理子module,需要将父module的pom.xml文件的<packaging>设置为pom

 

创建SpringBoot 项目

 (1)    父project下创建创建SprintBoot项目

(2)    配置项目名称gmall2020-logger

(3)    选择版本以及通过勾选自动添加依赖

 

 (4)    完成之后开始下载依赖,完整的pom.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">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.7</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>org.wdh01.logger</groupId>
    <artifactId>gmall0423-logger</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>gmall0423-logger</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka-test</artifactId>
            <scope>test</scope>
        </dependency>
       </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <!--修改版本-->
                <version>3.1.0</version>
            </plugin>

        </plugins>
    </build>

</project>

(5)    在Idea中安装Lombok插件

(6)    创建LoggerController接收来自/applog的日志

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 接收模拟器生成的日志数据并进行处理
 */

//@RestController = Controller + ResponseBody,方法返回 Object,底层转换为JSON字符串进行响应
@RestController //将对象的创建交由 Spring 容器
@Slf4j
public class LoggerController {

    @Autowired //Autowired 将 kafkaTemplate 注入到 Controller 中
            KafkaTemplate kafkaTemplate;// Springboot 对 kafka 支持

    //http://localhost:8080/applog

    //声明方法处理生成的日志数据

    // @RequestMapping("/applog") //将 /applog 交由该方法处理
    //@RequestBody 从请求体中获取数据
    @RequestMapping("/applog")
    public String applog(@RequestBody String mockLog) {
        //System.out.println(mockLog);
        log.info(mockLog);
        //根据日志内容判断日志类型并发送到不同的主题中
        //将日志转换为 json对象
        JSONObject jsonObject = JSON.parseObject(mockLog);
        JSONObject startJson = jsonObject.getJSONObject("start");
        if (startJson != null) {
            //启动日志
            kafkaTemplate.send("gmall_start_0423", mockLog);
        } else {
            //事件日志
            kafkaTemplate.send("gmall_event_0423", mockLog);
        }
        return "success";
    }
}

2.3、logBack 的使用

(1)    在LoggerController上加@Slf4j注解,并通过log.info记录日志

@RestController //将对象的创建交由 Spring 容器
@Slf4j //引入 logBack
public class LoggerController {

(2)    在gmall2020-logger的resources中添加logback.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <!--LOG_HOME 日志落盘路径,window 运行是 落到项目所在根目录下 /opt/module/rt_gmall -->
    <property name="LOG_HOME" value="/opt/module/rt_gmall" />
    <!--appender name="console"  控制台输出 -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%msg%n</pattern>
        </encoder>
    </appender>
    <!--appender name="rollingFile"  文件滚动 -->
    <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="org.wdh01.logger.controller.LoggerController"
            level="INFO" additivity="false">
        <appender-ref ref="rollingFile" />
        <appender-ref ref="console" />
       <!-- org.wdh01.gmall.controller.LoggerControlle 这个类的日志即控制台输出,也进行滚动落盘-->
    </logger>

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

(3)    logback配置文件说明

appender

追加器,描述如何写入到文件中(写在哪,格式,文件的切分)

logger

控制器,描述如何选择追加器

注意:要是单独为某个类指定的时候,别忘了修改类的全限定名

日志级别

TRACE          [DEBUG INFO     WARN   ERROR]        FATAL

2.4、SpringBoot 打包单独搞集群上

(1)    在hadoop201 的/opt/module目录下创建rt_gmall目录

[hui@hadoop201 module]$ pwd
/opt/module
[hui@hadoop201 module]$ mkdir rt_gmall

(2)    Idea中修改application.properties端口号

#============== kafka ===================
# 指定kafka 代理地址,可以多个
spring.kafka.bootstrap-servers=hadoop201:9092,hadoop202:9092,hadoop203:9092
# 指定消息key和消息体的编解码方式
spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer
#----------port---------
server.port=8989

因为在ZooKeeper从3.5开始,AdminServer的端口也是8080

(3)    打包

 上传

[hui@hadoop201 rt_gmall]$ pwd
/opt/module/rt_gmall
[hui@hadoop201 rt_gmall]$ ll
total 33508
-rw-rw-r--. 1 hui hui    63208 Apr 24 05:07 app.log
-rw-rw-r--. 1 hui hui 34246128 Apr 23 21:30 gmall0423-logger-0.0.1-SNAPSHOT.jar

3、Nginx  反向负载均衡日志服务

3.1、Nginx 简介

Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

Nginx 是由俄罗斯人 Igor Sysoev 采用C语言开发编写的,第一个公开版本0.1.0发布于2004年10月4日。

Igor Sysoev出生于1970年的阿拉木图(哈萨克斯坦共和国城市),也就是前苏联。1991年苏联解体,哈萨克斯坦宣布独立,Nginx作者1994年毕业于莫斯科国立鲍曼技术大学;毕业后继续在莫斯科工作和生活,就职于NGINX,Inc,任CTO。https://www.nginx.com/

正向代理&反向代理

正向代理类似一个跳板机,代理访问外部资源。比如:我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器,它能访问那个我不能访问的网站,于是我先连上代理服务器,告诉它我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器;

Nginx 安装

1、安装环境准备

sudo yum -y install openssl openssl-devel pcre pcre-devel zlib zlib-devel gcc gcc-c++

 2、解压 nginx

[hui@hadoop201 software]$ tar -zxvf nginx-1.12.2.tar.gz 

3、进入解压缩目录,执行安装

[hui@hadoop201 nginx-1.12.2]$ 
./configure   --prefix=/opt/module/nginx
make && make install

安装成功后,/opt/module/nginx目录下结构

drwxrwxr-x. 2 hui hui 4096 Apr 24 04:58 conf
drwxr-xr-x. 2 hui hui   40 Apr 24 04:15 html
drwxrwxr-x. 2 hui hui   58 Apr 24 04:59 logs
drwxrwxr-x. 2 hui hui   19 Apr 24 04:15 sbin

启动 

在/opt/module/nginx/sbin目录下执行  ./nginx

如果在hui用户下面启动会报错

原因:nginx占用80端口,默认情况下非root用户不允许使用1024以下端口

解决:让当前用户的某个应用也可以使用1024以下的端口

sudo setcap cap_net_bind_service=+eip /opt/module/nginx/sbin/nginx

注意:要根据自己的实际路径进行配置

ps -ef |grep nginx

./nginx  -s reload

./nginx  -s  stop

3.2、Nginx 配置

在server内部配置
location /applog{
proxy_pass http://www.logserver.com;
}
在server外部配置反向代理
upstream www.logserver.com{
        server hadoop201:8989 weight=1;
        server hadoop202:8989 weight=2;
        server hadoop203:8989 weight=3;
    }

(1)    将日志采集的模块jar包同步到hadoop202和hadoop203

[hui@hadoop201 module]$ sxync.sh rt_gmall/

(2)    集群群起脚本 将采集日志服务(nginx和采集日志数据的jar启动服务)放到脚本

#!/bin/bash
JAVA_BIN=/opt/module/jdk1.8/bin/java
APPNAME=gmall0423-logger-0.0.1-SNAPSHOT.jar
 
case $1 in
 "start")
   {
 
    for i in hadoop202 hadoop203 hadoop201
    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  hadoop202 hadoop203 hadoop201
    do
     echo "========: $i==============="
     ssh $i "ps -ef|grep $APPNAME |grep -v grep|awk '{print \$2}'|xargs kill" >/dev/null 2>&1
    done
  };;
   esac 

标签:hadoop201,项目,hui,module,nginx,准备,org,日志,数据
来源: https://www.cnblogs.com/wdh01/p/16183709.html