Grafana + Influxdb Android性能監控部署

前言

你是否爲了數據可視化,還在作execl圖表呢?你是否爲了數據可視化,還在忙着造輪子呢(Highcharts,Echarts)?你是否.....算了,算了,仍是來看看 Grafana 這一款開源的可視化套件吧。這真是像極了廣告😂😂😂😂😂😂
Grafana 是一款開源時間序列分析和可視化工具,能夠與多種數據庫結合而後可視化數據展現並及時通知。具體特色仍是查看grafana官網
git


  通篇下來只有工具的安裝以及 Android 某應用 cpu 信息採集。看着這標題「Android性能監控部署」...好吧,我認可有點標題黨了。重點主要仍是想實現一下從安卓設備採集的相關數據於 grafana 平臺的展現
docker

1、前提準備

本實例在 CentOS 7 虛擬機環境下實踐,並經過 docker 進行 grafana+ influxdb 的安裝shell

  1. 確保虛擬機能識別到 Android 設備(若不能識別,查看 VMware USB Arbitration Service 虛擬機USB相關服務是否開啓)
  2. 已配置 AndroidSDK 環境
  3. 已安裝且配置好 docker 相關環境

2、安裝 Grafana

先附上官網 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 容器

3、安裝 Influxdb

參考相關文檔: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 數據庫交互模式

4、Grafana 添加 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

5、Shell 腳本寫入數據到 Influxdb

這裏以抖音(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
相關文章
相關標籤/搜索