我的数据可视化处理过程
数据规整 我的数据来源一般都是来自于日志文件,不同的日志文件格式可能都不相同。所以第一步就是把数据抽取出来,并且格式化。 一般情况下我会用grep或者awk进行初步的整理。如果shell脚本处理不太方便,通常我会写个js脚本。 Node.js的readline可以实现按行取出。处理过后的输出依然是写文件。 const readline = require('readline') const fs = require('fs') const dayjs = require('dayjs') const fileName = 'data.log' const batch = dayjs().format('MMDDHHmmss') const dist = fs.createWriteStream(`${fileName}.out`) const rl = readline.createInterface({ input: fs.createReadStream(fileName) }) rl.on('line', handlerLine) function handlerLine (line) { let info = line.split(' ') let time = dayjs(`2020-${info[0]} ${info[1]}`).valueOf() let log = `rtpproxy,tag=b${batch} socket=${info[2]},mem=${info[3]} ${time}000000\n` console.log(log) dist.write(log) } 输出的文件格式如下,至于为什么是这种格式,且看下文分晓。 rtpproxy,tag=b0216014954 socket=691,mem=3106936 1581477499000000000 rtpproxy,tag=b0216014954 socket=615,mem=3109328 1581477648000000000 rtpproxy,tag=b0216014954 socket=669,mem=3113764 1581477901000000000 rtpproxy,tag=b0216014954 socket=701,mem=3114820 1581477961000000000 数据导入 以前我都会把数据规整后的输出写成一个JSON文件,然后写html页面,引入Echarts库,进行数据可视化。 但是这种方式过于繁琐,每次都要写个Echars的Options。 所以我想,如果把数据写入influxdb,然后用grafana去做可视化,那岂不是十分方便。 所以,我们要把数据导入influxdb。 启动influxdb grafana 下面是一个Makefile, 用来启动容器。 make create-network 用来创建两个容器的网络,这样grafana就可以通过容器名访问influxdb了。 make run-influxdb 启动influxdb,其中8086端口是influxdb对外提供服务的端口 make run-grafana 启动grafana, 其中3000端口是grafana对外提供服务的端口 run-influxdb: docker run -d -p 8083:8083 -p 8086:8086 --network b2 --name influxdb influxdb:latest run-grafana: docker run -d --name grafana --network b2 -p 3000:3000 grafana/grafana create-network: docker network create -d bridge --ip-range=192.168.1.0/24 --gateway=192.168.1.1 --subnet=192.168.1.0/24 b2 接着你打开localhost:3000端口,输入默认的用户名密码 admin/amdin来登录 ...