You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gnuplot绘制每分钟日志状态出现频次折线图求助

Gnuplot 实现每分钟状态频次折线图方案

你原有脚本存在三个核心问题:未对OK/TEMP/PERM三类状态做分组统计、绘图类型用了箱型图而非折线、时间分桶后的计数逻辑没有匹配状态字段。以下是适配你Ubuntu 20.04上Gnuplot 5.2.8版本的可直接运行的实现:

完整可执行脚本

#!/bin/bash
# 替换为你的实际日志文件路径
LOG_FILE="logoutcol"

gnuplot <<-EOF
reset
set terminal png size 1200,600 font "Sans,10"
set output "${LOG_FILE}.png"

# 时间轴配置
set xdata time
set timefmt "%H:%M"
set format x "%H:%M"
set xtics 60 # 每分钟显示一个X轴刻度,可按需调整间隔
set xlabel "时间"

# Y轴配置
set yrange [0:*]
set ylabel "状态出现频次"
set ytics 1
set grid ytics linestyle 0 lc rgb "#eeeeee"

# 通用配置
set datafile separator ","
set key top left # 图例放在左上角
set binwidth = 60 # 分桶宽度60秒,即按分钟聚合
# 时间分桶函数:把任意时间对齐到所属整分钟
bin_time(t) = binwidth * floor(t/binwidth)
# 计数判断函数:当前行状态匹配目标值时记1,否则记0
count_status(col, target) = (stringcolumn(col) eq target ? 1 : 0)

# 跳过表头第一行,三类状态分别统计后绘制折线
plot "${LOG_FILE}" every ::1 using (bin_time(timecolumn(1, "%H:%M"))):(count_status(2, "OK")) smooth frequency with linespoints lw 2 pt 7 lc rgb "#2ecc71" title "OK", \
     "" every ::1 using (bin_time(timecolumn(1, "%H:%M"))):(count_status(2, "TEMP")) smooth frequency with linespoints lw 2 pt 9 lc rgb "#f39c12" title "TEMP", \
     "" every ::1 using (bin_time(timecolumn(1, "%H:%M"))):(count_status(2, "PERM")) smooth frequency with linespoints lw 2 pt 11 lc rgb "#e74c3c" title "PERM"
EOF

# 打开生成的图片,不需要可注释下面两行
shotwell "${LOG_FILE}.png"
# rm "${LOG_FILE}.png"

关键逻辑说明

  • 状态分组计数:通过count_status函数判断每行第二列的状态值,匹配目标状态时返回1,否则返回0,配合smooth frequency就能自动按分钟分桶累加对应状态的出现次数
  • 时间对齐:bin_time函数把每条日志的时间戳对齐到所属整分钟,实现按分钟聚合的需求
  • 折线配置:用with linespoints同时绘制连线和数据点,三类状态分别用绿、橙、红三色区分,辨识度更高
  • 表头跳过:every ::1参数会跳过CSV第一行的TIME,STATUS表头,避免表头被当成无效数据解析报错

万行级日志适配说明

这个实现不需要提前对日志做预处理,Gnuplot原生流式读取处理1万行日志的速度在百毫秒级,完全不需要额外引入awk等工具做前置统计,直接运行脚本即可。

  • 如果你的日志时间跨度超过1小时,只需要把set timefmt和set format x的时间格式改成对应格式即可,比如跨天日志带日期就改成%Y-%m-%d %H:%M
  • 如果X轴刻度太密,可以把set xtics 60改成set xtics 300,即每5分钟显示一个刻度

内容的提问来源于stack exchange,提问作者Alexander Sofianos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 12:18:19