目录
- 简介
- 一、前提准备
- 二、安装 Grafana
- 三、安装 Influxdb
- 四、Grafana 添加 Influxdb 数据源
- 五、Shell 脚本写入数据到 Influxdb
简介
一、前提准备
本实例在 CentOS 7 虚拟机环境下实践,并通过 docker 进行 grafana+ influxdb 的安装
- 确保虚拟机能识别到 Android 设备(若不能识别,查看 VMware USB Arbitration Service 虚拟机USB相关服务是否开启)
- 已配置 AndroidSDK 环境
- 已安装且配置好 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
原文地址:https://www.cnblogs.com/zeo-to-one/p/11153759.html