Grafana + Influxdb Android性能监控部署

Posted zeo-to-one

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Grafana + Influxdb Android性能监控部署相关的知识,希望对你有一定的参考价值。

简介

一、前提准备

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

在添加数据源之前,先造一些数据. 官网文档: 使用 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 $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/tmp
adb shell chmod 777 /data/local/tmp/busybox
# adb shell export bbox=/data/local/tmp/busybox

以上是关于Grafana + Influxdb Android性能监控部署的主要内容,如果未能解决你的问题,请参考以下文章

InfluxDB 和 Grafana:InfluxDB 错误:错误请求 |码头工人

Grafana + Influxdb Android性能监控部署

14.grafana导入导出;Grafana的安装和Influxdb数据源配置

14.grafana导入导出;Grafana的安装和Influxdb数据源配置

grafana,influxdb动态展示监控项

influxDB和grafana