一個人手寫APP監(jiān)控平臺是什么感覺

前序

2個月前突然發(fā)現(xiàn)APP有點卡,好像內存泄漏了碍粥,然后就在想要是有一個庫可以把泄漏的頁面和引用信息獲取到就好了突硝,那就自己擼一個easyReport庫來上報數(shù)據(jù)设拟;有了數(shù)據(jù)存在哪好呢雁社,那就自己搭建一個ElasticSearch服務把數(shù)據(jù)放里面浴井;那怎么把數(shù)據(jù)存在ElasticSearch呢,那就自己用Go語言寫一個Web服務霉撵,然后APP調用這個服務把數(shù)據(jù)存在ElasticSearch里面磺浙;既然有數(shù)據(jù)了我展示在哪呢,那就搭建一個Kibana服務把ElasticSearch的數(shù)據(jù)關聯(lián)過來喊巍;如果我想要一個報表式的數(shù)據(jù)或者定制化高的數(shù)據(jù)呢,那就自己用flutter寫一個web頁面箍鼓,并且支持App端崭参;既然是一個web 那我這個web部署在哪呢,那就自己搭建一個nginx服務吧款咖;flutter web每次改了代碼都要重新打包何暮,然后部署才可以看到新的效果挺麻煩的奄喂,那就再搭建一個jenkins服務,這樣就可以一鍵打包和部署了海洼;這么多服務我要一個一個搭建不是很復雜嗎跨新,怎么快速搭建呢,那就用docker來搭建這些服務吧;這么多服務就算是用docker 管理也有點麻煩坏逢,怎么能讓其他同事一鍵部署呢域帐,那就用docker compose吧;這樣看起來也可以做是整,總結一下 easyapm = easyReport + elasticSearch + kibana + go + flutter + nginx + jenkins + docker

簡介

easyapm 想把內存泄漏 卡頓(慢函數(shù)) 啟動時間 進行數(shù)據(jù)采集肖揣,篩選 和 展示 來幫助我們業(yè)務一線的同學快速定位到問題,作為一線寫業(yè)務的同學我深知在firebase上可以看到部分頁面卡頓浮入,但是不知道頁面里面哪種場景下哪個方法造成了卡頓龙优,因為是從0開始做,而且只做了部分功能事秀,所以很多邏輯可能不會那么完美彤断,希望看過這篇文章的同學可以留下寶貴的意見,我這邊后期進行優(yōu)化

架構

性能數(shù)據(jù)從上報到展示一共經(jīng)歷的4層易迹,分別是上報層宰衙,數(shù)據(jù)層,業(yè)務層赴蝇,展示層菩浙。

上報層:主要是通過easyReport進行數(shù)據(jù)的采集和上報。

數(shù)據(jù)層:主要是通過ElasticSearch或者firebase以及google play進行數(shù)據(jù)存儲

業(yè)務層:對上報的數(shù)據(jù)進行篩選 整理 和 保存

展示層:Kibana展示的數(shù)據(jù)比較靈活和完成句伶,但是定制化不高劲蜻,flutter web展示的數(shù)據(jù)定制化高 但是不夠靈活

CI/CD :主要是代碼的打包和部署

apm.png

效果

easyReport 中內存泄漏的demo展示

easyReport屬于上報層,也就是App的一個SDK目前只支持android的內存泄漏數(shù)據(jù)上包考余,后期支持flutter 內存泄漏 以及Android 的 卡頓和啟動時間的采集和上報先嬉,具體的接入細節(jié)可以參考github上的文檔【easyReport

app_leak.png

Go服務支撐

Go服務屬于邏輯層 目前封裝了firebase卡頓數(shù)據(jù)獲取,內存泄漏上報楚堤,elasticSearch數(shù)據(jù)的增刪改查疫蔓,flutter web Apm數(shù)據(jù)的獲取

go_server.png

內存泄漏在 kibana上的數(shù)據(jù)展示

kibana屬于展示層 通過content字段里面的泄漏頁面的引用鏈 清楚定位到相關的泄漏信息,也可以通過APP的版本,手機型號和具體的時間來定位是哪個手機哪位同事在哪個時間操作造成的這個問題身冬,讓我們距離內存泄漏的真相更近一步

kibana1.png

Flutter Web APM

web頁面是使用flutter編寫衅胀,屬于展示層 目前只完成了 卡頓里面的緩慢幀和凍結幀的展示 支持公司2個項目卡頓數(shù)據(jù)展示(屏蔽了部分敏感信息),并解決了firebase google play數(shù)據(jù)不直觀酥筝,搜索 過濾 不方便滚躯,卡頓周報數(shù)據(jù)整理花費時間比較久,重點卡頓頁面具體占比不明確等問題

flutter_apm_result1.png

CI/CD

通過jenkins自動打包和部署web頁面到docker里面的nginx中

apm_jenkins.png

Docker 容器管理

主要鏡像有 elasticSearch kibana nginx jd gotest

jd 是基于jenkins把flutter環(huán)境打包在里面的一個鏡像,主要用于flutter web的一鍵打包和部署

gotest是go服務生成的鏡像 可以將go寫的業(yè)務邏輯通過docker 一鍵部署

elasticSearch:數(shù)據(jù)存儲

kibana:數(shù)據(jù)展示

nginx:flutter web部署的服務

apm_docker.png

未來規(guī)劃

目前的進度:

  • 上報層 數(shù)據(jù)層 邏輯層 展示層的框架和服務搭建完成并跑通
  • 部分卡頓數(shù)據(jù)在flutter web上的展示
  • easyReport支持內存 android內存泄漏 并在kibana上展示

業(yè)務上的規(guī)劃:

  • flutter內存泄漏的上報
  • 內存泄漏在flutter web的展示
  • 卡頓凍結幀和緩慢幀在kibana展示
  • easysdk增加 卡頓 啟動時間的檢測和上報 并在kibana和flutter web的展示
  • 告警策略掸掏,不同的業(yè)務場景增加不同的告警策略茁影,比如今天新增加了5個內存泄漏,就可以根據(jù)泄漏的業(yè)務模塊通知相應的業(yè)務開發(fā)同學來關注這個問題

架構上的規(guī)劃:

  • 微服務:雖然整個業(yè)務邏輯不復雜丧凤,但是做就想做好募闲,做成微服務,帶來的收益主要是 便于后期多人開發(fā)愿待,同時提升自己的在微服務的認知
  • 云函數(shù):通過openfaas 增加 faas服務浩螺,這樣后期所有的web服務直接使用go的云函數(shù)

服務地址

除了easyReport其他都是部署在內網(wǎng)

easyReport: https://github.com/guixin567/easyreport

Web平臺/Nginx:http://locahost:8088

Go服務:http://locahost:8082

ES:http://locahost:9200

Kibana:http://locahost:5601

Jenkins 平臺 :http://locahost:8080 目前只支持flutter web的打包

寄語

從12月中旬初想做到現(xiàn)在差不多2個月,利用業(yè)余和過年的時間寫完上面的功能呼盆,遇到了很多問題年扩,也收獲了很多,如果大家覺得有點意思的話访圃,可以幫忙點贊 評論 收藏 或者 轉發(fā)一下 厨幻,后續(xù)文章會針對具體模塊的邏輯進行分析,比如 怎么檢測android內存泄漏腿时,easyreport怎么上報泄漏數(shù)據(jù)况脆,上報了哪些數(shù)據(jù),go服務怎么接收到easyreport上報的數(shù)據(jù)批糟,又怎么將數(shù)據(jù)存儲在elasticsearch里面格了,最后怎么在kibana展示泄漏數(shù)據(jù),通過泄漏數(shù)據(jù)怎么快速定位到問題徽鼎,在flutter web頁面怎么展示泄漏數(shù)據(jù)盛末,為什么這么展示,flutter寫web遇到了哪些問題等等否淤。因為到現(xiàn)在只做了一部分悄但,也希望自己可以堅持到最后,把這個監(jiān)控平臺完整做起來石抡,感謝所有的看過這篇文章的靚男靚女們檐嚣,也感謝一路幫助我的人【大家有時間也可以幫忙轉到字節(jié)開發(fā)者社區(qū)幫忙點個贊(想獲取一個獎品),謝謝啦 https://developer.volcengine.com/articles/7062287664598220831

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末啰扛,一起剝皮案震驚了整個濱河市嚎京,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌隐解,老刑警劉巖鞍帝,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異煞茫,居然都是意外死亡帕涌,警方通過查閱死者的電腦和手機岩臣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宵膨,“玉大人,你說我怎么就攤上這事炸宵”脔铮” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵土全,是天一觀的道長捎琐。 經(jīng)常有香客問我,道長裹匙,這世上最難降的妖魔是什么瑞凑? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮概页,結果婚禮上籽御,老公的妹妹穿的比我還像新娘。我一直安慰自己惰匙,他們只是感情好技掏,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著项鬼,像睡著了一般哑梳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上绘盟,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天鸠真,我揣著相機與錄音,去河邊找鬼龄毡。 笑死吠卷,一個胖子當著我的面吹牛,可吹牛的內容都是我干的稚虎。 我是一名探鬼主播撤嫩,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蠢终!你這毒婦竟也來了序攘?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤寻拂,失蹤者是張志新(化名)和其女友劉穎程奠,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體祭钉,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡瞄沙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片距境。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡申尼,死狀恐怖,靈堂內的尸體忽然破棺而出垫桂,到底是詐尸還是另有隱情师幕,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布诬滩,位于F島的核電站霹粥,受9級特大地震影響,放射性物質發(fā)生泄漏疼鸟。R本人自食惡果不足惜后控,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望空镜。 院中可真熱鬧浩淘,春花似錦、人聲如沸吴攒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽舶斧。三九已至欣鳖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間茴厉,已是汗流浹背泽台。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留矾缓,地道東北人怀酷。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像嗜闻,于是被迫代替她去往敵國和親蜕依。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內容