要统计 apache api 接口平均响应时间与调用频次,需配置含 %d 和请求路径的 logformat,用 awk 提取成功请求的路径与微秒级耗时,按路径聚合计算调用次数及毫秒级平均响应时间,并过滤静态资源、健康检查、爬虫及超长耗时离群值。

要统计 Apache 中 API 接口的平均响应时间与调用频次,核心是利用 %D(微秒级总处理时间)和请求路径字段($7),结合日志格式配置与命令行分析,不依赖外部监控系统也能快速得出结果。
确保 LogFormat 包含关键字段
Apache 默认日志格式通常不含响应时间,必须显式启用 %D(请求总耗时,单位微秒)和完整请求路径(%r 或 $7)。推荐在 httpd.conf 或虚拟主机配置中定义:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D" api_combined
然后在 CustomLog 中使用该格式,并只记录 API 路径(如 /api/、/v1/、/search):
SetEnvIf Request_URI "^/api/|^/v1/|^/search" is_api CustomLog /var/log/apache2/api_access.log api_combined env=is_api
提取接口路径与响应时间并聚合
用 awk 提取路径和 %D,过滤掉空值或异常值(如 %D 为 “-” 或 0),再按路径分组统计:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 统计各接口调用次数 + 平均响应时间(毫秒):
awk '$9 ~ /^2|3/ && $12 != "-" && $12 > 0 {path = $7; sum[path] += $12; cnt[path]++;} END {for (p in sum) printf "%s\t%d\t%.0f\n", p, cnt[p], sum[p]/cnt[p]/1000 | "sort -k2,2nr"}' /var/log/apache2/api_access.log
说明:
• $9 是状态码,只统计成功/重定向请求(避免 5xx 扭曲平均值)
• $12 是 %D 字段(按上述 LogFormat 位置),单位微秒,除以 1000 得毫秒
• 输出格式为:路径 调用次数 平均耗时(ms)
聚焦高频接口做深度分析
若已知某接口(如 /api/orders)调用频繁,可单独分析其响应时间分布:
- 查看 P95、P99 响应时间(需先提取所有
%D值):
awk '$7 == "/api/orders" && $9 ~ /^[23]/ && $12 > 0 {print $12/1000}' /var/log/apache2/api_access.log | sort -n | awk 'BEGIN{n=0} {a[++n]=$1} END{print "P50:", a[int(n*0.5)+1]; print "P95:", a[int(n*0.95)+1]; print "P99:", a[int(n*0.99)+1]}'
也可配合 histogram 工具或导出为 CSV 用 Excel 分析直方图。
注意排除干扰项
真实业务中,以下情况会导致统计失真,需提前过滤:
- 静态资源误标为 API:如
/api/assets/logo.png,建议在SetEnvIf中排除后缀(\.(js|css|png|ico)$) - 健康检查探针:如
/api/health调用量大但无业务意义,可单独排除或另作分析 - 爬虫或异常 UA:通过
%{User-Agent}i过滤掉已知扫描器(如sqlmap、nuclei) - 超长耗时离群值:对
%D > 30000000(30 秒)的请求,建议单独归类,不参与平均值计算
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










