Grafana + Influxdb Android性能监控部署

目录

  • 简介
  • 一、前提准备
  • 二、安装 Grafana
  • 三、安装 Influxdb
  • 四、Grafana 添加 Influxdb 数据源
  • 五、Shell 脚本写入数据到 Influxdb

简介

一、前提准备

本实例在 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-latermkdir: 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 数据源

在添加数据源之前,先造一些数据. 官网文档: 使用 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/bashpname=抖音pkg=com.ss.android.ugc.awemenum=5curl -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 $8}'); 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/tmpadb shell chmod 777 /data/local/tmp/busybox# adb shell export bbox=/data/local/tmp/busybox

相关文章