用awk和gnuplot绘制曲线图

用awk和gnuplot绘制曲线图

毋庸置疑,图像比文字更有力量。
譬如,将特定请求的QPS变化量绘制成曲线,对照CPU、IO、MEMORY曲线,对定位问题非常有帮助。
那么,从数据到图像有两部:

  1. 生成数据
  2. 绘制图像

    awk 统计数据

    1.awk 脚本 (calc_query_consum)

    这里不方便贴出示例日志。该脚本按分统计 总耗时/访问量/平均耗时,稍作修改,可以改为按 时间+请求(将时间+请求作为数组下标)来统计。
    # 这里定义了分隔符,分隔符是正则表达式
    BEGIN { FS = "[,=/]" }
    {
        # 时间格式是[2017-10-15 23:59:59],这里将时间split到数组中
        # 从而可以统计不同时段的请求数量,譬如可以按秒、分统计。
        split($1, times, "[: ]") 
        # timesplit by second
        # query_timestamp = times[2]":"times[3]":"times[4]
        # timesplit by minute
        query_timestamp = times[2]":"times[3]
        query_exec_time = $7
        timespit_ts_arr[query_timestamp] += query_exec_time
        timespit_query_arr[query_timestamp] += 1
    }
    END {
        # 收集完数据后,遍历数组输出结果
        for (timestamp_key in timespit_ts_arr) {
            total_ts = timespit_ts_arr[timestamp_key]
            total_query = timespit_query_arr[timestamp_key]
            avg_query_exec_time = total_ts / total_query
            print timestamp_key, "timespit_total_ts", timespit_ts_arr[timestamp_key], "timespit_query_num", total_query, "timespit_avg_query_exec_time", avg_query_exec_time
        }
    }

usage

cat xxxxx_2017-10-14.log | awk -f calc_query_consum | sort -k1 > 10_14_minute_result

输出样例

00:00 timespit_total_ts 0.00681901 timespit_query_num 1 timespit_avg_query_exec_time 0.00681901
04:48 timespit_total_ts 2.58988 timespit_query_num 243 timespit_avg_query_exec_time 0.010658
04:49 timespit_total_ts 5.11569 timespit_query_num 244 timespit_avg_query_exec_time 0.020966
04:50 timespit_total_ts 3.64235 timespit_query_num 315 timespit_avg_query_exec_time 0.011563
04:51 timespit_total_ts 3.44781 timespit_query_num 305 timespit_avg_query_exec_time 0.0113043
04:52 timespit_total_ts 3.54635 timespit_query_num 288 timespit_avg_query_exec_time 0.0123137
04:53 timespit_total_ts 4.00858 timespit_query_num 331 timespit_avg_query_exec_time 0.0121105

2.gnuplot 绘图

可以通过apt-get安装

    enjolras@dingxinglong-debian8:~/Desktop$ gnuplot
    gnuplot> set xdata time
    gnuplot> set timefmt "%H:%M"
    gnuplot> set format x "%H:%M"
    # 下面的命令,将16:00->23:59 时间作为X轴,第3列,总执行时间作为Y轴作图。
    gnuplot> plot ["16:00":"23:59"] '10_14_minute_result' using 1:3 with linespoints

多条曲线示例

    plot ["16:00":"23:59"] '10_14_minute_result' using 1:3 title "total_time" with lines, '10_14_minute_result' using 1:5 title "avg_time" with lines

378189-20171103222031716-342315729.png

转载于:https://www.cnblogs.com/enjolras/p/7780849.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值