本項(xiàng)目用于移動(dòng)端的數(shù)據(jù)統(tǒng)計(jì)隧膘,項(xiàng)目地址:https://github.com/lt90s/goanalytics食棕。開源的數(shù)據(jù)統(tǒng)計(jì)countly做的很好谢肾,但是基礎(chǔ)免費(fèi)版的功能實(shí)在不夠看,因此我就決定用go語言來寫了這個(gè)項(xiàng)目灵寺,一來可以在實(shí)踐中學(xué)習(xí)go語言蹦骑,二來也可以開發(fā)功能完整的開源平臺(tái)慈省。該項(xiàng)目正在開發(fā)中,歡迎有興趣的gopher一起參與眠菇。
數(shù)據(jù)存儲(chǔ)方面使用的是mongodb边败。由于數(shù)據(jù)統(tǒng)計(jì)業(yè)務(wù)幾乎不涉及到事務(wù)以及嚴(yán)格的一致性場景,而且mongodb的自動(dòng)分片功能可以支撐較大的數(shù)據(jù)量捎废。使用大數(shù)據(jù)的存儲(chǔ)組件的話就太過于重了笑窜。因此選用mongodb。
業(yè)務(wù)邏輯整體基于事件的發(fā)布訂閱登疗。當(dāng)收到客戶端請(qǐng)求排截,frontend
會(huì)對(duì)請(qǐng)求數(shù)據(jù)進(jìn)行處理,然后發(fā)布響應(yīng)的事件辐益。backend
收到事件后進(jìn)行統(tǒng)計(jì)處理匾寝。
后臺(tái)展示基于Vue-Admin-Template開發(fā),本人前端能力基本就是依葫蘆畫瓢荷腊,希望有前端大神來開發(fā)后臺(tái)頁面,項(xiàng)目地址: https://github.com/lt90s/goanalytics-web
目前客戶端API僅有2個(gè)急凰。一個(gè)是上報(bào)openApp
打開APP時(shí)間女仰,一個(gè)是上報(bào)usageTime
一次啟動(dòng)使用時(shí)長事件。SDK方面也需要移動(dòng)端的大神開發(fā)抡锈,感興趣的大佬可以一起開發(fā)疾忍。
下面放一點(diǎn)后臺(tái)頁面的效果圖:
項(xiàng)目介紹
GoAnalytics是基于go實(shí)現(xiàn)的一個(gè)數(shù)據(jù)統(tǒng)計(jì)平臺(tái),用于統(tǒng)計(jì)移動(dòng)端的數(shù)據(jù)指標(biāo)床三,比如啟動(dòng)次數(shù)一罩、用戶增長、活躍用戶撇簿、留存等指標(biāo)分析聂渊。前端數(shù)據(jù)展示項(xiàng)目是 goanalytics-web。目前正在積極開發(fā)中四瘫,歡迎提交新的需求和pull request汉嗽。
特性
- 數(shù)據(jù)實(shí)時(shí)分析展示
- 用戶相關(guān)基本指標(biāo):增長、留存找蜜、活躍饼暑、啟動(dòng)等
- 渠道、平臺(tái)、版本交叉對(duì)比
- 自定義事件統(tǒng)計(jì)
- 輕量
構(gòu)建
Go版本需要支持module弓叛,本地開發(fā)測(cè)試
# 開啟mongodb
git clone https://github.com/lt90s/goanalytics
cd goanalytics
go get -v
# 創(chuàng)建管理員賬號(hào)
cd cmd/account
go build
./account
# 啟動(dòng)goanalytics-web項(xiàng)目彰居,參考 https://github.com/lt90s/goanalytics-web
# 登錄管理員賬號(hào)創(chuàng)建新應(yīng)用會(huì)生成 AppId
# 生成測(cè)試數(shù)據(jù)
cd cmd/test_data
go build
./test_data -appId AppId (上一步中生成的AppId)
# 現(xiàn)在就可以在瀏覽器中看到數(shù)據(jù)展示
cmd/goanalytics_kafka
和goanalytics_rmq
是分別基于kafka
和rocketmq
的發(fā)布訂閱功能做的數(shù)據(jù)發(fā)布
和訂閱處理,橫向擴(kuò)展能力比local
高撰筷。另外由于rocketmq
還沒有原生基于go
的客戶端(原生客戶端正在開發(fā)中
2.0.0 road map)陈惰,可能會(huì)存在問題。
開發(fā)
項(xiàng)目結(jié)構(gòu)
├── README.md
├── api
│ ├── authentication 用戶認(rèn)證闭专、管理API
│ ├── middlewares GIN 中間件
│ └── router API route
├── cmd
│ ├── account 生成admin賬號(hào)命令
│ ├── analytic_local 不依賴消息系統(tǒng)的goanalytics
│ ├── goanalytics_kafka 基于kafak的goanalytics
│ ├── goanalytics_rmq 基于rocketmq的goanalytics
│ └── test_data 生成測(cè)試數(shù)據(jù)命令
├── common
│ └── data.go
├── conf 配置
│ └── conf.go
├── event
│ ├── codec 數(shù)據(jù)編解碼
│ └── pubsub 消息發(fā)布訂閱
├── go.mod
├── go.sum
├── metric 所有的統(tǒng)計(jì)指標(biāo)在這里實(shí)現(xiàn)
│ ├── init.go
│ └── user 用戶相關(guān)指標(biāo)的實(shí)現(xiàn)
├── schedule
│ └── schedule.go 定時(shí)任務(wù)調(diào)度
├── storage 存儲(chǔ)模塊
│ ├── counter.go 計(jì)數(shù)器接口
│ ├── data.go
│ └── mongodb 基于mongodb實(shí)現(xiàn)的存儲(chǔ)及計(jì)數(shù)器
└── utils
├── date.go
├── date_test.go
├── errors.go
└── key.go