实时项目统计实战之一

实时项目统计实战之一

更多干货

简单代码事例

https://github.com/csy512889371/learndemo/tree/master/spark-streaming-kafka

一、需求说明
  • 今天到现在为止的每个类别的访问量
  • 今天到现在为止从搜索引擎引流过来的类别的访问量
  • 今天到现在为止每个栏目下面的销售额
  • 今天到现在为止每个省份的购买量

image

项目使用的技术点

image

javaweb log -> flume -> kafka -> sparkStreaming -> Hbase -> Spring boot -> echart

二、互联网访问日志概述

1、为什么要记录访问日志的行为呢?

  • 通过日志我们可以得到网站页面的访问量,网站的黏性,推荐
  • 用户行为分析,是指在获得网站访问量基本数据的情况下,对有关数据进行统计、分析,从中发现用户访问网站的规律,并将这些规律与网络营销策略等相结合,从而发现目前网络营 销活动中可能存在的问题,并为进一步修正或重新制定网络营销策略提供依据。这是狭义的只指网络上的用户行为分析。

2、重点分析的数据

用户行为分析应该包含以下数据重点分析:

  • 用户的来源地区、来路域名和页面;
  • 用户在网站的停留时间、跳出率、回访者、新访问者、回访次数、回访相隔天数;
  • 注册用户和非注册用户,分析两者之间的浏览习惯;
  • 用户所使用的搜索引擎、关键词、关联关键词和站内关键字;
  • 用户选择什么样的入口形式(广告或者网站入口链接)更为有效;
  • 用户访问网站流程,用来分析页面结构设计是否合理;
  • 用户在页面上的网页热点图分布数据和网页覆盖图数据;
  • 用户在不同时段的访问量情况等:
  • 用户对于网站的字体颜色的喜好程度。

3、日志格式字段:

ip 地址 用户名 访问时间 访问的模块地址 使用的方式 .....

意义:

通过对用户行为监测获得的数据进行分析,可以让企业更加详细、清楚地了解用户的行为习惯,从而找出网站、推广渠道等企业营销环境存在的问题,有助于企业发掘高转化率页面,让企业的营销更加精准、有效,提高业务转化率,从而提升企业的广告收益。

4、日志分析

www/2 --代表电视剧
www/1 --代表电影
www/6 --综艺
www/4 -- 动漫
www/3 -- 记录篇

5、使用 Python 脚本实时产生数据

因为我们要使用实时数据,不可能从主站拿到,只能模仿,我们一般使用是脚本 python 或者 java

generate.py

# coding=UTF-8
import random
import time

url_paths = [
    "www/2",
    "www/1",
    "www/6",
    "www/4",
    "www/3",
    "pianhua/130",
    "toukouxu/821"
]

status_code = [404, 302, 200]

ip_slices = [132, 156, 124, 10, 29, 167, 143, 187, 30, 100]

http_referers = [
    "https://www.baidu.com/s?wd={query}",
    "https://www.sogou.com/web?qu={query}",
    "http://cn.bing.com/search?q={query}",
    "https://search.yahoo.com/search?p={query}"
]

search_keyword = [
    "猎场",
    "快乐人生",
    "极限挑战",
    "我的体育老师",
    "幸福满院"
]


# ip地址
def sample_ip():
    slice = random.sample(ip_slices, 4)
    return ".".join([str(item) for item in slice])


def sample_url():
    return random.sample(url_paths, 1)[0]


def sample_status():
    return random.sample(status_code, 1)[0]


def sample_referer():
    if random.uniform(0, 1) > 0.2:
        return "-"
    refer_str = random.sample(http_referers, 1)
    # print refer_str[0]
    query_str = random.sample(search_keyword, 1)
    # print query_str[0]
    return refer_str[0].format(query=query_str[0])


# 产生log
def generate_log(count=10):
    time_str = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
    f = open("F:\\api\\logs\log.txt","w+")
    # f = open("/home/centos/log/log", "a+")
    while count >= 1:
        query_log = "{ip}\t{localtime}\t\"GET {url} HTTP/1.0\"\t{referece}\t{status1}".format(ip=sample_ip(),
                                                                                              url=sample_url(),
                                                                                              status1=sample_status(),
                                                                                              referece=sample_referer(),
                                                                                              localtime=time_str)
        # print query_log
        f.write(query_log + "\n")
        count = count - 1;


if __name__ == '__main__':
    generate_log(100)
# print "1111"

python 3

python generate.py

生成的结果:

30.29.187.10	2018-05-04 11:42:16	"GET www/2 HTTP/1.0"	-	302
187.30.167.143	2018-05-04 11:42:16	"GET www/2 HTTP/1.0"	-	404
30.143.187.124	2018-05-04 11:42:16	"GET toukouxu/821 HTTP/1.0"	-	200
132.187.167.100	2018-05-04 11:42:16	"GET www/4 HTTP/1.0"	https://www.baidu.com/s?wd=快乐人生	200
124.187.29.100	2018-05-04 11:42:16	"GET pianhua/130 HTTP/1.0"	-	200
30.143.187.124	2018-05-04 11:42:16	"GET www/6 HTTP/1.0"	-	404
29.167.187.132	2018-05-04 11:42:16	"GET www/1 HTTP/1.0"	https://www.baidu.com/s?wd=极限挑战	302
187.10.29.132	2018-05-04 11:42:16	"GET www/1 HTTP/1.0"	-	302
187.30.156.29	2018-05-04 11:42:16	"GET toukouxu/821 HTTP/1.0"	-	302

5、通过调度器工具每一分钟产生一批数据

linux crontab

image


实例 1:每 1 分钟执行一次 command
命令:
*/1 * * * * command


实例 2:每小时的第 3 和第 15 分钟执行
命令:
3,15 * * * * command


实例 3:在上午 8 点到 11 点的第 3 和第 15 分钟执行
命令:
3,15 8-11 * * * command


实例 4:每隔两天的上午 8 点到 11 点的第 3 和第 15 分钟执行
命令:
3,15 8-11 */2 * * command


实例 5:每个星期一的上午 8 点到 11 点的第 3 和第 15 分钟执行
命令:
3,15 8-11 * * 1 command


实例 6:每晚的 21:30 重启 smb
命令:
30 21 * * * /etc/init.d/smb restart


实例 7:每月 1、10、22 日的 4 : 45 重启 smb
命令:
45 4 1,10,22 * * /etc/init.d/smb restart


实例 8:每周六、周日的 1 : 10 重启 smb
命令:
10 1 * * 6,0 /etc/init.d/smb restart


实例 9:每天 18 : 00 至 23 : 00 之间每隔 30 分钟重启 smb
命令:
0,30 18-23 * * * /etc/init.d/smb restart


实例 10:每星期六的晚上 11 : 00 pm 重启 smb
命令: 
0 23 * * 6 /etc/init.d/smb restart


实例 11:每一小时重启 smb
命令:
* */1 * * * /etc/init.d/smb restart


实例 12:晚上 11 点到早上 7 点之间,每隔一小时重启 smb
命令:
* 23-7/1 * * * /etc/init.d/smb restart


实例 13:每月的 4 号与每周一到周三的 11 点重启 smb
命令:
0 11 4 * mon-wed /etc/init.d/smb restart


实例 14:一月一号的 4 点重启 smb
命令:
0 4 1 jan * /etc/init.d/smb restart

每一分钟执行一次
crontab 表达式: */1 * * * *


vi log_generator.sh

chmod u+x log_generator.sh

./log_generator.sh

crontab -e

*/1 * * * * /home/centos/logs/log_generator.sh
tail -200f log 以追加的方式查询日志
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值