日志服務+函數服務實戰(1): 訪問日志地域、運營商實時分析

摘要:日志服務的LogHub是流式的數據中心,日志寫入后可實時消費。日志服務ETL面向的正是這些流式寫入的數據,提供準實時(1分鐘級別)的E?TL作業。

概述

ETL(Extract-Transform-Load)用來描述將數據從來源端經過抽取(Extract)、轉換(Transform)、加載(Load)至目的端的過程。

傳統ETL是構建數據倉庫的重要一環,用戶從數據源抽取出所需的數據,經過數據清洗,最終按照預先定義好的數據倉庫模型,將數據加載到數據倉庫中去。

在今天,隨著業務需求的日益增加,不同系統的相互大批量數據交互也已成為常態。數據在不同系統中流動起來,有助于充分發掘日志大數據的價值。

在云上,AWS Glue是一個功能完備的ETL產品,通過DevEndpoint、Crawler、MetaStore等模塊,分別在ETL函數編寫、數據識別加載、meta管理等方向做到了不錯的用戶體驗。如同大部分業界方案,Glue也是batch觸發的ETL模型,建議數據源是S3。但對于流式數據(如Kinesis Stream)則不能直接使用,提供的方案是:用戶先將數據導入到S3,再使用Glue分析S3上的數據。

日志服務的LogHub是流式的數據中心,日志寫入后可實時消費。日志服務ETL面向的正是這些流式寫入的數據,提供準實時(1分鐘級別)的ETL作業。

日志服務ETL

兩個場景

一站式建模分析

通過日志服務,快速完成日志采集、加工、查詢、分析。

數據交換

為數據的目的端落地提供支撐,構建云上大數據產品間的數據管道。

ETL模型

實時數據流處理,基于流的模型。ETL Trigger輪詢源logstore下各shard的寫入位置,并定時生成三元組信息觸發函數執行,該三元組用于標識本次ETL任務所應該處理的數據范圍。

通過shard的并發做到水平擴展,shard彈性伸縮保證了ETL的動態伸縮,通過定時器觸發作業完成持續的數據加載。

在ETL任務執行層面,考慮UDF的靈活性,加工邏輯會跑在函數服務的函數上,而函數服務提供了按需付費、彈性伸縮能力以及自定義代碼執行功能,正是很多云上用戶所需要的。另一方面,從用戶數據端到端延時、大數據吞吐、SQL易用性角度,日志服務未來也考慮把ETL的runtime擴展到流計算引擎(例如阿里云流計算)上,去服務更多的用戶場景。

ETL日志

ETL過程日志

這是一類是執行過程日志,這一部分日志是在ETL執行過程中每執行一步的記錄關鍵點和錯誤,包括某一步驟的開始、結束時間、初始化動作完成情況,模塊出錯信息等。記錄日志的目的是隨時可以知道ETL運行情況,如果出錯了,可以知道哪里出錯。

函數運行產生的日志記錄了數據加工過程中關鍵點、異常:

ETL調度日志

調度日志只記錄ETL任務開始的時間、結束時間,任務是否成功以及成功返回的信息。如果ETL任務出錯了,不僅要形成ETL出錯日志,而且要向系統管理員發送報警郵件或短信。

在調度日志的基礎上,可以構建出報表統計ETL的總體運行狀況,會在下文實踐部分介紹。

“日志服務+函數服務”ETL的優勢

一站式采集、存儲、加工、分析

全托管加工任務,按時間觸發,自動重試

資源按shard水平擴展,滿足大數據需求

基于函數服務提供數據加工,彈性資源,按需付費

ETL對用戶透明,提供日志、報警功能

持續增加內置函數模板,降低主流需求下的函數開發代價

日志服務ETL實戰

對于數據分析工程師而言,ETL過程往往占據整個項目工作60%~70%的工作量。日志服務的目標是使用內置的函數模板的前提下,將構建ETL的時間縮短到15分鐘內。

題目:ip歸屬查找

通過Nginx、apache等HTTP服務器構建的軟件,可以記錄每一個用戶訪問日志。本次實踐的題目是:看看我們到底服務了哪些地區的用戶,這些用戶通過什么鏈路訪問我們的服務。

第一步:日志集中化存儲

我們使用日志服務的Logtail客戶端快速接入機器上的日志文件。本節請參考日志服務實時采集數據,本文不作贅述。

客戶端采集nginx訪問日志將會集中存儲到日志服務的一個logstore中,如下圖,forward字段的ip記錄了用戶請求的來源:

第二步:云端數據加工

1. 登錄函數服務控制臺創建service

在高級配置中,建議為ETL function配置加工過程中的日志記錄的存儲logstore,方便通過日志來定位加工過程中的異常行為。為函數授予日志服務AliyunLogFullAccess權限,函數在運行過程中會讀源logstore數據,數據處理后再寫到目標logstore。

2. 通過內置模板創建函數

默認的函數配置如下:

3. 在函數上新建日志服務觸發器

日志服務觸發器配置如下:

指定數據源為第一步中采集到中心化nginx日志logstore,例如本例子的project:etl-test/logstore:nginx_access_log。

日志服務將輪詢logstore的數據,當數據持續產生時,每60秒創建一次ETL任務,并調用函數執行。觸發函數執行以及函數執行結果將會記錄到觸發器日志logstore:etl-trigger-log中。

函數配置因不同函數的實現和功能而已,ip-lookup的詳細配置項說明請參考README

4. 保存配置,等待1分鐘后ETL任務開始執行

可以關注一下ETL過程日志、調度日志,按如上配置,分別在logstore:etl-function-log、etl-trigger-log。

可以通過查詢語句構建出如本文日志部分所示的報表:

左上圖是每分鐘調度函數執行的觸發次數,構建自查詢語句:

project_name : etl-test and job_name : ceff019ca3d077f85acaad35bb6b9bba65da6717 |selectfrom_unixtime(__time__ - __time__ %60)ast,count(1)asinvoke_countgroupbyfrom_unixtime(__time__ - __time__ %60)orderbytasclimit1000

右上圖是ETL任務成功、失敗的比例,構建自查詢語句:

project_name : etl-testandjob_name : ceff019ca3d077f85acaad35bb6b9bba65da6717 |selecttask_status,count(1)groupbytask_status

左下圖是每5分鐘的攝入的日志字節數,構建自查詢語句:

project_name : etl-testandjob_name : ceff019ca3d077f85acaad35bb6b9bba65da6717andtask_status : Success |selectfrom_unixtime(__time__ - __time__ %300)ast, sum(ingest_bytes)asingest_bytesgroupbyfrom_unixtime(__time__ - __time__ %300)orderbytasclimit1000

右下圖則是每5分鐘攝入處理的日志行數,構建自查詢語句:

project_name : etl-testandjob_name : ceff019ca3d077f85acaad35bb6b9bba65da6717andtask_status : Success |selectfrom_unixtime(__time__ - __time__ %300)ast, sum(ingest_lines)asingest_linesgroupbyfrom_unixtime(__time__ - __time__ %300)orderbytasclimit1000

第三步:加工后數據建模

機器上的nginx日志經由Logtail實時采集到源logstore,再由ETL準實時加工后寫出到目標logstore。經函數處理后帶ip信息數據如下:

對比加工前后,我們發現,新的數據增加了四個字段(country、省province、city、isp),可以知道:ip源117.136.90.160的請求來自中國山西太原,運營商是中國移動。

接下來,使用日志服務的日志分析功能查詢一個時間段內請求ip的城市和isp分布。通過如下兩個查詢語句構建報表:

* |selectcity, count(1)ascgroupbycityorderbycdesclimit15

* |selectisp, count(1)ascgroupbyisporderbycdesclimit15

至此,本節的實踐內容結束。歡迎大家試用自定義ETL

原文鏈接

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,825評論 6 546
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,814評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,980評論 0 384
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 64,064評論 1 319
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,779評論 6 414
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,109評論 1 330
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,099評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,287評論 0 291
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,799評論 1 338
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,515評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,750評論 1 375
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,221評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,933評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,327評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,667評論 1 296
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,492評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,703評論 2 380

推薦閱讀更多精彩內容