[專案實戰]流量日誌分析系統
================================================================================================
一、虛擬機器環境部署:
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}} } } } }'