你是否爲了數據可視化,還在作execl圖表呢?你是否爲了數據可視化,還在忙着造輪子呢(Highcharts,Echarts)?你是否.....算了,算了,仍是來看看 Grafana 這一款開源的可視化套件吧。這真是像極了廣告😂😂😂😂😂😂
Grafana 是一款開源時間序列分析和可視化工具,能夠與多種數據庫結合而後可視化數據展現並及時通知。具體特色仍是查看grafana官網
git
通篇下來只有工具的安裝以及 Android 某應用 cpu 信息採集。看着這標題「Android性能監控部署」...好吧,我認可有點標題黨了。重點主要仍是想實現一下從安卓設備採集的相關數據於 grafana 平臺的展現
docker
本實例在 CentOS 7 虛擬機環境下實踐,並經過 docker 進行 grafana+ influxdb 的安裝shell
先附上官網 docker 安裝 grafana 教程
1.能夠先用 docker search grafana 查看 grafana 鏡像
2.使用 docker pull grafana/grafana 下拉最新版本鏡像
3.如下命令配置運行 grafana數據庫
docker run -d -p 3000:3000 --name=grafana -v ~/docker/grafana:/var/lib/grafana grafana/grafana
4.經過 ip:3000 端口訪問,出現以下則配置正常
bash
問題: 樓主在配置完後,網頁訪問 ip:3000/login 界面不顯示登陸窗口,沒法進入系統
分析: 經過 docker logs -f grafana
發現以下提示, 並查看相關提示文檔,才知道是這是權限問題致使app
GF_PATHS_DATA='/var/lib/grafana' is not writable. You may have issues with file permissions, more information here: http://docs.grafana.org/installation/docker/#migration-from-a-previous-version-of-the-docker-container-to-5-1-or-later mkdir: cannot create directory '/var/lib/grafana/plugins': Permission denied
解決: 授予權限且重啓容器後,正常顯示curl
chmod 777 ~/docker/grafana 授予最高權限 docker restart <container id> 重啓 grafana 容器
參考相關文檔:https://docs.docker.com/samples/library/influxdb/
1.經過 docker pull influxdb 下拉最新版
2.生成默認配置文件 docker run --rm influxdb influxd config > ~/docekr/influxdb/influxdb.conf
3.配置運行 influxdbtcp
cd ~/docker/influxdb # 可經過 influxdb.conf 來修改相關配置, 此處暫不作修改 docker run -d --name=influxdb-last -p 8086:8086 -v $PWD:/var/lib/influxdb -v $PWD/influxdb.conf:/etc/influxdb/influxdb.conf:ro influxdb -config /etc/influxdb/influxdb.conf
4.經過 ip:8086 端口訪問,出現以下則配置正常
ide
補充:能夠經過以下命令來查看 influxdb 版本及數據庫相關操做
docker exec -it influxdb-laste bash 進入docker bash交互模式 cd /user/bin/ ./influx 進行 influxdb 數據庫交互模式
直接進入 influxdb 數據庫交互模式
在添加數據源以前,先造一些數據. Influxdb官網文檔: 使用 curl 命令寫入數據(固然也能夠在交互模式下建立)
1.數據的建立
# 建立 用戶名 和 密碼 curl -i -XPOST http://localhost:8086/query --data-urlencode "q=CREATE USER 'root' WITH PASSWORD 'root' WITH ALL PRIVILEGES" # 建立 mydb 數據庫 curl -i -XPOST http://localhost:8086/query --data-urlencode "q=CREATE DATABASE mydb" # 查詢數據庫 curl -G -XPOST http://localhost:8086/query --data-urlencode "q=SHOW DATABASES" # 寫入數據到 mydb 數據庫 curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary 'cpu_load_short,host=server01,region=us-west value=0.64 ' # 查詢數據 curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=mydb" --data-urlencode "q=SELECT \"value\" FROM \"cpu_load_short\" WHERE \"region\"='us-west'"
2.添加 influx 數據源
a.添加數據源,選擇 influxDB
b.填寫相關信息
c.保存測試成功後,在 Home Dashboard -> New Dashboard -> Add Query(也能夠選擇自定義)
d.寫入數據.設置查詢的條件/時間段/以及圖表.顯示以下
for i in $(seq 1 3 200); do curl -i -s -XPOST 'http://localhost:8086/write?db=mydb' --data-binary "cpu_load_short,host=server01,region=us-west value=0.$i" >/dev/null&& sleep 1; done
問題: 填寫相關信息後,點擊 "保存並測試" 按鈕後,出現 Network Error: Bad Gateway(502)
分析: 經過 docker logs -f grafana
發現以下提示.查找相關資料,防火牆致使沒法鏈接到 influxdb
2019/07/01 17:46:56 http: proxy error: dial tcp 192.168.1.104:8086: connect: no route to host
解決: 將該端口添加到防火牆開放端口列表中
# 查看全部打開的端口 firewall-cmd --zone=public --list-all # 添加端口(--permanent永久生效,沒有此參數重啓後失效) firewall-cmd --zone=public --add-port=8086/tcp --permanent # 更新防火牆規則 firewall-cmd --reload
這裏以抖音(com.ss.android.ugc.aweme)爲例。在採集 cpu 數據以前,先補充一下 android 相關的知識點. 因 android 版本預置的命令太過精簡, 如下經過 busybox 工具(下載路徑)來實現相關操做.
1.首先使用 ps 命令獲取相關進程
adb shell /data/local/tmp/busybox ps -ef | grep com.ss.android.ugc.aweme | head -n 1|cut -d " " -f 1
2.而後使用 top 工具監聽以上進程的 cpu 信息
# 22502 進程信息 adb shell /data/local/tmp/busybox top -d 1 -b | grep "^22502" # cpu 信息 adb shell /data/local/tmp/busybox top -d 1 -b | awk '/^22502/{print $8}'
3.curl 命令 寫入數據到 influxdb
可以使用官方模板: https://grafana.com/dashboards
# 建立數據庫 curl -i -XPOST http://localhost:8086/query --data-urlencode "q=CREATE DATABASE Android" # 寫入數據模板 curl -i -XPOST 'http://localhost:8086/write?db=Android' --data-binary "cpu,user=zzw,app=抖音 value=53"
4.shell 腳本串聯
#!/bin/bash pname=抖音 pkg=com.ss.android.ugc.aweme num=5 curl -i -XPOST http://localhost:8086/query --data-urlencode "q=CREATE DATABASE Android" pid=$(adb shell /data/local/tmp/busybox ps -ef | grep $pkg | head -n 1|cut -d " " -f 1) for i in $(seq $num);do cpu=$(adb shell /data/local/tmp/busybox top -d 1 -n 1 -b | grep $pid|awk '{print $7}'); echo $i $cpu; curl -s -i -XPOST 'http://localhost:8086/write?db=Android' --data-binary "cpu,user=zzw,app=$pname value=$cpu >/dev/null; done;
最後效果顯示以下:
注: 需對應android cpu指令集下載, 如下爲 busybox 在 android 上的使用方法
# 查看 CPU 信息,busybox 官網下載對應的版本 adb shell cat /proc/cpuinfo # Busybox 配置 adb push busybox /data/local/tmp adb shell chmod 777 /data/local/tmp/busybox # adb shell export bbox=/data/local/tmp/busybox