基于阿里云數(shù)加·StreamCompute快速構(gòu)建網(wǎng)站日志實時分析大屏

引用鏈接地址https://www.aliyun.com/jiaocheng/19206.html?spm=5176.100033.2.5.535e1e7f5RJgf0

【Best Practice】基于阿里云數(shù)加·StreamCompute快速構(gòu)建網(wǎng)站日志實時分析大屏


摘要:前幾天在云棲社區(qū)上寫了一篇普惠性的文章,很粗偏向數(shù)據(jù)架構(gòu)層面煮甥。具體可以進(jìn)入:【數(shù)據(jù)架構(gòu)解讀】基于阿里云數(shù)加StreamCompute和MaxCompute構(gòu)建的訪問日志統(tǒng)計分析,但是在具體實操中肯定不會那么一帆風(fēng)順畸冲。為了避免大家走彎路特意先寫了一篇架構(gòu)篇,以免大家后續(xù)發(fā)現(xiàn)不適用而更改或優(yōu)化工作茉贡。本文偏向與實操層面的為大家介紹,如何基于阿里云數(shù)加StreamCompute、DataV快速構(gòu)建網(wǎng)站日志實時分析场晶÷羌冢【什么場景適合用流計算】流計算提供了針對流式數(shù)據(jù)實時分析的一站式工具鏈

前幾天在云棲社區(qū)上寫了一篇普惠性的文章,很粗偏向數(shù)據(jù)架構(gòu)層面式撼。具體可以進(jìn)入:【數(shù)據(jù)架構(gòu)解讀】基于阿里云數(shù)加StreamCompute和MaxCompute構(gòu)建的訪問日志統(tǒng)計分析,但是在具體實操中肯定不會那么一帆風(fēng)順。為了避免大家走彎路特意先寫了一篇架構(gòu)篇,以免大家后續(xù)發(fā)現(xiàn)不適用而更改或優(yōu)化工作溯警。

本文偏向與實操層面的為大家介紹,如何基于阿里云數(shù)加StreamCompute、DataV快速構(gòu)建網(wǎng)站日志實時分析狡相。

【什么場景適合用流計算】

流計算提供了針對流式數(shù)據(jù)實時分析的一站式工具鏈,對于大量流式數(shù)據(jù)存在實時分析梯轻、計算、處理的邏輯可以考慮通過流計算該任務(wù)谣光。舉例如下:

1. 針對實時營銷活動,需要實時獲取活動流量數(shù)據(jù)分析以了解活動的營銷情況,此時可以上流計算檩淋。

2. 針對物聯(lián)網(wǎng)設(shè)備監(jiān)控,需要實時獲取設(shè)備數(shù)據(jù)進(jìn)行實時災(zāi)難監(jiān)控,此時可以上流計算。

3. 對于手機(jī)APP數(shù)據(jù)實時分析,需要實時了解手機(jī)設(shè)備的各類指標(biāo)情況,此時可以上流計算

【使用前須知】

為保障本教程的順利的進(jìn)行,須知曉如下使用前提:

具備阿里云賬號(淘寶及1688帳號可直接使用會員名登錄);?

下載并安裝Logstash的DataHub Output插件萄金。?

開通DataHub/StreamCompute/AnalyticDB或RDS/DataV產(chǎn)品;

【實現(xiàn)的業(yè)務(wù)場景】

數(shù)據(jù)來源于某網(wǎng)站上的HTTP訪問日志數(shù)據(jù),基于這份網(wǎng)站日志來實現(xiàn)如下分析需求:

實時統(tǒng)計并展現(xiàn)網(wǎng)站的PV和UV,并能夠按照用戶的終端類型(如Android蟀悦、iPad、iPhone氧敢、PC等)分別統(tǒng)計日戈。?

實時統(tǒng)計并展現(xiàn)網(wǎng)站的流量來源。?

從IP中解析出region或者經(jīng)緯度在地圖上進(jìn)行展示孙乖。

【說明】瀏覽次數(shù)(PV)和獨立訪客(UV)是衡量網(wǎng)站流量的兩項最基本指標(biāo)浙炼。用戶每打開一個網(wǎng)站頁面,記錄一個PV,多次打開同一頁面PV 累計多次份氧。獨立訪客是指一天內(nèi),訪問網(wǎng)站的不重復(fù)用戶數(shù),一天內(nèi)同一訪客多次訪問網(wǎng)站只計算1 次。Referer 可以分析網(wǎng)站訪問來源,它是網(wǎng)站廣告投放評估的重要指標(biāo),還可以用于分析用戶偏好等弯屈。

【操作流程概述】

如上圖所示,紅色箭線部分為流式數(shù)據(jù)處理部分,主要拆解如下:

l?配置Logstash,將網(wǎng)站產(chǎn)生的日志實時采集至DataHub蜗帜。

l?申請開通DataHub,創(chuàng)建項目Project及Topic(DataHub服務(wù)訂閱和發(fā)布的最小單位)。

l?開通StreamCompute,創(chuàng)建項目Project及注冊數(shù)據(jù)輸入源(DataHub)和輸出源(RDS),并創(chuàng)建流任務(wù)(Stream SQL任務(wù))资厉。

l?上一步驟中關(guān)于輸出源RDS的配置,需要事先購買RDS for Mysql資源厅缺。

l?申請開通DataV,新建RDS數(shù)據(jù)源并創(chuàng)建DataV項目進(jìn)入大屏制作。

【數(shù)據(jù)結(jié)構(gòu)設(shè)計】

DataHub Topic: 分別創(chuàng)建Topic為:coolshell_log_tracker宴偿、coolshell_log_detail湘捎、coolshell_log_fact。?

RDS:分別創(chuàng)建Table為:adm_refer_info窄刘、adm_user_measures窥妇、flyingline_coordinates?????

【網(wǎng)站日志實時解析】

Logstash安裝與配置?

配置前須知

阿里云流計算為了方便用戶將更多數(shù)據(jù)采集進(jìn)入DataHub,提供了針對Logstash的DataHub Output插件。

Logstash安裝要求JRE 7版本及以上,否則部分工具無法使用娩践。

操作步驟

步驟1點擊下載Logstash 2.4.1,點擊下載活翩。

步驟2通過如下命令解壓即可使用:

$ tar -xzvf logstash-2.4.1.tar.gz

$ cd logstash-2.4.1

步驟3下載DataHub Logstash Output插件并使用如下命令進(jìn)行安裝:

$ {LOG_STASH_HOME}/bin/plugin install --local logstash-output-datahub-1.0.0.gem

步驟4下載GeoIP解析IP數(shù)據(jù)庫到本地。

wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz

步驟5解壓到當(dāng)前路徑并移動到Logstash具體路徑下欺矫。

gzip -d GeoLiteCity.dat.gz?

mv GeoLiteCity.dat /etc/logstash/.?

步驟6配置Logstash任務(wù).conf,示例如下:

input {?

file {?

path => "/Users/yangyi/logstash-2.4.1/sample/coolshell_log.log"?

start_position => "beginning"?

}?

}filter{?

grok {?

match => {?

"message" => "(??[^ ]*) - (??[- ]*) /[(??[^/])*]/] /"(??/S+)(?: +(??[^/"]*?)(?: +/S*)?)?(?: +(??[^/"]*))/" (??[^ ]*) (??[^ ]*) /"(??[^/"]*)/" /"(??[^/"]*)/""?

}?

}?

geoip {?

source => "ip"?

fields => ["city_name","latitude", "longitude"]?

target => "geoip"?

database => "/Users/yangyi/logstash-2.4.1/bin/GeoLiteCity.dat"?

add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]?

add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}"]?

}?

mutate {?

add_field=>{"region" => "%{[geoip][city_name]}"}?

add_field=>{"coordinates" => "%{[geoip][coordinates]}"}?

add_field=>{"x" => "%{[geoip][longitude]}"}?

add_field=>{"y" => "%{[geoip][latitude]}"}?

convert => [ "x", "float" ]?

convert => [ "y", "float" ]?

#convert => [ "coordinates", "float" ]?

}?

ruby{?

code => "?

md = event.get('accesstime')?

event.set('dt',DateTime.strptime(md,'%d/%b/%Y:%H:%M:%S').strftime('%Y%m%d'))?

"?

}?

}output {?

datahub {?

access_id => "輸入您的access_id"?

access_key => "輸入您的access_key"?

endpoint => "需要根據(jù)自己的網(wǎng)絡(luò)情況輸入對應(yīng)的endpoint"?

project_name => "輸入您的DataHub Project名稱"?

topic_name => "輸入您對應(yīng)的DataHub Topic"?

#shard_id => "0"?

#shard_keys => ["thread_id"]?

dirty_data_continue => true?

dirty_data_file => "/Users/yangyi/logstash-2.4.1/sample/dirty.data"?

dirty_data_file_max_size => 1000?

}?

}?

配置文件為coolshell_log.conf纱新。具體DataHub Topic信息可詳見 數(shù)據(jù)存儲 章節(jié)。

步驟7啟動任務(wù)示例如下:

bin/logstash -f sample/coolshell_log.conf

【數(shù)據(jù)表創(chuàng)建】

附RDS創(chuàng)建表DDL:

---創(chuàng)建adm_refer_info---?

CREATE TABLE IF NOT EXISTS adm_refer_info(referer VARCHAR(32) PRIMARY KEY, referer_count BIGINT);--創(chuàng)建adm_user_measures--?

CREATE TABLE IF NOT EXISTS adm_user_measures(device VARCHAR(32) PRIMARY KEY, pv BIGINT,uv BIGINT);--創(chuàng)建adm_region_measures --?

CREATE TABLE `adm_region_measures` (?

`region` varchar(32) NOT NULL,?

`region_cnt` bigint(20) DEFAULT NULL,?

PRIMARY KEY (`region`)?

)--創(chuàng)建adm_region_measures --?

CREATE TABLE `adm_region_measures` (?

`region` varchar(32) NOT NULL,?

`region_cnt` bigint(20) DEFAULT NULL,?

PRIMARY KEY (`region`)?

)--創(chuàng)建flyingline_coordinates --?

CREATE TABLE `flyingline_coordinates` (?

`city_name` varchar(32) DEFAULT NULL,?

`coordinates` varchar(50) DEFAULT NULL,?

`x` double DEFAULT NULL,?

`y` double DEFAULT NULL?

)

【流式數(shù)據(jù)處理】

注冊數(shù)據(jù)存儲包括DataHub和RDS:

按照數(shù)據(jù)鏈路圖中來編寫處理邏輯(附核心代碼):

【處理邏輯1】

INSERT INTO coolshell_log_detail SELECT?

ip,?

accesstime,?

method,?

url,?

protocol,?

status,?

byte_cnt,?

regexp_extract(referer, '^[^/]+://([^/]+){1}') as referer,?

agent,?

CASE?

WHEN TOLOWER(agent) RLIKE 'android' THEN 'android'?

WHEN TOLOWER(agent) RLIKE 'iphone' THEN 'iphone'?

WHEN TOLOWER(agent) RLIKE 'ipad' THEN 'ipad'?

WHEN TOLOWER(agent) RLIKE 'macintosh' THEN 'macintosh'?

WHEN TOLOWER(agent) RLIKE 'windows phone' THEN 'windows_phone'?

WHEN TOLOWER(agent) RLIKE 'windows' THEN 'windows_pc'?

ELSE 'unknown'?

END AS device,?

CASE?

WHEN TOLOWER(agent) RLIKE '(bot|spider|crawler|slurp)' THEN 'crawler'?

WHEN TOLOWER(agent) RLIKE 'feed'?

OR url RLIKE 'feed' THEN 'feed'?

WHEN TOLOWER(agent) NOT RLIKE '(bot|spider|crawler|feed|slurp)'?

AND agent RLIKE '^[Mozilla|Opera]'?

AND url NOT RLIKE 'feed' THEN 'user'?

ELSE 'unknown'?

END AS identity?

FROM coolshell_log_tracker?

WHERE url NOT LIKE '^[/]+wp-';?

【處理邏輯2】

INSERT INTO coolshell_log_fact select?

md5(concat(ip, device, protocol, identity, agent)),--根據(jù)ip穆趴、device脸爱、protocol、identity和agent字段可以唯一確定uid?

ip,?

accesstime,?

method,?

url,?

protocol,?

status,?

byte_cnt,?

referer,?

agent,?

device,?

identity?

FROM coolshell_log_detail;?

【處理邏輯3未妹、4簿废、5、6】

---adm_refer_info中的處理邏輯---?

REPLACE INTO adm_refer_info SELECT?

referer,?

COUNT(referer) as referer_count?

FROM coolshell_log_fact?

WHERE LENGTHqi(referer) > 1?

GROUP BY referer;?

--adm_user_measures中的處理邏輯---?

REPLACE INTO adm_user_measures SELECT?

device,?

COUNT(uid) as pv,?

COUNT(distinct uid) as uv?

FROM coolshell_log_fact?

GROUP BY device;附錄:adm_region_measures和flyingline_coordinates處理邏輯?

REPLACE INTO adm_region_measures SELECT?

CASE?

WHEN region='%{[geoip][city_name]}' THEN 'unknown'?

WHEN region!='%{[geoip][city_name]}' THEN region?

END AS region,?

count(region) FROM coolshell_log_tracker_bak?

GROUP BY region;INSERT INTO flyingline_coordinates?

SELECT CASE?

WHEN region='%{[geoip][city_name]}' THEN 'unknown'?

WHEN region!='%{[geoip][city_name]}' THEN region?

END AS region,?

coordinates,x,y FROM coolshell_log_tracker_bak where coordinates is NOT NULL;

【上線Stream SQL】

上線任務(wù)后需要對任務(wù)進(jìn)行啟動:

【創(chuàng)建大屏】

現(xiàn)在DataV中創(chuàng)建RDS數(shù)據(jù)源:

然后根據(jù)如下拖拽如組件配置簡單的sql:

本文主要講述了實時場景的鏈路,后續(xù)也會將日志歸檔到MaxCompute然后通過Quick BI進(jìn)行報表分析络它。敬請期待!

最后給大家推薦一個在線的正則debug工具:http://grokdebug.herokuapp.com/

以上是【Best Practice】基于阿里云數(shù)加·StreamCompute快速構(gòu)建網(wǎng)站日志實時分析大屏的內(nèi)容族檬,

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市化戳,隨后出現(xiàn)的幾起案子单料,更是在濱河造成了極大的恐慌,老刑警劉巖点楼,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扫尖,死亡現(xiàn)場離奇詭異,居然都是意外死亡掠廓,警方通過查閱死者的電腦和手機(jī)换怖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蟀瞧,“玉大人沉颂,你說我怎么就攤上這事条摸。” “怎么了铸屉?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵钉蒲,是天一觀的道長。 經(jīng)常有香客問我彻坛,道長子巾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任小压,我火速辦了婚禮,結(jié)果婚禮上椰于,老公的妹妹穿的比我還像新娘怠益。我一直安慰自己,他們只是感情好瘾婿,可當(dāng)我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布蜻牢。 她就那樣靜靜地躺著,像睡著了一般偏陪。 火紅的嫁衣襯著肌膚如雪抢呆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天笛谦,我揣著相機(jī)與錄音抱虐,去河邊找鬼。 笑死饥脑,一個胖子當(dāng)著我的面吹牛恳邀,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播灶轰,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼谣沸,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了笋颤?” 一聲冷哼從身側(cè)響起乳附,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎伴澄,沒想到半個月后赋除,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡秉版,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年贤重,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片清焕。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡并蝗,死狀恐怖祭犯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情滚停,我是刑警寧澤沃粗,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站键畴,受9級特大地震影響最盅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜起惕,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一涡贱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧惹想,春花似錦问词、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至锋叨,卻和暖如春垄分,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背娃磺。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工薄湿, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人偷卧。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓嘿般,卻偏偏與公主長得像,于是被迫代替她去往敵國和親涯冠。 傳聞我的和親對象是個殘疾皇子炉奴,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容