日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Logan:美团点评的开源移动端基础日志库

發(fā)布時間:2024/7/5 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Logan:美团点评的开源移动端基础日志库 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

Logan是美團點評集團移動端基礎(chǔ)日志組件,這個名稱是Log和An的組合,代表個體日志服務(wù)。同時Logan也是“金剛狼”大叔的名號,當然我們更希望這個產(chǎn)品能像金剛狼大叔一樣犀利。

Logan已經(jīng)穩(wěn)定迭代了一年多的時間。目前美團點評絕大多數(shù)App已經(jīng)接入并使用Logan進行日志收集、上傳、分析。近日,我們決定開源Logan生態(tài)體系中的存儲SDK部分(Android/iOS),希望能夠幫助更多開發(fā)者合理的解決移動端日志存儲收集的相關(guān)痛點,也歡迎更多社區(qū)的開發(fā)者和我們一起共建Logan生態(tài)。Github的項目地址參見:https://github.com/Meituan-Dianping/Logan

背景

隨著業(yè)務(wù)的不斷擴張,移動端的日志也會不斷增多。但業(yè)界對移動端日志并沒有形成相對成體系的處理方式,在大多數(shù)情況下,還是針對不同的日志進行單一化的處理,然后結(jié)合這些日志處理的結(jié)果再來定位問題。然而,當用戶達到一定量級之后,很多“疑難雜癥”卻無法通過之前的定位問題的方式來進行解決。移動端開發(fā)者最頭疼的事情就是“為什么我使用和用戶一模一樣的手機,一模一樣的系統(tǒng)版本,仿照用戶的操作卻復(fù)現(xiàn)不出Bug”。特別是對于Android開發(fā)者來說,手機型號、系統(tǒng)版本、網(wǎng)絡(luò)環(huán)境等都非常復(fù)雜,即使拿到了一模一樣的手機也復(fù)現(xiàn)不出Bug,這并不奇怪,當然很多時候并不能完全拿到真正完全一模一樣的手機。相信很多同學見到下面這一幕都似曾相識:

用(lao)戶(ban):我發(fā)現(xiàn)我們App的XX頁面打不開了,UI展示不出來,你來跟進一下這個問題。

你:好的。

于是,我們檢查了用戶反饋的機型和系統(tǒng)版本,然后找了一臺同型號同版本的手機,試著復(fù)現(xiàn)卻發(fā)現(xiàn)一切正常。我們又給用戶打個電話,問問他到底是怎么操作的,再問問網(wǎng)絡(luò)環(huán)境,繼續(xù)嘗試復(fù)現(xiàn)依舊未果。最后,我們查了一下Crash日志,網(wǎng)絡(luò)日志,再看看埋點日志(發(fā)現(xiàn)還沒報上來)。

你內(nèi)心OS:奇怪了,也沒產(chǎn)生Crash,網(wǎng)絡(luò)也是通的,但是為什么UI展示不出來呢?

幾個小時后……

用(lao)戶(ban):這問題有結(jié)果了嗎?

你:我用了各種辦法復(fù)現(xiàn)不出來……暫時查不到是什么原因?qū)е碌倪@個問題。

用(lao)戶(ban):那怪我咯?

你:……

如果把一次Bug的產(chǎn)生看作是一次“兇案現(xiàn)場”,開發(fā)者就是破案的“偵探”。案發(fā)之后,偵探需要通過各種手段搜集線索,推理出犯案過程。這就好比開發(fā)者需要通過查詢各種日志,分析這段時間App在用戶手機里都經(jīng)歷了什么。一般來說,傳統(tǒng)的日志搜集方法存在以下缺陷:

  • 日志上報不及時。由于日志上報需要網(wǎng)絡(luò)請求,對于移動App來說頻繁網(wǎng)絡(luò)請求會比較耗電,所以日志SDK一般會積累到一定程度或者一定時間后再上報一次。
  • 上報的信息有限。由于日志上報網(wǎng)絡(luò)請求的頻次相對較高,為了節(jié)省用戶流量,日志通常不會太大。尤其是網(wǎng)絡(luò)日志等這種實時性較高的日志。
  • 日志孤島。不同類型的日志上報到不同的日志系統(tǒng)中,相對孤立。
  • 日志不全。日志種類越來越多,有些日志SDK會對上報日志進行采樣。

面臨挑戰(zhàn)

美團點評集團內(nèi)部,移動端日志種類已經(jīng)超過20種,而且隨著業(yè)務(wù)的不斷擴張,這一數(shù)字還在持續(xù)增加。特別是上文中提到的三個缺陷,也會被無限地進行放大。

查問題是個苦力活,不一定所有的日志都上報在一個系統(tǒng)里,對于開發(fā)者來說,可能需要在多個系統(tǒng)中查看不同種類的日志,這大大增加了開發(fā)者定位問題的成本。如果我們每天上班都看著疑難Bug掛著無法解決,確實會很難受。這就像一個偵探遇到了疑難的案件,當他用盡各種手段收集線索,依然一無所獲,那種心情可想而知。我們收集日志復(fù)現(xiàn)用戶Bug的思路和偵探破案的思路非常相似,通過搜集的線索盡可能拼湊出相對完整的犯案場景。如果按照這個思路想下去,目前我們并沒有什么更好的方法來處理這些問題。

不過,雖然偵探破案和開發(fā)者查日志解決問題的思路很像,但實質(zhì)并不一樣。我們處理的是Bug,不是真實的案件。換句話說,因為我們的“死者”是可見的,那么就可以從它身上獲取更多信息,甚至和它進行一次“靈魂的交流”。換個思路想,以往的操作都是通過各種各樣的日志拼湊出用戶出現(xiàn)Bug的場景,那可不可以先獲取到用戶在發(fā)生Bug的這段時間產(chǎn)生的所有日志(不采樣,內(nèi)容更詳細),然后聚合這些日志分析出(篩除無關(guān)項)用戶出現(xiàn)Bug的場景呢?

個案分析

新的思路重心從“日志”變?yōu)椤坝脩簟?#xff0c;我們稱之為“個案分析”。簡單來說,傳統(tǒng)的思路是通過搜集散落在各系統(tǒng)的日志,然后拼湊出問題出現(xiàn)的場景,而新的思路是從用戶產(chǎn)生的所有日志中聚合分析,尋找出現(xiàn)問題的場景。為此,我們進行了技術(shù)層面的嘗試,而新的方案需要在功能上滿足以下條件:

  • 支持多種日志收集,統(tǒng)一底層日志協(xié)議,抹平日志種類帶來的差異。
  • 日志本地記錄,在需要時上報,盡可能保證日志不丟失。
  • 日志內(nèi)容要盡可能詳細,不采樣。
  • 日志類型可擴展,可由上層自定義。

我們還需要在技術(shù)上滿足以下條件:

  • 輕量級,包體盡量小
  • API易用
  • 沒有侵入性
  • 高性能

最佳實踐

在這種背景下,Logan橫空出世,其核心體系由四大模塊構(gòu)成:

  • 日志輸入
  • 日志存儲
  • 后端系統(tǒng)
  • 前端系統(tǒng)

日志輸入

常見的日志類型有:代碼級日志、網(wǎng)絡(luò)日志、用戶行為日志、崩潰日志、H5日志等。這些都是Logan的輸入層,在不影響原日志體系功能的情況下,可將內(nèi)容往Logan中存儲一份。Logan的優(yōu)勢在于:日志內(nèi)容可以更加豐富,寫入時可以攜帶更多信息,也沒有日志采樣,只會等待合適的時機進行統(tǒng)一上報,能夠節(jié)省用戶的流量和電量。

以網(wǎng)絡(luò)日志為例,正常情況下網(wǎng)絡(luò)日志只記錄端到端延時、發(fā)包大小、回包大小字段等等,同時存在采樣。而在Logan中網(wǎng)絡(luò)日志不會被采樣,除了上述內(nèi)容還可以記錄請求Headers、回包Headers、原始Url等信息。

日志存儲

Logan存儲SDK是這個開源項目的重點,它解決了業(yè)界內(nèi)大多數(shù)移動端日志庫存在的幾個缺陷:

  • 卡頓,影響性能
  • 日志丟失
  • 安全性
  • 日志分散

Logan自研的日志協(xié)議解決了日志本地聚合存儲的問題,采用“先壓縮再加密”的順序,使用流式的加密和壓縮,避免了CPU峰值,同時減少了CPU使用。跨平臺C庫提供了日志協(xié)議數(shù)據(jù)的格式化處理,針對大日志的分片處理,引入了MMAP機制解決了日志丟失問題,使用AES進行日志加密確保日志安全性。Logan核心邏輯都在C層完成,提供了跨平臺支持的能力,在解決痛點問題的同時,也大大提升了性能。

為了節(jié)約用戶手機空間大小,日志文件只保留最近7天的日志,過期會自動刪除。在Android設(shè)備上Logan將日志保存在沙盒中,保證了日志文件的安全性。

詳情請參考:美團點評移動端基礎(chǔ)日志庫——Logan

后端系統(tǒng)

后端是接收和處理數(shù)據(jù)中心,相當于Logan的大腦。主要有四個功能:

  • 接收日志
  • 日志解析歸檔
  • 日志分析
  • 數(shù)據(jù)平臺

接收日志

客戶端有兩種日志上報的形式:主動上報和回撈上報。主動上報可以通過客服引導(dǎo)用戶上報,也可以進行預(yù)埋,在特定行為發(fā)生時進行上報(例如用戶投訴)。回撈上報是由后端向客戶端發(fā)起回撈指令,這里不再贅述。所有日志上報都由Logan后端進行接收。

日志解析歸檔

客戶端上報的日志經(jīng)過加密和壓縮處理,后端需要對數(shù)據(jù)解密、解壓還原,繼而對數(shù)據(jù)結(jié)構(gòu)化歸檔存儲。

日志分析

不同類型日志由不同的字段組合而成,攜帶著各自特有信息。網(wǎng)絡(luò)日志有請求接口名稱、端到端延時、發(fā)包大小、請求Headers等信息,用戶行為日志有打開頁面、點擊事件等信息。對所有的各類型日志進行分析,把得到的信息串連起來,最終匯集形成一個完整的個人日志。

數(shù)據(jù)平臺

數(shù)據(jù)平臺是前端系統(tǒng)及第三方平臺的數(shù)據(jù)來源,因為個人日志屬于機密數(shù)據(jù),所以數(shù)據(jù)獲取有著嚴格的權(quán)限審核流程。同時數(shù)據(jù)平臺會收集過往的Case,抽取其問題特征記錄解決方案,為新Case提供建議。

前端系統(tǒng)

一個優(yōu)秀的前端分析系統(tǒng)可以快速定位問題,提高效率。研發(fā)人員通過Logan前端系統(tǒng)搜索日志,進入日志詳情頁查看具體內(nèi)容,從而定位問題,解決問題。

目前集團內(nèi)部的Logan前端日志詳情頁已經(jīng)具備以下功能:

  • 日志可視化。所有的日志都經(jīng)過結(jié)構(gòu)化處理后,按照時間順序展示。
  • 時間軸。數(shù)據(jù)可視化,利用圖形方式進行語義分析。
  • 日志搜索。快速定位到相關(guān)日志內(nèi)容。
  • 日志篩選。支持多類型日志,可選擇需要分析的日志。
  • 日志分享。分享單條日志后,點開分享鏈接自動定位到分享的日志位置。

Logan對日志進行數(shù)據(jù)可視化時,嘗試利用圖形方式進行語義分析簡稱為時間軸。

每行代表著一種日志類型。同一日志類型有著多種圖形、顏色,他們標識著不同的語義。

例如時間軸中對代碼級日志進行了日志類別的區(qū)分:

利用顏色差異,可以輕松區(qū)分出錯誤的日志,點擊紅點即可直接跳轉(zhuǎn)至錯誤日志詳情。

個案分析流程

  • 用戶遇到問題聯(lián)系客服反饋問題。
  • 客服收到用戶反饋。記錄Case,整理問題,同時引導(dǎo)用戶上報Logan日志。
  • 研發(fā)同學收到Case,查找Logan日志,利用Logan系統(tǒng)完成日志篩選、時間定位、時間軸等功能,分析日志,進而還原Case“現(xiàn)場”。
  • 最后,結(jié)合代碼定位問題,修復(fù)問題,解決Case。

定位問題

結(jié)合用戶信息,通過Logan前端系統(tǒng)查找用戶的日志。打開日志詳情,首先使用時間定位功能,快速跳轉(zhuǎn)到出問題時的日志,結(jié)合該日志上下文,可得到當時App運行情況,大致推斷問題發(fā)生的原因。接著利用日志篩選功能,查找關(guān)鍵Log對可能出問題的地方逐一進行排查。最后結(jié)合代碼,定位問題。

當然,在實際上排查中問題比這復(fù)雜多,我們要反復(fù)查看日志、查看代碼。這時還可能要借助一下Logan高級功能,如時間軸,通過時間軸可快速找出現(xiàn)異常的日志,點擊時間軸上的圖標可跳轉(zhuǎn)到日志詳情。通過網(wǎng)絡(luò)日志中的Trace信息,還可以查看該請求在后臺服務(wù)詳細的響應(yīng)棧情況和后臺響應(yīng)值。

未來規(guī)劃

  • 機器學習分析。首先收集過往的Case及解決方案,提取分析Case特征,將Case結(jié)構(gòu)化后入庫,然后通過機器學習快速分析上報的日志,指出日志中可能存在的問題,并給出解決方案建議;
  • 數(shù)據(jù)開放平臺。業(yè)務(wù)方可以通過數(shù)據(jù)開放平臺獲取數(shù)據(jù),再結(jié)合自身業(yè)務(wù)的特性研發(fā)出適合自己業(yè)務(wù)的工具、產(chǎn)品。

平臺支持

PlatformiOSAndroidWebMini Programs
Support????

目前Logan SDK已經(jīng)支持以上四個平臺,本次開源iOS和Android平臺,其他平臺未來將會陸續(xù)進行開源,敬請期待。

測試覆蓋率

由于Travis、Circle對Android NDK環(huán)境支持不夠友好,Logan為了兼容較低版本的Android設(shè)備,目前對NDK的版本要求是16.1.4479499,所以我們并沒有在Github倉庫中配置CI。開發(fā)者可以本地運行測試用例,測試覆蓋率可達到80%或者更高。

開源計劃

在集團內(nèi)部已經(jīng)形成了以Logan為中心的個案分析生態(tài)系統(tǒng)。本次開源的內(nèi)容有iOS、Android客戶端模塊、數(shù)據(jù)解析簡易版,小程序版本、Web版本已經(jīng)在開源的路上,后臺系統(tǒng),前端系統(tǒng)也在我們開源計劃之中。

未來我們會提供基于Logan大數(shù)據(jù)的數(shù)據(jù)平臺,包含機器學習、疑難日志解決方案、大數(shù)據(jù)特征分析等高級功能。

最后,我們希望提供更加完整的一體化個案分析生態(tài)系統(tǒng),也歡迎大家給我們提出建議,共建社區(qū)。

ModuleOpen SourceProcessingPlanning
iOS?
Android?
Web?
Mini Programs?
Back End?
Front End?

作者簡介

  • 周輝,項目發(fā)起人,美團點評資深移動架構(gòu)師。
  • 姜騰,項目核心開發(fā)者。
  • 立成,項目核心開發(fā)者。
  • 白帆,項目核心開發(fā)者。

招聘信息

點評平臺移動研發(fā)中心,Base上海,為美團點評集團大多數(shù)移動端提供底層基礎(chǔ)設(shè)施服務(wù),包含網(wǎng)絡(luò)通信、移動監(jiān)控、推送觸達、動態(tài)化引擎、移動研發(fā)工具等。同時團隊還承載流量分發(fā)、UGC、內(nèi)容生態(tài)、整合中心等業(yè)務(wù)研發(fā),長年虛位以待有志于專注移動端研發(fā)的各路英雄。歡迎投遞簡歷:hui.zhou#dianping.com。

總結(jié)

以上是生活随笔為你收集整理的Logan:美团点评的开源移动端基础日志库的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。