輕鬆搞定實時分析及監控大屏
通過最佳實踐幫助您實現上述案例效果
Step1:資料準備
資料格式如下:
$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent"$http_referer" "$http_user_agent" [unknown_content];
主要欄位說明如下:
欄位名稱 |
欄位說明 |
$remote_addr |
傳送請求的客戶端IP地址 |
$remote_user |
客戶端登入名 |
$time_local |
伺服器本地時間 |
$request |
請求,包括HTTP請求型別+請求URL+HTTP協議版本號 |
$status |
服務端返回狀態碼 |
$body_bytes_sent |
返回給客戶端的位元組數(不含header) |
$http_referer |
該請求的來源URL |
$http_user_agent |
傳送請求的客戶端資訊,如使用的瀏覽器等 |
真實源資料如下:
18.111.79.172 - - [12/Feb/2014:03:15:52 +0800] "GET /articles/4914.html HTTP/1.1" 200 37666
"http://coolshell.cn/articles/6043.html" "Mozilla/5.0 (Windows NT 6.2; WOW64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36"
Step2:實時資料採集與解析
2.1 資料採集概述
首先需要將該網站產生的日誌實時採集上來才有下一步的加工分析可能。本文采用常見的開源工具:Logstash,Logstash是一種分散式日誌收集框架,非常簡潔強大適合用來做日誌資料分析。最終目的是將log資料採集至DataHub。
2.2 Logstash安裝與配置
配置前須知:
阿里雲流計算為了方便使用者將更多資料採集進入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 外掛並使用如下命令進行安裝:
${LOG_STASH_HOME}
/bin/plugin install --local logstash-output-datahub-1.0.0.gem
步驟4: 配置Logstash任務.conf,示例如下:
input {
file {
path => "/Users/yangyi/logstash-2.4.1/sample/coolshell_log.log"
start_position => "beginning"
}
}
filter{
grok {
match => {
"message" => "(?<ip>[^ ]*) - (?<user>[- ]*) [(?<accesstime>[^])*]] "(?<method>S+)(?: +(?<url>[^"]*?)(?: +S*)?)?(?: +(?<protocol>[^"]*))" (?<status>[^ ]*) (?<byte_cnt>[^ ]*) "(?<referer>[^"]*)" "(?<agent>[^"]*)""
}
}
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 => "需要根據自己的網路情況輸入對應的endpoint"
project_name => "輸入您的DataHub Project名稱"
topic_name => "輸入您對應的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資訊可詳見 資料儲存 章節。如果是在阿里雲生產網上請填寫為:http://dh-cn-hangzhou-internal.aliyuncs.com
如果是在本地進行請填寫為:http://dh-cn-hangzhou.aliyuncs.com
步驟5: 啟動任務示例如下:
bin/logstash -f sample/coolshell_log.conf
步驟6: 任務啟動成功,如下示意圖:
【備註】啟動Logstash任務可以在DataHub Topic目標源建立之後。
2.3 小結
阿里雲流計算為了方便使用者將更多資料採集進入DataHub,提供了針對Logstash的DataHub Output外掛。使用Logstash,您可以輕鬆享受到Logstash開源社群多達30+種資料來源支援(file,syslog,redis,log4j,apache log或nginx log),同時Logstash還支援filter對傳輸欄位自定義加工等功能。
Step3:資料儲存
3.1 資料儲存概述
通過Logstash實時採集上來的日誌資料儲存在DataHub中,通過阿里雲數加·流計算處理的流資料將儲存在雲資料庫RDS中。在使用資料儲存情況先,需要首先來在阿里雲流計算中註冊其儲存資訊,即可與這些資料來源進行互通。
3.2 DataHub配置
目前DataHub都是定向開通,需要使用者郵件申請。
點選申請,stream@service.aliyun.com,郵件標題須置為DataHub需求溝通。
建立Project和Topic
專案(project)是DataHub資料的基本組織單元,下面可以包含多個Topic。
操作步驟:
步驟1:登入 DataHub 管理控制檯,點選建立Project(目前專案為demo)。
步驟2:點選新建立的project操作欄中的檢視,進入project建立Topic。
步驟3:按照彈出框來填寫相關配置項,具體如下圖所示:
配置項完成後,點選建立即可完成DataHub具體project下Topic的建立。
同樣方式建立coolshell_log_detail、coolshell_log_fact兩個Topic(具體Topic結構詳見章節3.2 DataHub配置)。
如下圖所示:
3.3 RDS資料表建立
目前阿里雲數加·StreamCompute只支援RDS for MySQL資料來源。
建立表的SQL如下(可以使用阿里雲DMS:
--建立adm_refer_info--
CREATE TABLE IF NOT EXISTS adm_refer_info(referer VARCHAR(32) PRIMARY KEY, referer_count BIGINT);
-建立adm_user_measures-
CREATE TABLE IF NOT EXISTS adm_user_measures(device VARCHAR(32) PRIMARY KEY, pv BIGINT,uv BIGINT);
3.4 小結
根據資料結構設計中涉及到的DataHub Topic以及RDS表結構進行建表,為後續案例順利展開提供准入條件。
Step4:流式資料處理
接下來我們就需要對流資料進行加工和處理,目前阿里雲數加·流計算支援Stream SQL語法預檢查、SQL線上除錯、程式碼版本管理等IDE開發環境。
4.1 角色授權(僅限首次開通)
此步驟僅適用於首次開通阿里雲數加·流計算服務,需要給一個名稱為AliyunStreamComputeDefaultRole的系統預設角色給流計算的服務賬號,當且僅當該角色被正確授予後,流計算才能正常地呼叫相關服務。
操作步驟:
步驟1: 首次登入 StreamCompute將會有彈出框,點選前往授權。如下圖所示:
步驟2: 點選同意授權即可完成將預設角色AliyunStreamComputeDefaultRole授予給流計算 服務賬號。此時即完成了授權的全部內容,如下圖所示:
4.2. 註冊DataHub資料儲存
資料來源在使用前必須經過流計算裡面的註冊過程,註冊相當於在流計算平臺中登記相關資料來源資訊,方便後續的資料來源使用。
操作步驟:
步驟1:登入 StreamCompute,點選開發,並在左側切換至資料儲存。
步驟2: 選擇DataHub資料來源右鍵 註冊資料來源或 點選+,如下圖所示:
步驟3: 輸入註冊的資料來源資訊,單擊 註冊,如下圖所示:
步驟4: 註冊成功的資料來源資訊,可以通過點選DataHub資料來源逐層展開,然後右鍵方式 檢視資料詳情,如下圖所示:
備註:細心使用者會發現在Topic資料預覽中顯示暫無資料,這是因為本文是模擬一個場景,並沒有真實流資料進入所以Logstash並不會進行採集。接下來我們將通過shell命令模擬資料流動。
註冊資訊說明:
Endpoint:填寫DataHub的Endpoint地址,公網地址統一為http://dh-cn-hangzhou.aliyuncs.com
Project為DataHub中具體對應的Project為demo
4.3 註冊RDS資料儲存
當前RDS僅支援MySQL引擎的資料庫,其他的資料庫引擎暫時不支援。
操作步驟:
步驟1: 登入StreamCompute,點選開發,並在左側切換至資料儲存。
步驟2:選擇RDS資料來源並右鍵點選註冊資料來源。
步驟3:輸入註冊的資料來源資訊,點選註冊。
步驟4:逐層展開RDS資料來源,可檢視到已被註冊在流計算的相關RDS資料表。
註冊資訊說明:
地域:選擇RDS地域,建議在購買RDS資源的時候選擇華東2或儘可能靠近華東地域。
Instance:填寫RDS例項ID。
DataBaseName:填寫需要連線的資料庫名稱。
UserName/Password:資料庫登入名稱/密碼。
4.4 建立Stream SQL任務
處理邏輯1
新建Stream SQL任務來對流資料進行分析和處理。先來處理coolshell_log_tracker到coolshell_log_detail的處理邏輯。
操作步驟:
步驟1:登入 StreamCompute,點選開發,並新建資料夾(資料夾深度最大值為5)。
步驟2:輸入需要新建的資料夾名稱並選擇儲存位置,點選新建。
步驟3:選擇新建的資料夾右鍵選擇新建任務。
步驟4:輸入要建立的任務名稱,任務型別預設為Stream SQL,點選新建。
步驟5: 建立流式源表,雙擊需要引用的源表coolshell_log_tracker,並點選表詳情頁中作為輸入表引用。
步驟6:建立流式結果表,雙擊需要引用的DataHub Topic:coolshell_log_detai,並點選表詳情頁中作為結果表引用。
步驟7:編寫Stream SQL處理邏輯。
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-`;
編寫完成的Stream SQL任務如下圖所示。
除錯Stream SQL任務
資料開發為使用者提供了一套模擬的執行環境,在該環境中執行Stream SQL可以實現和生產完全隔離和支援構造測試資料。
操作步驟:
步驟1: 編寫好Stream SQL任務後,點選 除錯 對該任務進行除錯。
步驟2: 構造除錯資料,首先下載除錯模板至本地進行構造除錯資料(只支援CSV)。
步驟3: 本地構造好資料後,選擇除錯資料進行除錯Stream SQL任務,點選 除錯。
步驟4: 檢視除錯結果,如下圖:
驗證結果正確無誤後,可右鍵點選除錯結果將其下載到本地(csv檔案)用於下一處理邏輯的除錯資料。
處理邏輯2
接下來處理coolshell_log_detail到coolshell_log_fact的處理邏輯。如下示意圖:
操作步驟:
步驟1: 同樣在上述檔案目錄下新建Stream SQL任務,點選新建。
步驟2: 建立流式源表,雙擊需要引用的源表coolshell_log_detail,並點選表詳情頁中作為輸入表引用。
步驟3: 建立流式結果表,雙擊需要引用的DataHub Topic:coolshell_log_fact,並點選表詳情頁中作為結果表引用。
步驟4: 編寫流式資料處理邏輯,SQL如下:
INSERT INTO coolshell_log_fact select
md5(concat(ip, device, protocol, identity, agent)),--根據ip、device、protocol、identity和agent欄位可以唯一確定uid
ip,
accesstime,
method,
url,
protocol,
status,
byte_cnt,
referer,
agent,
device,
identity
FROM coolshell_log_detail;
步驟5:同上的處理邏輯,選擇上一環節中的除錯資料,進行本次邏輯的除錯。
如除錯結果所示,確認是否為自己業務所需要的正確結果。
處理邏輯3和處理邏輯4
同樣安裝上述步驟下來配置adm_refer_info到adm_user_measures的處理邏輯。主要SQL如下:(統一引用輸入資料來源為coolshell_log_fact,輸出結果資料來源為RDS表:adm_refer_info和adm_user_measures)
—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;
4.5. 上線Stream SQL任務
當您完成開發、除錯,經過驗證Stream SQL正確無誤之後,可將該任務上線到生產系統中。
操作步驟:
步驟1: 點選上線 即可將上述兩個Stream SQL任務依次一鍵釋出至生產系統。
步驟2: 選擇coolshell_log_detail任務,點選上線。
步驟3: 選擇coolshell_log_fact任務,點選上線。
步驟4: 經過上述步驟已將任務上線至生產環境,但該任務處於未啟動狀態,需要進入運維中依次啟動上述任務。
步驟5:點選啟動按鈕,在啟動coolshell_log_detail任務時彈出框中選擇 指定讀取資料時間 一定要小於實時採集任務的啟動時間。點選按以上配置啟動。
任務處於啟動中的狀態。具體如下圖所示:
當任務正常啟動後期狀態如下圖所示:
也可點選操作欄中的檢視,進行任務監控儀表盤。
步驟6:以同樣的方式啟動coolshell_log_fact任務,啟動時間選擇到上述任務正常啟動時間前即可。最終配置的工作流如下圖:
從圖中可以看出資料表與流式任務之間的處理邏輯和上下游關係。
步驟7: 以同樣的方式將adm_user_measures和adm_refer_info兩個流式任務上線。
4.6 確認結果輸出
當所有流式任務跑起來後,需要確認DataHub Topic/RDS結果表中的資料輸出情況。
操作步驟:
步驟1: 首先確認DataHub結果情況,可通過點選進入某Topic然後進行資料抽樣。
步驟2: 其次確認RDS表資料寫入情況,登入DMS for RDS,如下圖:
4.7 小結
本章主要針對採集上來的日誌資料進行流式任務處理和分析,並根據資料結果鏈路圖中邏輯關係進行了一定程度的資料處理,最終將需要在大屏上展示的資料寫入雲資料RDS中。在阿里雲數加·流計算中提供與生產完全隔離的除錯環境,當任務除錯無誤後在進行釋出至生產系統中。
Step5:資料視覺化展現
相較於傳統圖表與資料儀表盤(如通過離線日誌分析的結果展現案例),如今的資料視覺化更生動並可即時呈現隱藏在瞬息萬變且龐雜資料背後的業務洞察。
5.1 建立RDS資料來源
經過資料實時採集、流式資料的處理,將結果資料寫入RDS,為了較好的展現並洞察業務資料,我們需要在DataV中新建資料來源來源。
操作步驟:
步驟1: 登入數加管控臺。
步驟2:點選 DataV資料視覺化,進入DataV開發頁面。
步驟3:在頁面中找到資料來源欄,點選+進行配置資料來源。
步驟4: 選擇型別為雲資料庫RDS版,並配置要連線的資料庫資訊,點選測試,測試成功後點選確定儲存配置資訊即可。
5.2 建立DataV大屏
經過資料實時採集、流式資料的處理,將結果資料寫入RDS,為了較好的展現並洞察Coolshell網站的業務資料,我們需要在DataV中新建資料來源來源。
操作步驟:
步驟1: 在專案欄中點選 新建 +,進行建立大屏專案。
步驟2: 進入模板頁,可以選擇具體模組進行,也可以選擇空白頁面進行建立。本案例選擇第一個模板進行構建Coolshell網站運營資料分析的大屏。
步驟3:點選圖表左上角刪除按鈕進行刪除不需要的圖表,並調整佈局如下圖所示:
步驟4:需要修改模板中的元素。首先點選【中國公路物流指數】,在右側中修改其顯示內容為【Coolshell.cn運營指數】,同樣修改其他顯示字樣如下圖所示:
步驟5:配置日流量量資料。點選日流量並在右側切換至皮膚資料tab。
步驟6:選擇資料來源型別為上一章節配置的資料來源。
步驟7:編輯日瀏覽量翻牌器的SQL如下:
select sum(pv) as value from adm_user_measures;
步驟8:編輯日請求來源翻牌器的SQL如下,並勾選自動更新。
select count(referer) as value from adm_refer_info;
步驟9:刪除裝置PV/UV趨勢的現有柱狀圖替換為雙軸折線圖,並配置資料如下(勾選底部 自動更新)。
select device as x,pv as y,uv as z from adm_user_measures;
步驟10: 刪除請求來源佔比的現有餅圖替換為【指標-輪播列表】配置資料如下(勾選底部自動更新)。
select referer as 請求來源,referer_count as 請求量from adm_refer_info;
步驟11: 其中地圖暫不進行設定(備註:有興趣朋友可以根據Logstash的geoip地址查詢歸類研究下PV或者使用者的地域分佈)。
步驟12:點選有上角預覽 進行檢視配置後的效果。
預覽效果如下所示:
5.3 小結
本章節中主要進行資料視覺化大屏的配置,大屏中的地圖資料並沒有進行對接,如果感興趣的使用者可以嘗試利用Logstash中的GeoIPO地址查詢歸類的過濾外掛,將IP地址轉化為對應的地域資訊,包括國別,省市和經緯度等,詳見。
如果您已經熟悉使用整套解決方案,可以根據個性化定製如下大屏並對接RDS資料。
常見問題
Q:在使用Logstash向DataHub實時推送資料時發現報time out。
A :在endpoint配置項中DataHub提供兩個地址可供填寫,一個是阿里雲生產網http://dh-cn-hangzhou-internal.aliyuncs.com,一個是 http://dh-cn-hangzhou.aliyuncs.com。 若發現使用者處於公網環境中需要使用http://dh-cn-hangzhou.aliyuncs.com,否則會出現報錯。
Q:修改Stream SQL後也進行了上線,但是並沒有生效。
A :一般情況下,點選上線後需要在【運維】中進行暫停任務->停止任務->啟動任務,新程式碼才能才生效。
Q:配置了資料視覺化DataV大屏後,在預覽情況下發現資料不自動重新整理。
A :需要在大屏配置中勾選資料底部的自動更新,並根據需求填寫隔多少秒自動重新整理一次資料。
相關文章
- PostgreSQL實時健康監控大屏-低頻指標SQL指標
- 帶你十天輕鬆搞定 Go 微服務系列(八、服務監控)Go微服務
- C# 開發技巧 輕鬆監控方法執行耗時C#
- PostgreSQL實時健康監控大屏-高頻指標(伺服器)SQL指標伺服器
- Oracle輕量級實時監控工具-oratopOracle
- 辦公室革命,教你輕鬆搞定輕鬆玩轉ExcelExcel
- 監控神器:Prometheus 輕鬆入門,真香!(上篇)Prometheus
- 監控神器:Prometheus 輕鬆入門,真香!(下篇)Prometheus
- 六大絕招輕鬆搞定系統更新(轉)
- 全球疫情實時監控——約翰斯·霍普金斯大學資料大屏實現方案
- 如何使用MindStudio輕鬆搞定大模型全流程開發大模型
- 網路效能監控與流量回溯分析 - 輕鬆診斷網路問題
- 程式實時監控
- 徒手教你製作運維監控大屏運維
- 實時監控.NET Core請求次數:建立記錄最近5分鐘的請求,輕鬆可靠
- 輕鬆搞定專案流程自動化
- 一個小工具幫你搞定實時監控Nginx伺服器Nginx伺服器
- Dinsight實時風控引擎應用技巧:三步輕鬆配置風控策略
- 實時檔案監控
- iOS實時卡頓監控iOS
- 分享20份大屏視覺化模板,輕鬆實現資料視覺化視覺化
- 使用Prometheus搞定微服務監控Prometheus微服務
- What! 一條命令搞定監控?
- 實用且簡單的Git教程,輕鬆搞定多人開發Git
- 輕鬆保障萬級例項,vivo服務端監控體系建設實踐服務端
- 3D 穿梭效果?使用 CSS 輕鬆搞定3DCSS
- Android輕鬆搞定Dialog提示動畫效果Android動畫
- 12步輕鬆搞定python裝飾器Python
- RunLoop實戰:實時卡頓監控OOP
- 監控Data Guard實時同步
- 實時監控網站安全網站
- 實時監控log檔案
- 實時監控系統,統一監控企業APIAPI
- 使用 Meteor 輕鬆開發實時網站網站
- 輕鬆搞定專案管理軟體、分配任務專案管理
- 一份配置,輕鬆搞定Vue表單渲染Vue
- 上億條資料,OurwayBI也能輕鬆搞定
- MySQL8.0輕鬆搞定GTID組複製MySql