apache访问日志默认记录请求方法,可直接用grep统计get/post次数,或用awk按字段提取并分组计数,需确保logformat包含%r或%m以支持解析。

Apache 访问日志默认就记录请求方法(GET、POST 等),无需额外开启,关键在于正确解析日志格式并筛选统计。
确认日志中已包含请求方法字段
Apache 默认使用的 Common Log Format (CLF) 或更完整的 Combined 格式 都在第 5 个字段(引号内)完整记录了请求行,例如:
192.168.1.100 - - [21/Aug/2026:02:15:33 +0800] "POST /api/login HTTP/1.1" 200 1245192.168.1.100 - - [21/Aug/2026:02:15:34 +0800] "GET /static/css/app.css HTTP/1.1" 200 8722
其中 "POST /api/login HTTP/1.1" 和 "GET /static/css/app.css HTTP/1.1" 就是请求方法 + 路径 + 协议,可直接提取方法名。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
用命令快速统计 GET 与 POST 出现次数
在 CentOS 或其他 Linux 系统上,进入日志目录后执行以下命令即可分别计数:
- 统计 GET 请求总数:
grep -c ' "GET ' /var/log/httpd/access_log - 统计 POST 请求总数:
grep -c ' "POST ' /var/log/httpd/access_log - 同时查看前几条 GET/POST 示例:
grep ' "GET \| "POST ' /var/log/httpd/access_log | head -10 - 按方法分组计数(更清晰):
awk '{print $6}' /var/log/httpd/access_log | sort | uniq -c | sort -nr(注意:此法依赖标准 CLF 格式,$6 是引号包裹的请求方法字段)
确保日志格式支持稳定解析
如果自定义过 LogFormat,需确认格式字符串中保留了请求方法字段(即 %r 或显式拆解的 %m):
- 推荐使用内置 combined 格式:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"combined" - 若需精简但保留方法,可用:
LogFormat "%h %t \"%m %U %H\" %>s %b" method_url(%m=方法,%U=路径,%H=协议) - 修改后需重启 Apache:
systemctl restart httpd(CentOS)
进阶:区分高频 POST 接口或异常调用
仅看总量不够,还可进一步分析行为特征:
- 找出被 POST 最多的接口:
awk '$6 ~ /"POST/ {print $7}' /var/log/httpd/access_log | sort | uniq -c | sort -nr | head -10 - 筛查状态异常的 POST(如 400/403/500):
awk '$6 ~ /"POST/ && $9 !~ /^200$/ {print $0}' /var/log/httpd/access_log - 结合时间窗口查突发 POST:
grep 'POST' /var/log/httpd/access_log | grep '21/Aug/2026:02:' | wc -l










