Grafana + Influxdb Android性能監控部署


前言

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

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

一、前提准備

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

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

二、安裝 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 端口訪問,出現如下則配置正常

問題: 樓主在配置完后,網頁訪問 ip:3000/login 界面不顯示登錄窗口,無法進入系統
分析: 通過 docker logs -f grafana 發現如下提示, 並查看相關提示文檔,才知道是這是權限問題導致

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

解決: 授予權限且重啟容器后,正常顯示

chmod 777 ~/docker/grafana  授予最高權限
docker restart <container id>  重啟 grafana 容器

三、安裝 Influxdb

參考相關文檔:https://docs.docker.com/samples/library/influxdb/
1.通過 docker pull influxdb 下拉最新版
2.生成默認配置文件 docker run --rm influxdb influxd config > ~/docekr/influxdb/influxdb.conf
3.配置運行 influxdb

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 端口訪問,出現如下則配置正常

補充:可以通過如下命令來查看 influxdb 版本及數據庫相關操作

docker exec -it influxdb-laste bash 進入docker bash交互模式
cd /user/bin/
./influx 進行 influxdb 數據庫交互模式

直接進入 influxdb 數據庫交互模式

四、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

五、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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM