Linux使用入门教程之gnuplot

htvxjl0 2014-03-18

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不用重复写之后,后面的部分都是一样的格式。每条曲线的命令之间用逗号分隔它们。

效果如下图,(因为是测试数据,起伏比较大且比较规律,请无视之)

Linux使用入门教程之gnuplot

当然,每次这么输命令生成图表肯定是不方便,也不实用,所以,脚本化它
[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"

当然,这只是最基础的监控,数量级上和专业的监控工具肯定没得比了,但大概原理就是这么的一个过程。

相关推荐