[项目实战]流量日志分析系统
============================================================================一、虚拟机环境部署:1、在虚拟机中安装CentOS启动一个virtual box虚拟机管理软件(vmware,我早些年,发现不太稳定,主要是当时搭建一个hadoop大数据的集群,发现每次休眠以后再重启,集群就挂掉了)virtual ...
============================================================================
一、虚拟机环境部署:
1、在虚拟机中安装CentOS
启动一个virtual box虚拟机管理软件(vmware,我早些年,发现不太稳定,主要是当时搭建一个hadoop大数据的集群,发现每次休眠以后再重启,集群就挂掉了)
virtual box,发现很稳定,集群从来不会随便乱挂,所以就一直用virtual box了
安装virtual box
用的是什么centos镜像,CentOS比较新的版本是7了,然后服务器上装操作系统的话,内存一般比较大,一般是安装64位的,32位的有一个最大内存4G的限制
(1)使用课程提供的CentOS 7镜像即可,CentOS-7-x86_64-Minimal-1611.iso。
(2)创建虚拟机:打开Virtual Box,点击“新建”按钮,点击“下一步”,输入虚拟机名称为elasticsearch01,选择操作系统为Linux,选择版本为Red Hat-64bit,分配4096MB内存,后面的选项全部用默认,在Virtual Disk File location and size中,一定要自己选择一个目录来存放虚拟机文件,最后点击“create”按钮,开始创建虚拟机。
(3)设置虚拟机网卡:选择创建好的虚拟机,点击“设置”按钮,在网络一栏中,连接方式中,选择“Bridged Adapter”。
(4)安装虚拟机中的CentOS 7操作系统:选择创建好的虚拟机,点击“开始”按钮,选择安装介质(即本地的CentOS 7镜像文件),按照课程选择后自动安装即可
(5)安装完以后,CentOS会提醒你要重启一下,就是reboot,你就reboot就可以了。
(6)配置网络
vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
先让它动态分配一个ip地址
ONBOOT=yes
service network restart
ip addr
再设置静态ip地址
BOOTPROTO=static
IPADDR=192.168.31.250
NETMASK=255.255.255.0
GATEWAY=192.168.31.1
service network restart
ip addr
配置DNS
检查NetManager的状态:systemctl status NetworkManager.service
检查NetManager管理的网络接口:nmcli dev status
检查NetManager管理的网络连接:nmcli connection show
设置dns:nmcli con mod enp0s3 ipv4.dns "114.114.114.114 8.8.8.8"
让dns配置生效:nmcli con up enp0s3
(7)配置hosts
vi /etc/hosts
配置本机的hostname到ip地址的映射
(8)配置SecureCRT
此时就可以使用SecureCRT从本机连接到虚拟机进行操作了
一般来说,虚拟机管理软件,virtual box,可以用来创建和管理虚拟机,但是一般不会直接在virtualbox里面去操作,因为比较麻烦,没有办法复制粘贴
SecureCRT,在windows宿主机中,去连接virtual box中的虚拟机
收费的,我这里有完美破解版,跟着课程一起给大家,破解
(9)关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
关闭windows的防火墙
后面要搭建集群,有的大数据技术的集群之间,在本地你给了防火墙的话,可能会没有办法互相连接,会导致搭建失败
(10)配置yum
yum clean all
yum makecache
yum install wget
------------------------------------------------------------------------------------------
2、在每个CentOS中都安装Java
WinSCP,就是在windows宿主机和linux虚拟机之间互相传递文件的一个工具
(1)安装JDK
1、将jdk-8u131-linux-x64.rpm通过WinSCP上传到虚拟机中
2、安装JDK:rpm -ivh jdk-8u131-linux-x64.rpm
3、配置jdk相关的环境变量
vi .bashrc
export JAVA_HOME=/usr/java/latest
export PATH=$PATH:$JAVA_HOME/bin
source .bashrc
4、测试jdk安装是否成功:java -version
================================================================================================
二、logStash部署:
简单介绍一下,es在国内主要用来做什么呢
其中一个es比较重要的一个应用的领域,就是elk做一些数据分析,比如说将一些网站的用户访问的日志,通过logstash,从apache或者nginx服务器上获取到
然后将那些日志文件通过logstash导入到es中
然后通过kibana对es中的数据,进行分析,生成一些报表
小型流量分析系统
elk课程,所以我这里就不重复讲解elk了,直接默认大家对elk都有一定的认识了,如果需要学习elk,可以去龙果看另外一个讲师的课程
如果我这里重复讲解的话,那么没意思,而且对其他课程并不是太好
logstash,简单来说,就是用来从各种各样的数据源,采集数据,mysql,apache日志,mq,将数据进行一些简单的处理,然后将数据写入到其他的一些地方,比如es,mq
1、下载和解压缩logstash
2、logstash pipeline
两个组成部分:input和output,也可以包含一个可选的filter
input plugin负责从数据源中获取数据
filter plugin负责对数据进行定制化的处理和修改
output plugin负责将数据写入目的地中
3、运行最基础的logstash pipeline
bin/logstash -e 'input { stdin { } } output { stdout {} }'
-e:直接在命令行对logstash进行配置,从命令行接受输入,将输出写入命令行
输入:hello world,可以看到输出,logstash会补充timestamp和ip地址
用ctrl-d可以结束这个piepline
================================================================================================
三、整体流程解析:
流量分析系统,怎么来做,就讲解其中的一个做法和场景
1、一般来说,可以通过hive对昨日的流量日志数据,进行离线批处理,先预先按照维度将一些指标预先聚合出来,将结果写入mysql
做一点特殊的说明,因为这是一个单课,没法深入在hadoop,hive这块展开,所以这块是不讲解的,大家有兴趣的可以自己去看看一些资料
默认有一些预先处理好的数据已经存在于mysql中了
2、我们手动准备一些样例数据,然后写入mysql中,装一个mysql,模拟成是hive导入mysql的一份数据
3、通过logstash,将mysql中的数据导入es中
4、通过kibana+各种es聚合语法,生成各种各样的报表出来
================================================================================================
四、安装mysql以及手动导入样例数据
10 * 60 * 1000
用最简单的方式装一个mysql数据库,然后后面的话,就有数据库可以用来开发了
wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
rpm -ivh mysql-community-release-el7-5.noarch.rpm
yum install -y mysql-community-server
service mysqld restart
mysql -u root
set password for 'root'@'localhost' =password('password');
datekey cookie section userid province city pv is_return_visit is_bounce_visit visit_time visit_page_cnt
日期 cookie 版块 用户id 省份 城市 pv 是否老用户回访 是否跳出 访问时间 访问页面数量
create table user_access_log_aggr (
datekey varchar(255),
cookie varchar(255),
section varchar(255),
userid int,
province varchar(255),
city varchar(255),
pv int,
is_return_visit int,
is_bounce_visit int,
visit_time int,
visit_page_cnt int
)
insert into user_access_log_aggr values('20171001', 'dasjfkaksdfj33', 'game', 1, 'beijing', 'beijing', 10, 0, 1, 600000, 3);
insert into user_access_log_aggr values('20171001', 'dasjadfssdfj33', 'game', 2, 'jiangsu', 'nanjing', 5, 0, 0, 700000, 5);
insert into user_access_log_aggr values('20171001', 'dasjffffksfj33', 'sport', 1, 'beijing', 'beijing', 8, 1, 0, 800000, 6);
insert into user_access_log_aggr values('20171001', 'dasjdddksdfj33', 'sport', 2, 'jiangsu', 'nanjing', 20, 0, 1, 900000, 7);
insert into user_access_log_aggr values('20171001', 'dasjeeeksdfj33', 'sport', 3, 'jiangsu', 'nanjing', 30, 1, 0, 600000, 10);
insert into user_access_log_aggr values('20171001', 'dasrrrrksdfj33', 'news', 3, 'jiangsu', 'nanjing', 40, 0, 0, 600000, 12);
insert into user_access_log_aggr values('20171001', 'dasjtttttdfj33', 'news', 4, 'shenzhen', 'shenzhen', 50, 0, 1, 500000, 4);
insert into user_access_log_aggr values('20171001', 'dasjfkakkkfj33', 'game', 4, 'shenzhen', 'shenzhen', 20, 1, 0, 400000, 3);
insert into user_access_log_aggr values('20171001', 'dasjyyyysdfj33', 'sport', 5, 'guangdong', 'guangzhou', 10, 0, 0, 300000, 1);
insert into user_access_log_aggr values('20171001', 'dasjqqqksdfj33', 'news', 5, 'guangdong', 'guangzhou', 9, 0, 1, 200000, 2);
================================================================================================
五、使用logstash将mysql数据导入elasticsearch
1、安装es
adduser elasticsearch
passwd elasticsearch
chown -R elasticsearch /usr/local/elasticsearch
2、安装logstash-input-jdbc插件
yum install -y gem
gem sources --add https://ruby.taobao.org/ --remove https://rubygems.org/
gem sources -l
gem install bundler
bundle config mirror.https://rubygems.org https://gems.ruby-china.com/
在logstash目录下,vi Gemfile,修改 source 的值 为: "https://ruby.taobao.org"
在bin目录下,./logstash-plugin install logstash-input-jdbc
============================================================
wget https://github.com/logstash-plugins/logstash-input-jdbc/archive/v4.2.4.zip
unzip master.zip
cd logstash-input-jdbc-master
vi Gemfile,修改 source 的值 为: "https://ruby.taobao.org"
vi logstash-input-jdbc.gemspec
找到
s.files = `git ls-files`.split($\)
改为:
s.files = [".gitignore", "CHANGELOG.md", "Gemfile", "LICENSE", "NOTICE.TXT", "README.md", "Rakefile", "lib/logstash/inputs/jdbc.rb", "lib/logstash/plugin_mixins/jdbc.rb", "logstash-input-jdbc.gemspec", "spec/inputs/jdbc_spec.rb"]
gem build logstash-input-jdbc.gemspec
mv logstash-input-jdbc-4.2.4.gem /usr/local/logstash/
plugin install logstash-input-jdbc-4.2.4.gem
============================================================
3、启动logstash
在logstash目录中创建一份配置pipeline配置文件,user-access-log-pipeline.conf
input {
jdbc {
jdbc_driver_library => "/usr/local/mysql-connector-java-5.1.36-bin.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://localhost:3306/website"
jdbc_user => "root"
jdbc_password => "root"
schedule => "* * * * *"
statement => "SELECT * from user_access_log_aggr"
}
}
output {
elasticsearch {
hosts => [ "localhost:9200" ]
}
}
为了测试:schedule => "* * * * *"修改为当前时间的分钟数+2 ,如当前时间是:22:39,则schedule => "41 22 * * *"
运行下面的命令检查配置文件语法是否正确:bin/logstash -f user-access-log-pipeline.conf --config.test_and_exit
启动logstash:bin/logstash -f user-access-log-pipeline.conf --config.reload.automatic
--config.reload.automatic,会自动重新加载配置文件的内容
测试:
curl -XGET localhost:9200/_cat/indices
显示:yellow open logstash-2018.09.29 ytRVFoISTF-f2J3LmzcmzA 5 1 10 0 38.9kb 38.9kb
curl -XGET 127.0.0.1:9200/logstash-2018.09.29/_search?pretty
================================================================================================
六、安装和部署kibana
1、下载kibana
从kibana官网下载,并且解压缩
./bin/kibana,即可运行kibana,用ctrl+c可以终止kibana进程
2、配置kibana
在$KIBANA_HOME/config/kibana.yml文件中可以对kibana进行配置
server.port
server.host
elasticsearch.url
3、访问kibana web管理工作台
默认通过5601端口进行访问,通过浏览器访问即可
4、设置index pattern
我们需要为kibana配置一个index pattern来匹配es中的索引名称,默认是logstash-*,匹配logstash写入es中的数据
同时还要配置一个time-field name,那个field是timestamp类型的,这是给kibana用来按照时间进行过滤的,kibana会自动加载出来给我们选择
================================================================================================
七、基于kibana制作网站流量分析报表
对指定的版块进行查询,然后统计出如下指标的汇总
pv: 所有人的pv相加
uv: 对userid进行去重
return_visit_uv: 回访uv
total_visit_time: 总访问时长
bounce_visit_uv: 跳出次数
curl -XGET 'http://localhost:9200/logstash-2017.10.14/logs/_search?q=section:news&pretty' -d '
{
"size": 0,
"aggs": {
"pv": {"sum": {"field": "pv"}},
"uv": {"cardinality": {"field": "userid", "precision_threshold": 40000}},
"total_visit_time": {"sum": {"field": "visit_time"}},
"return_visit_uv": {
"filter": {"term": {"is_return_visit": 1}},
"aggs": {
"total_return_visit_uv": {"cardinality": {"field": "userid", "precision_threshold": 40000}}
}
},
"bounce_visit_uv": {
"filter": {"term": {"is_bounce_visit": 1}},
"aggs": {
"total_bounce_visit_uv": {"cardinality": {"field": "userid", "precision_threshold": 40000}}
}
}
}
}'
更多推荐
所有评论(0)