1. 程式人生 > >[專案實戰]流量日誌分析系統

[專案實戰]流量日誌分析系統

================================================================================================

一、虛擬機器環境部署:

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}}         }       }     } }'