需准确识别移动端User-Agent特征并分类统计:iOS(iPhone/iPad/iPod)、Android移动端(含Mobile)、主流浏览器(Chrome/Safari/QQ/微信等),可用awk快速统计或GoAccess、Logstash可视化分析,注意排除爬虫和误匹配干扰。

要对 Nginx 日志中移动端的 User-Agent 进行分类统计,核心是准确识别并归类常见移动设备和浏览器特征,再借助日志分析工具提取、分组、计数。
识别关键移动端 User-Agent 特征
Nginx 默认 access_log 记录的 $http_user_agent 字段包含客户端标识信息。移动端典型标识包括:
-
iOS 设备:含
iPhone、iPad、iPod,通常还带OS [数字]_(如OS 17_4)或Version/ -
Android 设备:含
Android [数字](如Android 14),常伴随Mobile(区分平板)或wv(WebView) -
主流移动浏览器:如
Chrome/[0-9]+ Mobile、Safari/[0-9]+ Mobile、MQQBrowser/(QQ浏览器)、UCBrowser/、WeiXin/(微信内置浏览器) -
微信 / QQ / 支付宝等 App 内置 WebView:通常含
MicroMessenger/、MQQBrowser/、AlipayClient/,且不含Desktop或Win64等桌面关键词
用 awk/grep/sed 快速统计(命令行方案)
假设日志路径为 /var/log/nginx/access.log,可直接在终端运行:
# 统计 iOS 设备访问量
awk '$0 ~ /iPhone|iPad|iPod/ {count++} END {print "iOS:", count+0}' /var/log/nginx/access.log
# 统计 Android 移动端(排除 Android 平板)
awk '$0 ~ /Android [0-9]+.*Mobile/ {count++} END {print "Android Mobile:", count+0}' /var/log/nginx/access.log
# 按主流移动浏览器细分(含版本前缀)
awk '{if(/Chrome\/[0-9]+.*Mobile/) c++; else if(/Safari\/[0-9]+.*Mobile/) s++; else if(/MQQBrowser\//) q++; else if(/MicroMessenger\//) w++} END {print "Chrome Mobile:",c; print "Safari Mobile:",s; print "QQ Browser:",q; print "WeChat:",w}' /var/log/nginx/access.log
进阶:用 GoAccess 或 Logstash 做可视化分类
若需长期监控或图表展示,推荐:
-
GoAccess:支持自定义 User-Agent 解析规则。启动时加
--user-agent-list,并配合--ua-file定义匹配正则(如^.*iPhone.*$ → iOS),输出 HTML 报告后可查看“User Agents”面板中的分组统计 -
Logstash + Elasticsearch + Kibana:在 filter 阶段用
useragent插件解析 UA,自动提取os.name、device.type、browser.name;再在 Kibana 中按device.type: "mobile"过滤,并用 Terms 聚合统计各os.name或browser.name
注意事项与避坑点
真实日志中需注意以下干扰项:
- 部分爬虫或测试工具 UA 会伪造移动端字段(如含
Mobile但实际非用户流量),建议结合$http_referer或访问路径(如是否访问 H5 页面)交叉验证 - 某些安卓平板 UA 同时含
Android和Mobile,但实际不是手机,可追加排除条件如!/(Tablet|; wv)/ - 微信 8.0+ iOS 客户端 UA 已移除
iPhone,仅保留MicroMessenger/和Macintosh,需单独识别MicroMessenger/.*iPhone OS/类模式 - 建议先用
head -20 /var/log/nginx/access.log | cut -d'\"' -f6抽样检查 UA 格式,再写匹配逻辑,避免误统计

















