使用gnuplot绘制事件频率

时间:2014-03-28 15:16:44

标签: gnuplot

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

我看到的所有gnuplot示例(以及其他图形解决方案)似乎都使用定期检索的数据。 CPU使用率每30秒,温度每小时等等。但对于我的情况,我可能在上午8:36有300个错误,然后在一天的剩余时间没有,或者全天不变,或者......谁知道?我只是想获得更好的可视化效果。

我认为最终结果是一个带有三个线图的图表,每个群集节点一个,显示错误的频率(每分钟可能?)。

我意识到有更大规模的解决方案;我在其他项目上使用Graylog,Logstash和Kibana。但这是一次性的,还有其他情况我需要这样的东西;我想花一些时间学习gnuplot。但就目前而言,我只是想克服这个困境。

感谢。

1 个答案:

答案 0 :(得分:3)

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

为了得到例如5分钟的块,您必须将x数据加起来:

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%s\b'' file'
plot for [h in hosts] sprintf(cmd, h) using (bin(1)):(1) smooth frequency with boxes title h

为了重新采样数据并获得正确的线图,即通过插入两个相隔一天的错误突发而不会使数据失真,但它们之间没有发生任何事情,您需要一个外部工具或脚本。