因爲答應微信羣友分享 Android APM 平臺分享,不拖欠了,今天開始分享,不然發紅包,既然說了,就總結一下前陣子研究的 Android 性能監控平臺java
運維工具:Promethues+Grafana 後端: SpringBoot + MySQL+ Mybaties 移動端:Matrix android
Promethues 與 SpringBoot 集成上報比較及時的數據,原本覺得就是拼接字符串便可,可是後來才發現須要集成 simpleclient_spring_boot 代碼,按照約定俗成的方法上報才能夠,若是你們作這方面,須要註冊避免這個坑。git
pom.xml 依賴:github
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>simpleclient_spring_boot</artifactId>
<version>0.1.0</version>
</dependency>
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>simpleclient_hotspot</artifactId>
<version>0.1.0</version>
</dependency>
複製代碼
上報接口:spring
@Override
public List<Collector.MetricFamilySamples> collect() {
List<MetricFamilySamples> mfs = new ArrayList<>();
String latestAppVersion = appMapper.getLatestAppVersion();
// 當前上個版本應用大小
GaugeMetricFamily pre_labeledGauge = new GaugeMetricFamily("app_pre_app_size", "previous android apk size", Collections.singletonList("labelname"));
Integer preAppSize = appMapper.getPreAppSize(latestAppVersion);
pre_labeledGauge.addMetric(Collections.singletonList("labelvalue"), preAppSize);
// 當前當前版本應用大小
GaugeMetricFamily labeledGauge = new GaugeMetricFamily("app_cur_app_size", "current android apk size", Collections.singletonList("labelname"));
Integer curAppSize = appMapper.getCurAppSize(latestAppVersion);
labeledGauge.addMetric(Collections.singletonList("labelvalue"), curAppSize);
mfs.add(pre_labeledGauge);
mfs.add(labeledGauge);
return mfs;
}
複製代碼
而後是 Promethues 配置:sql
global:
scrape_interval: 10s
scrape_timeout: 10s
evaluation_interval: 10m
scrape_configs:
- job_name: app
scrape_interval: 5s
// 時間輪訓查詢
scrape_timeout: 5s
// 監聽路徑接口
metrics_path: /prometheus
scheme: http
static_configs:
- targets: ['127.0.0.1:8887']
- job_name: setuptime
scrape_interval: 2s
scrape_timeout: 2s
metrics_path: /setuptime
static_configs:
- targets: ['127.0.0.1:8887']
複製代碼
Grafana 數據源有兩種形式,比較實時性很是強的 Crash、 ANR、 內存泄露、 冷/熱啓動耗時、 關鍵頁面耗時 用 prometheus 上報,若是實時性比較弱的話,利用 Mysql 數據上報的形式來讀取。數據庫
直接集成 MySQL ,流利說採用的是 MariaDB 的記錄,而後在 Grafana 配置以下: 後端
首先經過命令行 prometheus 啓動性能優化
./prometheus --config.file=prometheus.yml
複製代碼
添加數據源: 微信
而後在顯示板配置顯示模板,即可以顯示出正常的數據,若是不熟悉可參考 環境搭建能夠參考 Prometheus+Grafana搭建監控系統