ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

项目数据准备

2022-04-24 21:00:06  阅读:170  来源: 互联网

标签:hadoop201 项目 hui module nginx 准备 org 日志 数据


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 应用的初始搭建以及开发过程。 该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。

  • 不再需要那些千篇一律,繁琐的xml文件。
  • 内嵌Tomcat,不再需要外部的Tomcat
  • 更方便的和各个第三方工具(mysql,redis,elasticsearch,dubbo,kafka等等整合),而只要维护一个配置文件即可。

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

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

  • ConsoleAppender--追加到控制台
  • RollingFileAppender--滚动追加到文件

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有