gnuplot用于根据已有的数据生成二维图表
1、安装
[root@server7 ~]# yum -y install gnuplot
…
…
Dependencies Resolved
=========================================================================================
Package Arch Version Repository Size
=========================================================================================
Installing:
gnuplot x86_64 4.2.6-2.el6 base 473 k
Installing for dependencies:
gd x86_64 2.0.35-10.el6 base 142 k
gnuplot-common x86_64 4.2.6-2.el6 base 555 k
libXpm x86_64 3.5.8-2.el6 base 59 k
Transaction Summary
=========================================================================================
Install 4 Package(s)
Total download size: 1.2 M
Installed size: 3.1 M
…
…
Complete!
2、运行
因为需要打开图片,所以需要在runlevel5下,或者将图片生成到http或ftp中,在其他图形界面的主机上打开。
用gnuplot生成系统运行状态图表钱,需要整理出以时间维度排序的数据表,
sar -d -p |grep vgsrv-root| awk ‘/^[0-2]/ {print $1,$4}’ > diskdata
#生成磁盘数据读取的信息(单位:扇区/每秒,每扇区512字节,除以2即为KB/s)
有了原始数据之后就可以通过gnuplot来生成图表了
gnuplot
#进入gnuplot编辑界面
gnuplot> set xdata time
#设置x轴为时间
gnuplot> set timefmt “%H:%M:%S”
#设置时间的格式,记得加引号(单双均可),并且和数据源中的时间格式匹配。
#可以通过help命令输入timefmt来查询时间格式的字母定义。
gnuplot> set format x “%H:%M”
#设置x轴显示格式为%H:%M,否则时间跨度过长可能自动变为日期格式
gnuplot> set xlabel “Time”
#设置x轴标签
gnuplot> set ylabel “Read_Rate”
#设置y轴标签
gnuplot> plot “/root/diskdata” using 1:2 title “rd_sec” with line
#生成图表,数据来源为”/root/diskdata”
#using 1:2 对应数据来源中的第1、2列,冒号左边为x轴,右边为y轴
#title 为数据标签可省略可自定义,加引号(单双均可)
#with line 表示在数据点间用直线连接起来
注意,如果需要生成多条数据曲线,请在plot成图的一条命令后面追加,除了前面plot不用重复写之后,后面的部分都是一样的格式。每条曲线的命令之间用逗号分隔它们。
效果如下图,(因为是测试数据,起伏比较大且比较规律,请无视之)
当然,每次这么输命令生成图表肯定是不方便,也不实用,所以,脚本化它
[root@server7 ~]# vim disk.gnuplot
[root@server7 ~]# cat disk.gnuplot
set xdata time
set timefmt “%H:%M:%S”
set format x “%H:%M”
plot “/root/diskdata” using 1:2 title “rd_sec” with line
#还是前面的那几条命令
脚本有了之后,执行命令
gnuplot -persist disk.gnuplot
记得参数 -persist (这个和其他linux命令的参数相比显得有点异类,非单字符参数却用的单-号),此参数使gnuplot生成的图表在gnuplot执行完毕后仍然保留在屏幕上,否则生成的图表将一闪即逝。
如果还需要进一步脚本化,将获取数据的命令和gnuplot生成图表的命令(此时不需要-persist参数)一并脚本化,然后crond执行,生成的图片放在web页面上,就可以通过web浏览器查看最新的监控数据了。
这里,生成图片到指定目录,需要在gnuplot的脚本中加入以下定义,
set term png size 1024,768
set output “/var/www/html/stat/`data +%F`.png”
当然,这只是最基础的监控,数量级上和专业的监控工具肯定没得比了,但大概原理就是这么的一个过程。