12、es----案例:小型流量分系統

一、vm工具

1、Oracle VM VirtualBox(虛擬機)中安裝中安裝CentOS

用的是什麼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地址

再設置靜態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

 

二、logstash

1、es常用來做什麼?
其中一個es比較重要的一個應用的領域,就是elk做一些數據分析,比如說將一些網站的用戶訪問的日誌,通過logstash,從apache或者nginx服務器上獲取到,然後將那些日誌文件通過logstash導入到es中。然後通過kibana對es中的數據,進行分析,生成一些報表

2、logstash是做什麼的?
logstash,簡單來說,就是用來從各種各樣的數據源,採集數據,mysql,apache日誌,mq,將數據進行一些簡單的處理,然後將數據寫入到其他的一些地方,比如es,mq

(一)logstash安裝與使用

1、下載和解壓縮logstash

2、logstash pipeline--->輸入、輸出
三個組成部分:input和output,也可以包含一個可選的filter
input plugin負責從數據源中獲取數
filter plugin負責對數據進行定製化的處理和修改
output plugin負責將數據寫入目的地中

3、運行最基礎的logstash pipeline--->輸入、輸出
bin/logstash -e 'input { stdin { } } output { stdout {} }'--->啓動成功可看到:Pipeline main started
-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安裝與數據準備

1、安裝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

2、啓動mysql:
service mysqld restart

3、進入mysql:
mysql -u root 

4、給mysql設置密碼:
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 是否老用戶回訪  是否跳出             訪問時間   訪問頁面數量

5、創建表:
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
)

6、數據準備
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插件
安裝gem:
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://ruby.taobao.org

在logstash目錄下,vi Gemfile,修改 source 的值 爲: "https://ruby.taobao.org"

在bin目錄下,./logstash-plugin install logstash-input-jdbc

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" ]
    }
}

運行下面的命令檢查配置文件語法是否正確: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,會自動重新加載配置文件的內容

4、在es上驗證:
curl -XGET localhost:9200/logstash-2017.10.14/_search?pretty

 

五、安裝kibana

1、下載kibana
從kibana官網下載,並且解壓縮
./bin/kibana,即可運行kibana,用ctrl+c可以終止kibana進程

2、配置kibana
在$KIBANA_HOME/config/kibana.yml文件中可以對kibana進行配置
server.port--->設置本機ip
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製作網站流量分析報表

1、對指定的版塊進行查詢,然後統計出如下指標的彙總

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章