目的
提供业务数据计算分析平台
设计
数据平台草图.jpg组件
名称 | 作用 | 备注 |
---|---|---|
hbase | 数据存储 | 分布式存储 |
redis | 分布式缓存 | |
kafka | 消息队列 | |
flume(或) | 日志分发收集 | 日志分发至消息队列或其他中间件 |
logstash (或) | 日志分发收集 | 日志分发至消息队列或其他中间件 |
springcloud | REST API 服务 | 日志服务api,数据中心api等 |
spark | 计算 服务 | (ETL,Streaming,机器学习) |
hive | 数据存储 | 保存结构化数据,存储ETL数据 |
*** | 调度平台 | 调度任务执行 |
1. 日志服务
1.1 日志收集格式(json)
{app:"应用标识","version":"应用版本号","xwhen:"发生时间",xwhere:"发生地点",xwhat:"事件名称",xact:"事件类型",xcontext:{"上下文信息1 key":"上下文信息1","上下文信息2 key":"上下文信息2"}}
1.2 日志采集方式
(1) Spring REST API + logback采集 (针对移动端)
(2) Spring+logback埋点(服务端)
1.3 spring cloud Logback 配置
<!-- https://mvnrepository.com/artifact/net.logstash.logback/logstash-logback-encoder -->
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>5.2</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.15</version>
</dependency>
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<springProperty scope="context" name="logLevel" source="log.level"/>
<springProperty scope="context" name="logPath" source="log.path"/>
<!--引入默认的一些设置-->
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<!--级别配置-->
<logger name="org.springframework.web" level="info"/>
<logger name="com.gofine" level="DEBUG"/>
<!--写入日志到控制台的appender,用默认的,但是要去掉charset,否则windows下tomcat下乱码-->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度,%-4line:行号,%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %-40.40logger{39} [%-3line] : %msg%n</pattern>
</encoder>
</appender>
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>192.168.0.60:4560</destination>
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" />
</appender>
<!--写入日志到文件的appender-->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--<file>mgr-log.txt</file>-->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>/data/logs/gofine-dataSite-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- each file should be at most 10MB, keep 60 days worth of history, but at most 10GB -->
<maxFileSize>10MB</maxFileSize>
<maxHistory>60</maxHistory>
<totalSizeCap>10GB</totalSizeCap>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度,%-4line:行号,%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %-40.40logger{39} [%-3line] : %msg%n</pattern>
</encoder>
</appender>
<!--异步到文件-->
<appender name="asyncFileAppender" class="ch.qos.logback.classic.AsyncAppender">
<!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
<discardingThreshold>0</discardingThreshold>
<!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
<queueSize>500</queueSize>
<!-- 添加附加的appender,最多只能添加一个 -->
<appender-ref ref="FILE"/>
</appender>
<root level="info">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="asyncFileAppender"/>
</root>
<logger name="com.gofine.dataSite" level="INFO">
<appender-ref ref="LOGSTASH"/>
</logger>
</configuration>
1.4 日志分发服务
logstash 配置:
logstash-6.4.0/serv_conf/logback.conf
input {
tcp {
port => 4560
codec => json
}
}
output {
kafka {
topic_id => "test"
codec => plain {
format => "%{message}"
}
}
}
1.5 消息队列 kafka
创建topic
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
网友评论