linux中gnuplot绘制性能监控图使用

作者:袖梨 2022-11-14

一、安装

目前的最新版为4.6.5,这里不再列出源码包的方式进行安装,因为常用的linux系统源里都有该包:

代码如下 复制代码

//centos/redhat等rpm包安装
yum -y install gnuplot
//ubuntu/debian等 apt安装
sudo apt-get install gnuplot

二、使用及示例

gnuplot有两种绘图方式,一种是交互式,一种是直接配置好相关参数直接运行。(这点和python相似)

交互式方式的如果想直接将图形展示,需要x11终端支持。这里不再具体示例,有兴趣的可以参看gnuplot中文手册参看示例或官方示例。下面以结合第二种方式为例,展示一个完整的示例:

例1、gnuplot绘制CPU使用图

sar获取 cpu信息并输出到文件

代码如下 复制代码

sar -u 1 10 | head -n -2 | tail -11 | grep . > /var/www/html/monitor.data

文件内容格式如下:

代码如下 复制代码

#cat monitor.data
06:24:52 CPU %user %nice %system %iowait %steal %idle
06:24:53 all 0.00 0.00 1.00 1.00 0.00 98.00
06:24:54 all 0.00 0.00 1.01 0.00 0.00 98.99
06:24:55 all 5.00 0.00 2.00 0.00 0.00 93.00
06:24:56 all 1.00 0.00 2.00 6.00 0.00 91.00
06:24:57 all 0.00 0.00 1.02 2.04 0.00 96.94
06:24:58 all 31.68 0.00 9.90 0.00 0.00 58.42
06:24:59 all 76.77 0.00 23.23 0.00 0.00 0.00
06:25:00 all 73.00 0.00 27.00 0.00 0.00 0.00
06:25:01 all 76.00 0.00 24.00 0.00 0.00 0.00

编辑monitor.conf配置文件,以备gnuplot读取执行:

代码如下 复制代码

# cat monitor.conf
set term png
set xdata time
set style data lines
set output 'cpu.png'
set timefmt '%H:%M:%S'
set format x '%H:%M:%S'
set xlabel 'TIME'
set ylabel 'CPU'
plot 'monitor.data' using 1:3 title "%user", 'monitor.data' using 1:5 title "%sys", 'monitor.data' using 1:8 title "%idle" www.111com.net

具体输出的图形如下:

gnuplot

可以写一个脚本每隔一分钟执行一次:

代码如下 复制代码

# cat checkcpu.sh
#!/bin/sh
sar -u 1 10 | head -n -2 | tail -11 | grep . > /var/www/html/monitor.data && gnuplot /var/www/html/monitor.conf [root@oracle html]# chmod +x checkcpu.sh

可以再配合一个简单的html页面,每一秒钟刷新一次,html内容如下:




代码如下 复制代码



CPU Monitor






function refresh(){
window.location.reload();
}
setTimeout('refresh()',1000);

例2、gnuplot绘制负载图

代码如下 复制代码

[root@localhost~]# cat /opt/cpuload.gnuplot
#!/bin/bash
uptime | awk '{print $1,$(NF-2),$(NF-1),$(NF) }' | tr -d ',' >>/opt/mydata
gnuplot < set terminal png tiny font '/usr/share/fonts/liberation/LiberationSans-Regular.ttf'
set output '/var/www/html/loadavg.png'
set xdata time
set timefmt '%H:%M:%S'
set xlabel 'TIME'
set format x '%H:%M'
set xtics rotate
set ylabel 'load average'
plot '/opt/mydata' u 1:2 t '1-min' with lines, '/opt/mydata' u 1:3 t '5-min' with lines,'/opt/mydata' u 1:4 t '15-min' with lines
EOF
#chmod +x /opt/cpuload.gnuplot

同样,可以利用html展示:

代码如下 复制代码

[root@localhost ~]# cat /var/www/html/gnuplot.html

Performance Charts


LOAD Acerage

以上脚本也可以利用crontab进行绘图。

当然如果想自制监控平台的话,还可以配合php、mysql等进行入库与图形展示。这里也只是列了两个小示例,gnuplot的使用场景不止这些。

利用apache做压力测试时,也可以用其配合,直接的以图形展示。

代码如下 复制代码

files----> keep.data nokeep.data keepalive.output
[plain] view plaincopy

shell> yum install -y gnuplot ///gnuplot--->画图软件!
shell> ab -k -g /tmp/test/keep.data -n 10000 -c 10000 http://10.1.1.235/template3/index.html
///keepalive on,总并发10000,测试10000次!
shell> ab -g /tmp/test/nokeep.data -n 10000 -c 10000 http://10.1.1.235/template3/index.html
///keepalive off
shell> cd /tmp/test
keep.data nokeep.data keepalive.output
shell> gnuplot keepalive.output
///执行完之后,图片keepalive.png便在当前目录下生成了!然后根据图分析!

--------------------------keepalive.output---------------------------------------
[plain] view plaincopy

代码如下 复制代码
#output as png image
set term png enhanced font '/usr/share/fonts/liberation/LiberationSans-Regular.ttf'
# ls /usr/share/fonts/liberation/LiberationSans-Regular.ttf ==>验证是否有该字体!
#save file to png file
set output "keepalive.png" ///输出图片文件名
#graph title
set title "Lin-credibe" ///图片标题
#nicer aspect ratio for image size
set size 1,0.7
# y-axis grid
set grid y
# x-axis label
set xlabel "request"
#y-axis label
set ylabel "response time (ms)"
plot "keep.data" using 9 smooth sbezier with lines title "usingKeepAlive",
"nokeep.data" using 9 smooth sbezier with lines title "noKeepAlive"//no white space

linux中gnuplot绘制性能监控图使用

同样,利用tpcc-mysql做mysql性能测试时,也可以利用gnuplot进行绘制性能图。示例。

一 下载工具

首先,安装bzr 客户端


# yum -y install bzr

下载tpcc-mysql过程中遇到的问题

代码如下 复制代码
# bzr branch lp:~percona-dev/perconatools/tpcc-mysql
bzr: ERROR: Couldn't import bzrlib and dependencies.
Please check the directory containing bzrlib is on your PYTHONPATH.
Traceback (most recent call last):
File "/usr/bin/bzr", line 102, in
import bzrlibpython
ImportError: No module named bzrlib

提示找不到 bzrlib 模块,因为调用Python,建议升级到2.6版本

解决方法:

代码如下 复制代码
# find / -name bzrlib -print
/usr/lib64/python2.4/site-packages/bzrlib

定义环境变量:

代码如下 复制代码


# export PYTHONPATH=/usr/lib64/python2.4/site-packages

再次下载ok.

代码如下 复制代码
#bzr branch lp:~percona-dev/perconatools/tpcc-mysql
You have not informed bzr of your Launchpad ID, and you must do this to
write to Launchpad or access private data. See "bzr help launchpad-login".
Branched 48 revision(s).
bzr: warning: some compiled extensions could not be loaded; see

二 编译安装

进入源码目录

代码如下 复制代码


#cd tpcc-mysql/src
#make
cc -w -O2 -g -I. `mysql_config --include` -c load.c
cc -w -O2 -g -I. `mysql_config --include` -c support.c
cc load.o support.o `mysql_config --libs_r` -lrt -o ../tpcc_load
cc -w -O2 -g -I. `mysql_config --include` -c main.c
cc -w -O2 -g -I. `mysql_config --include` -c spt_proc.c
cc -w -O2 -g -I. `mysql_config --include` -c driver.c
cc -w -O2 -g -I. `mysql_config --include` -c sequence.c
cc -w -O2 -g -I. `mysql_config --include` -c rthist.c
cc -w -O2 -g -I. `mysql_config --include` -c neword.c
cc -w -O2 -g -I. `mysql_config --include` -c payment.c
cc -w -O2 -g -I. `mysql_config --include` -c ordstat.c
cc -w -O2 -g -I. `mysql_config --include` -c delivery.c
cc -w -O2 -g -I. `mysql_config --include` -c slev.c
cc main.o spt_proc.o driver.o support.o sequence.o rthist.o neword.o payment.o ordstat.o delivery.o slev.o `mysql_config --libs_r` -lrt -o ../tpcc_start

三 初始化测试库环境

make命令会在tpcc-mysql目录下生成 tpcc 命令行工具 tpcc_load ,tpcc_start

tpcc_load 提供初始化数据的功能

tpcc_start 进行压力测试

用法:


# ./tpcc_load --help
tpcc_load [server] [DB] [user] [pass] [warehouse]
Server: 服务器名
DB: 数据库名
user: 用户名
pass: 密码
Warehouse: 仓库的数量

代码如下 复制代码
#./tpcc_start --help
tpcc_start -h server_host -P port -d database_name -u mysql_user -p mysql_password -w warehouses -c connections -r warmup_time -l running_time -i report_interval -f report_file

介绍一下各个参数的用法
-h server_host: 服务器名
-P port : 端口号,默认为3306
-d database_name: 数据库名
-u mysql_user : 用户名
-p mysql_password : 密码
-w warehouses: 仓库的数量
-c connections : 线程数,默认为1
-r warmup_time : 热身时间,单位:s,默认为10s ,热身是为了将数据加载到内存。
-l running_time: 测试时间,单位:s,默认为20s
-i report_interval: 指定生成报告间隔时长
-f report_file: 测试结果输出文件

注意

tpcc 默认会读取/var/lib/mysql/mysql.sock 这个socket位置,如果你的测试环境的mysql socket不在相应路径的话,就需要做个软连接,或者通过TCP/IP的方式连接测试服务器。

准备工作:

代码如下 复制代码


#mysql -uroot -p -e "create database tpcc" # 创建测试用的数据库
#mysql -uroot -p tpcc < create_table.sql # 创建测试用的表
#mysql -uroot -p tpcc < add_fkey_idx.sql # 创建FK和索引

1 创建五个数据仓库

代码如下 复制代码
#./tpcc_load localhost tpcc root "123456" 5
*************************************
*** ###easy### TPC-C Data Loader ***
*************************************

[server]: localhost
[port]: 3306
[DBname]: tpcc
[user]: root
[pass]: 123456
[warehouse]: 5
TPCC Data Load Started...
Loading Item
.................................................. 5000

.................................................. 10000
忽略部分输出结果

四、进行测试

使用tpcc_start 进行5个线程的测试,热身时间为120秒, 测试时间为1小时 !

代码如下 复制代码
# ./tpcc_start -hlocalhost -d tpcc -u root -p "123456" -w 5 -c 5 -r 120 -l 300 - >tpcc-output-log

五、生成图表

首先写一个脚本获取数据源:

代码如下 复制代码


# cat tpcc-output-analyze.sh
#!/bin/sh
TIMESLOT=1
if [ -n "$2" ]
then
TIMESLOT=$2
fi
cat $1 | grep -v HY000 | grep -v payment | grep -v neword | awk -v timeslot=$TIMESLOT 'BEGIN { FS="[,():]"; s=0; cntr=0; aggr=0 } /MEASURING START/ { s=1} /STOPPING THREADS/ {s=0} /0/ { if (s==1) { cntr++; aggr+=$2; } if ( cntr==timeslot ) { printf ("%d %3dn",$1,(aggr/timeslot)) ; cntr=0; aggr=0 } }'

# cat tpcc-output-analyze.sh
#!/bin/sh
TIMESLOT=1
if [ -n "$2" ]
then
TIMESLOT=$2
fi
cat $1 | grep -v HY000 | grep -v payment | grep -v neword | awk -v timeslot=$TIMESLOT 'BEGIN { FS="[,():]"; s=0; cntr=0; aggr=0 } /MEASURING START/ { s=1} /STOPPING THREADS/ {s=0} /0/ { if (s==1) { cntr++; aggr+=$2; } if ( cntr==timeslot ) { printf ("%d %3dn",$1,(aggr/timeslot)) ; cntr=0; aggr=0 } }'

这个脚本就是对 tpcc-output-nobinlog 的第一列与第二列进行运算。

代码如下 复制代码


#./tpcc-output-analyze.sh tpcc-output-nobinlog > tpcc-graphic-data.txt

绘图过程:

代码如下 复制代码

#cat log.conf
set terminal gif small size 480,360 #指定输出成gif图片,且图片大小为550×25
set output "tcpp.gif" #指定输出gif图片的文件名
set title "MySQL Performance" #图片标题
set style data lines #显示网格
set xlabel "Time/s" #X轴标题
set ylabel "Data" #Y轴标题
set grid #显示网格
plot
"tpcc-graphic-data.txt" using 1:2 title "Total throughput" with lines #从tpcc-graphic-data.txt

文件中读取第一列和第二列作为X轴和Y轴数据,示例名"Total throughput"

代码如下 复制代码
#cat log.conf
set terminal gif small size 480,360 #指定输出成gif图片,且图片大小为550×25
set output "tcpp.gif" #指定输出gif图片的文件名
set title "MySQL Performance" #图片标题
set style data lines #显示网格
set xlabel "Time/s" #X轴标题
set ylabel "Data" #Y轴标题
set grid #显示网格
plot
"tpcc-graphic-data.txt" using 1:2 title "Total throughput" with lines #从tpcc-graphic-data.txt文件中读取第一列和第二列作为X轴和Y轴数据,示例名"Total throughput"

运行生成tcpp.gif:

代码如下 复制代码


#cat log.conf | gnuplot

相关文章

精彩推荐