我正在记录一些与网络上的客户端 NFS 使用情况相关的数据。现在我想将其绘制在线条图上,但我对在那里发现的各种可能性感到不知所措。似乎没有一个对我来说容易理解。
这是一个简化的日志:
1356112995 192.168.1.46 766
1356112995 192.168.1.12 14
1356112995 192.168.1.141 5
1356112995 192.168.1.11 38
1356114790 192.168.1.46 760
1356114790 192.168.1.12 10
1356114790 192.168.1.11 18
1356116586 192.168.1.46 758
1356116586 192.168.1.12 9
1356118387 192.168.1.46 783
1356120187 192.168.1.46 687
1356121987 192.168.1.46 699
1356123787 192.168.1.46 371
1356125587 192.168.1.46 717
1356127386 192.168.1.46 0
第一列是时间戳,应该在 X 轴上。第二列是客户端 IP。第三列是操作数,应该在 Y 轴上。图表应该是折线图。
我希望这是自动的,所以从命令行绘图是可行的方法。但是不知道该怎么做。
它应该生成一个 png 文件,随后将其上传到某个网络服务器进行可视化。
答案1
可能有一些方法可以做到这一点而无需安装软件(使用 NFS,我假设您使用的是 Linux 机器)。但是,我最喜欢的解决方案是R它是免费的,适用于 Linux/Windows/Mac 等,并将为您提供自定义图表或处理数据的无数机会。
步骤 1
编写一个脚本,代码如下:
logfile <- read.table(file="client.log") #Adjust the logfile name as needed.
#This assumes tab separated columns.
#If needed, column delimiters can be adjusted.
names(logfile) <- c("time.stamp","client","operations")
#Rename the columns of the input data (if they are named at all)
require(lattice) #This package is needed for the xyplot() function below.
#The main benefit of this function for your purposes is the ability to color
#your plot circles by client name.
png(filename="logfile.png") #Designate the plot file type and save location
xyplot(operations~time.stamp,group=client,data=logfile,jitter.x=T,jitter.y=T)
#I've added jitter here which helps prevent plotted points from overlapping.
dev.off() #Close and save the plot
我调用了我的脚本log.to.png.R
第 2 步
您可以从 Unix 或 Mac 命令行按以下方式调用脚本:
$R CMD BATCH log.to.png.R
答案2
这确实很晚了,但是当我偶然看到这篇文章时,我还是会发表我的意见。
无需安装 R,我们可以在 gnuplot 中使用 call awk:
plot "<awk '{print $1, $3}' logfile" u 1:2
双引号中的 awk 命令的输出被 gnuplot 用于绘制数据。awk 命令仅打印出第一列和第三列。
您可以将上述命令放入 gnuplot 文件中,例如 plot_log.gp,然后在命令行中调用它,如下所示
gnuplot -e "logfile='your_actual_log_file.log'" plot_log.gp
这是一个可以轻松放入 cron 作业或您拥有的某些脚本的命令。请注意文本周围的单引号。
我只是想证明 gnuplot 实际上非常灵活,因为它可以接受命令行参数并将它们分配为脚本中的变量。没有严重的依赖关系(看着你,R),因为 awk 非常普遍。