一个人手写APP监控平台是什么感觉

前序

2个月前突然发现APP有点卡,好像内存泄漏了,然后就在想要是有一个库可以把泄漏的页面和引用信息获取到就好了,那就自己撸一个easyReport库来上报数据;有了数据存在哪好呢,那就自己搭建一个ElasticSearch服务把数据放里面;那怎么把数据存在ElasticSearch呢,那就自己用Go语言写一个Web服务,然后APP调用这个服务把数据存在ElasticSearch里面;既然有数据了我展示在哪呢,那就搭建一个Kibana服务把ElasticSearch的数据关联过来;如果我想要一个报表式的数据或者定制化高的数据呢,那就自己用flutter写一个web页面,并且支持App端;既然是一个web 那我这个web部署在哪呢,那就自己搭建一个nginx服务吧;flutter web每次改了代码都要重新打包,然后部署才可以看到新的效果挺麻烦的,那就再搭建一个jenkins服务,这样就可以一键打包和部署了;这么多服务我要一个一个搭建不是很复杂吗,怎么快速搭建呢,那就用docker来搭建这些服务吧;这么多服务就算是用docker 管理也有点麻烦,怎么能让其他同事一键部署呢,那就用docker compose吧;这样看起来也可以做,总结一下 easyapm = easyReport + elasticSearch + kibana + go + flutter + nginx + jenkins + docker

简介

easyapm 想把内存泄漏 卡顿(慢函数) 启动时间 进行数据采集,筛选 和 展示 来帮助我们业务一线的同学快速定位到问题,作为一线写业务的同学我深知在firebase上可以看到部分页面卡顿,但是不知道页面里面哪种场景下哪个方法造成了卡顿,因为是从0开始做,而且只做了部分功能,所以很多逻辑可能不会那么完美,希望看过这篇文章的同学可以留下宝贵的意见,我这边后期进行优化

架构

性能数据从上报到展示一共经历的4层,分别是上报层,数据层,业务层,展示层。

上报层:主要是通过easyReport进行数据的采集和上报。

数据层:主要是通过ElasticSearch或者firebase以及google play进行数据存储

业务层:对上报的数据进行筛选 整理 和 保存

展示层:Kibana展示的数据比较灵活和完成,但是定制化不高,flutter web展示的数据定制化高 但是不够灵活

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

apm.png

效果

easyReport 中内存泄漏的demo展示

easyReport属于上报层,也就是App的一个SDK目前只支持android的内存泄漏数据上包,后期支持flutter 内存泄漏 以及Android 的 卡顿和启动时间的采集和上报,具体的接入细节可以参考github上的文档【easyReport

app_leak.png

Go服务支撑

Go服务属于逻辑层 目前封装了firebase卡顿数据获取,内存泄漏上报,elasticSearch数据的增删改查,flutter web Apm数据的获取

go_server.png

内存泄漏在 kibana上的数据展示

kibana属于展示层 通过content字段里面的泄漏页面的引用链 清楚定位到相关的泄漏信息,也可以通过APP的版本,手机型号和具体的时间来定位是哪个手机哪位同事在哪个时间操作造成的这个问题,让我们距离内存泄漏的真相更近一步

kibana1.png

Flutter Web APM

web页面是使用flutter编写,属于展示层 目前只完成了 卡顿里面的缓慢帧和冻结帧的展示 支持公司2个项目卡顿数据展示(屏蔽了部分敏感信息),并解决了firebase google play数据不直观,搜索 过滤 不方便,卡顿周报数据整理花费时间比较久,重点卡顿页面具体占比不明确等问题

flutter_apm_result1.png

CI/CD

通过jenkins自动打包和部署web页面到docker里面的nginx中

apm_jenkins.png

Docker 容器管理

主要镜像有 elasticSearch kibana nginx jd gotest

jd 是基于jenkins把flutter环境打包在里面的一个镜像,主要用于flutter web的一键打包和部署

gotest是go服务生成的镜像 可以将go写的业务逻辑通过docker 一键部署

elasticSearch:数据存储

kibana:数据展示

nginx:flutter web部署的服务

apm_docker.png

未来规划

目前的进度:

  • 上报层 数据层 逻辑层 展示层的框架和服务搭建完成并跑通
  • 部分卡顿数据在flutter web上的展示
  • easyReport支持内存 android内存泄漏 并在kibana上展示

业务上的规划:

  • flutter内存泄漏的上报
  • 内存泄漏在flutter web的展示
  • 卡顿冻结帧和缓慢帧在kibana展示
  • easysdk增加 卡顿 启动时间的检测和上报 并在kibana和flutter web的展示
  • 告警策略,不同的业务场景增加不同的告警策略,比如今天新增加了5个内存泄漏,就可以根据泄漏的业务模块通知相应的业务开发同学来关注这个问题

架构上的规划:

  • 微服务:虽然整个业务逻辑不复杂,但是做就想做好,做成微服务,带来的收益主要是 便于后期多人开发,同时提升自己的在微服务的认知
  • 云函数:通过openfaas 增加 faas服务,这样后期所有的web服务直接使用go的云函数

服务地址

除了easyReport其他都是部署在内网

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月中旬初想做到现在差不多2个月,利用业余和过年的时间写完上面的功能,遇到了很多问题,也收获了很多,如果大家觉得有点意思的话,可以帮忙点赞 评论 收藏 或者 转发一下 ,后续文章会针对具体模块的逻辑进行分析,比如 怎么检测android内存泄漏,easyreport怎么上报泄漏数据,上报了哪些数据,go服务怎么接收到easyreport上报的数据,又怎么将数据存储在elasticsearch里面,最后怎么在kibana展示泄漏数据,通过泄漏数据怎么快速定位到问题,在flutter web页面怎么展示泄漏数据,为什么这么展示,flutter写web遇到了哪些问题等等。因为到现在只做了一部分,也希望自己可以坚持到最后,把这个监控平台完整做起来,感谢所有的看过这篇文章的靓男靓女们,也感谢一路帮助我的人【大家有时间也可以帮忙转到字节开发者社区帮忙点个赞(想获取一个奖品),谢谢啦 https://developer.volcengine.com/articles/7062287664598220831

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容