在 GNU/Linux 上绘制自定义日志数据

在 GNU/Linux 上绘制自定义日志数据

我正在记录一些与网络上的客户端 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 非常普遍。

相关内容