用gnuplot绘制事件频率图



我试图分析服务器集群上的错误频率,以找到趋势。我已经解析了日志以提取带有时间戳的相关错误。(我的数据目前的格式是%b.%d.%H:%M:%S $HOSTNAME,但转换时间戳不是问题。)我想把这些事件用图表表示出来。我从未使用过gnuplot,所以如果它不是一个好的解决方案,请随意建议其他解决方案。

我看到的所有gnuplot示例(以及其他图形解决方案)似乎都使用定期检索的数据。CPU使用率每30秒,温度每小时等。但就我的情况而言,我可能在上午8点36分有300个错误,然后在一天的剩余时间里没有错误,或者一整天都没有错误,或者……谁知道呢?

我只是想让你看得更清楚。

我设想的最终结果是一个有三条线形图的图,每个集群节点一个线形图,显示错误的频率(可能是每分钟?)

我意识到有更大规模的解决方案;我在其他项目中使用Graylog、Logstash和Kibana。但这是一次性的,在其他情况下我也需要这样的东西;我想花点时间学习gnuplot。但现在,我只是想克服这个困难。

谢谢。

您可以使用smooth frequency参数绘制频率。它将所有相同的x值替换为一个y值为所有y值之和的点。

为了获得例如5分钟块,您必须将x-data:

width = 5*60 # five minutes
bin(x) = (timecolumn(x)/width+0.5)*width
set boxwidth 0.9*width abs
set style fill solid noborder
set timefmt '%b.%d.%H:%M:%S'
set xdata time
set yrange [0:*]
host='hostname'
plot 'file' using (bin(1)):(strcol(2) eq host ? 1 : 0) smooth frequency with boxes

这对于boxes绘图样式很好,但是对于lines看起来很奇怪,因为您不会将数据重新采样到均匀的5分钟网格。

对于三个主机,您可以这样迭代:

....
hosts='host1 host2 host3'
plot for [h in hosts] 'file' using (bin(1)):(strcol(2) eq host ? 1 : 0) smooth frequency with boxes title h

你也可以用外部工具来做过滤,比如grep:

hosts = 'host1 host2 host3'
cmd = '< grep ''b%sb'' file'
plot for [h in hosts] sprintf(cmd, h) using (bin(1)):(1) smooth frequency with boxes title h

为了重新采样数据并获得适当的线形图,即不会通过插入两个错误爆发来扭曲数据,这两个错误爆发间隔一天,但它们之间没有发生任何事情,您将需要外部工具或脚本。

最新更新