答案1
使用 LogParser 和 Excel 可以做到这一点:
步骤1创建以下查询并将其保存为“Time taken graph.sql”:
SELECT QUANTIZE(time-taken, 100) AS t, COUNT(*) as count
INTO 'Time-taken-graph.csv'
FROM u_ex*.log GROUP BY t
第2步运行查询并将结果导出到 CSV 文件:
LogParser.exe file:"Time taken graph.sql"
步骤3在 Excel 中打开 CSV 文件。我将使用 Excel 2010 作为示例。
假设您的数据位于 A1:B401 范围内:
在 D1 单元格中输入“时间”。在 E1 单元格中输入“百分比”。在 D 列中填写时间,范围从 0 到 5,步长为 0.1:
步骤4将以下公式放入 E2 单元格(您需要将 401 替换为您的值):
=SUMIF($A$2:$A$401,">="&D2*1000,$B$2:$B$401)/SUM($B$2:$B$401)
将公式复制到 E 列中具有相应时间值的所有单元格。按 Ctrl+Shift+% 将样式设置为百分比
步骤5最后,根据D、C列的数据绘制折线图:
答案2
我编写了一个 Python 程序,使用我们的负载均衡器生成的日志来生成该图表,浮标绘制实际图形。
在决定使用这个图表之前,我经历了几次迭代:
我从一个散点图(响应时间与一天中的时间)开始,它本身就很有信息量,即使它对于沟通来说不是特别有用,也能让你很好地了解流量的形状和变化。
然后我尝试了直方图,但由于方差较大,所以它并不是特别有用。
最后我得到了这个基于直方图但却是累积和倒置的图。
我本来想发布代码,但它太具体了,无法帮助任何人。以下是核心函数的近似值:
def point(times, cutoff):
"""
times: sorted list of response times
0 <= cutoff < 1
"""
size = int(len(times) * cutoff)
return (times[cutoff], 1 - cutoff)
然后,您可以使用您最喜欢的绘图库(x, y)
将坐标绘制为截止范围。[0,1[