外观
3.1 日志字段说明
约 717 字
日志分析
本页对应「三、操作步骤」的 3.1,逐列确认访问日志的字段顺序与含义,区分可直接使用的字段与需要清洗的字段,形成字段对照表。返回上级:访问日志分析。
前置条件
- 日志文件已按天归档在
/srv/axis/logs/,至少有一份当天的完整文件。 - 已取得采集端或 CDN 的日志字段文档,知道列顺序是否为固定格式。
- 已确认日志为纯文本或结构化 JSON,两种格式的处理方式不同。
操作步骤
- 先确认日志格式类型与行数,避免把 JSON 当日志文本按空格切分:
head -n 2 /srv/axis/logs/access-2026-05-19.log
wc -l /srv/axis/logs/access-2026-05-19.log
awk '{print NF}' /srv/axis/logs/access-2026-05-19.log | sort -u | head- 按列提取样例,逐列核对含义。常见顺序为:客户端地址、时间、方法、路径、状态码、响应大小、耗时、UA:
awk 'NR<=3 {for (i=1; i<=NF; i++) printf "col%d=%s\n", i, $i; print "--"}' \
/srv/axis/logs/access-2026-05-19.log- 检查关键列的空值与异常值,特别是状态码与耗时:
awk '{print $9}' /srv/axis/logs/access-2026-05-19.log | sort | uniq -c | sort -nr | head
awk '$NF !~ /^[0-9]+$/ {c++} END {print "bad_duration:", c+0}' \
/srv/axis/logs/access-2026-05-19.log- 把结论写成字段对照表,标注每列用途与处理方式:
cat > /srv/axis/reports/fields.md <<'EOF'
| 列 | 字段 | 用途 | 处理方式 |
| --- | --- | --- | --- |
| 1 | 客户端地址 | 独立访客统计 | 聚合前去重 |
| 4 | 时间 | 时间窗口过滤 | 转为 ISO 8601 |
| 5 | 方法 | 过滤探测请求 | 仅保留 GET |
| 7 | 路径 | 热门内容统计 | 去掉查询参数 |
| 9 | 状态码 | 错误率计算 | 5xx 计为错误 |
EOF结果确认
- 所有行的列数一致,若不一致说明存在多行日志或格式混用。
- 状态码列只出现三位数字,未混入其他字段。
- 时间列可被解析为合法时间,且时区明确。
- 字段对照表覆盖报表用到的每一列,无“含义未知”的列进入统计。
注意事项
- 日志字段顺序由采集端决定,换 CDN 或改配置后必须重新核对,不要沿用旧脚本。
- 路径字段常带查询参数,统计热门内容前先截断
?之后的部分。 - UA 字段可能含空格,按固定列切分时会错位,需要按引号解析。
- 日志中的时间通常是本地时间,跨时区统计前先确认采集端时区,不要按报表时区反推。
- 字段对照表要与采集配置放在一起,采集端调整字段顺序时同步更新,否则统计结果会静默偏移。
- 对不确定含义的列先标注“待确认”,不要猜测后直接参与计算。