本項目用于移動端的數據統計,項目地址:https://github.com/lt90s/goanalytics。開源的數據統計countly做的很好,但是基礎免費版的功能實在不夠看,因此我就決定用go語言來寫了這個項目,一來可以在實踐中學習go語言,二來也可以開發功能完整的開源平臺。該項目正在開發中,歡迎有興趣的gopher一起參與。
數據存儲方面使用的是mongodb。由于數據統計業務幾乎不涉及到事務以及嚴格的一致性場景,而且mongodb的自動分片功能可以支撐較大的數據量。使用大數據的存儲組件的話就太過于重了。因此選用mongodb。
業務邏輯整體基于事件的發布訂閱。當收到客戶端請求,frontend
會對請求數據進行處理,然后發布響應的事件。backend
收到事件后進行統計處理。
后臺展示基于Vue-Admin-Template開發,本人前端能力基本就是依葫蘆畫瓢,希望有前端大神來開發后臺頁面,項目地址: https://github.com/lt90s/goanalytics-web
目前客戶端API僅有2個。一個是上報openApp
打開APP時間,一個是上報usageTime
一次啟動使用時長事件。SDK方面也需要移動端的大神開發,感興趣的大佬可以一起開發。
下面放一點后臺頁面的效果圖:
項目介紹
GoAnalytics是基于go實現的一個數據統計平臺,用于統計移動端的數據指標,比如啟動次數、用戶增長、活躍用戶、留存等指標分析。前端數據展示項目是 goanalytics-web。目前正在積極開發中,歡迎提交新的需求和pull request。
特性
- 數據實時分析展示
- 用戶相關基本指標:增長、留存、活躍、啟動等
- 渠道、平臺、版本交叉對比
- 自定義事件統計
- 輕量
構建
Go版本需要支持module,本地開發測試
# 開啟mongodb
git clone https://github.com/lt90s/goanalytics
cd goanalytics
go get -v
# 創建管理員賬號
cd cmd/account
go build
./account
# 啟動goanalytics-web項目,參考 https://github.com/lt90s/goanalytics-web
# 登錄管理員賬號創建新應用會生成 AppId
# 生成測試數據
cd cmd/test_data
go build
./test_data -appId AppId (上一步中生成的AppId)
# 現在就可以在瀏覽器中看到數據展示
cmd/goanalytics_kafka
和goanalytics_rmq
是分別基于kafka
和rocketmq
的發布訂閱功能做的數據發布
和訂閱處理,橫向擴展能力比local
高。另外由于rocketmq
還沒有原生基于go
的客戶端(原生客戶端正在開發中
2.0.0 road map),可能會存在問題。
開發
項目結構
├── README.md
├── api
│ ├── authentication 用戶認證、管理API
│ ├── middlewares GIN 中間件
│ └── router API route
├── cmd
│ ├── account 生成admin賬號命令
│ ├── analytic_local 不依賴消息系統的goanalytics
│ ├── goanalytics_kafka 基于kafak的goanalytics
│ ├── goanalytics_rmq 基于rocketmq的goanalytics
│ └── test_data 生成測試數據命令
├── common
│ └── data.go
├── conf 配置
│ └── conf.go
├── event
│ ├── codec 數據編解碼
│ └── pubsub 消息發布訂閱
├── go.mod
├── go.sum
├── metric 所有的統計指標在這里實現
│ ├── init.go
│ └── user 用戶相關指標的實現
├── schedule
│ └── schedule.go 定時任務調度
├── storage 存儲模塊
│ ├── counter.go 計數器接口
│ ├── data.go
│ └── mongodb 基于mongodb實現的存儲及計數器
└── utils
├── date.go
├── date_test.go
├── errors.go
└── key.go