Debian Node.js 日志访问量统计实用指南
一 日志规范与准备
二 命令行快速统计
前提:日志为 JSON 行日志(每行一个 JSON 对象)。若当前为文本格式,先用 jq 或脚本转换为结构化后再统计。
统计总请求量(按行计数)
wc -l /var/log/nodejs/app.log
按小时统计请求量(按时间字段分组)
jq -r 'fromjson | .timestamp[0:13]' /var/log/nodejs/app.log \
| sort | uniq -c | sort -nr
按路由统计 Top N(按 path 分组)
jq -r 'fromjson | .path' /var/log/nodejs/app.log \
| sort | uniq -c | sort -nr | head -20
按状态码统计(观察 4xx/5xx 占比)
jq -r 'fromjson | .status' /var/log/nodejs/app.log \
| sort | uniq -c | sort -nr
按 IP 统计并筛选 Top N(识别异常来源)
jq -r 'fromjson | .ip' /var/log/nodejs/app.log \
| sort | uniq -c | sort -nr | head -20
按浏览器或操作系统统计(基于 userAgent 简单归类)
jq -r 'fromjson | .userAgent' /var/log/nodejs/app.log \
| sed 's/.*\(Chrome\|Firefox\|Safari\|Edge\).*/\1/' \
| sort | uniq -c | sort -nr
组合条件示例:统计 /api 路径的 5xx 错误数
jq -r 'fromjson | select(.path=="/api" and .status>=500) | .status' \
/var/log/nodejs/app.log | wc -l
非 JSON 文本日志的兜底方法(按空格或自定义分隔符提取字段后统计,示例以空格分隔、第1列为时间、第7列为路径)
awk '{print $7}' /var/log/nodejs/access.log | sort | uniq -c | sort -nr
提示:字段位置与分隔符需按实际日志格式调整。
三 可视化与集中化方案
/var/log/nodejs/*.log {
daily
missingok
rotate 7
compress
notifempty
create 0640 root adm
}
以上方案便于长期存储、检索与可视化,并可与告警联动。四 异常流量识别与告警
# Top N 路径
jq -r 'fromjson | .path' app.log | sort | uniq -c | sort -nr | head
# 可疑关键字
grep -Ei "script|select|from|echo|bash|\.sh" /var/log/nodejs/app.log | less
jq -r 'fromjson | .ip' app.log | sort | uniq -c | sort -nr | head