日志分析终端占比需基于user-agent字段结构化识别:手机端含mobile/android/iphone等,平板端含tablet/ipad等,桌面端不含mobile且含windows/macintosh等,爬虫端单独归类;推荐goaccess、awstats、elk或python脚本自动解析统计。

日志分析统计各终端类型访问占比,核心是识别 User-Agent 字段中反映设备类型的关键词,并做归类聚合。这不是靠猜测,而是依据标准标识规则做结构化提取。
识别终端类型的关键字段
服务器日志中的 User-Agent(UA)字符串包含终端信息,常见标识如下:
-
手机端:含
Mobile、Android、iPhone、iPod、Windows Phone -
平板端:含
Tablet、iPad、Android.*;.*Mobile(需排除纯 Mobile)、PlayBook -
桌面端:不含 Mobile 且含
Windows、Macintosh、X11、Linux x86_64等,同时不匹配上述移动标识 -
爬虫/工具端:含
Baiduspider、Googlebot、Sogou web spider等,通常需单独归类,不计入“用户终端”统计
用工具自动分类并计算占比
手动逐行分析 UA 不现实,推荐使用支持 UA 解析的工具直接输出终端分布:
-
GoAccess:启用
--agent-list参数后,会自动识别并分组展示移动端、桌面端、爬虫等类别,生成百分比饼图 - AWStats:内置 UA 分析模块,默认按操作系统+设备类型分类,报表中直接显示“Mobile devices”、“Desktop computers”占比
-
ELK Stack(Elasticsearch + Kibana):用 Logstash 的 useragent 过滤器解析 UA,存入
user_agent.device和user_agent.os.name字段,在 Kibana 中用 Terms 聚合即可算出各终端占比 -
自定义脚本(Python/Pandas):读取日志后用正则匹配 UA,例如:
if 'Android' in ua and 'Mobile' in ua: device = '手机'
elif 'iPad' in ua or ('Android' in ua and 'Mobile' not in ua): device = '平板'
else: device = '桌面'
注意边界情况与清洗逻辑
真实日志中存在模糊或伪装 UA,需提前过滤或修正:
- 部分微信内置浏览器 UA 同时含
MicroMessenger和iPhone,应归为“手机”,而非独立类别 - 某些安卓平板 UA 不含 Tablet,但含
Android和屏幕宽高(如W1200),需结合响应头或 JS 检测辅助判断(日志中不可得,此为补充说明) - 建议先剔除空 UA、长度过短 UA(curl/7.0 但无业务特征)
- 统计前统一转小写处理,避免大小写导致漏匹配
输出结果要包含置信说明
终端识别基于 UA 字符串,存在一定误差率(约 2%–5%,主要来自老旧设备或定制 ROM)。因此最终报告中应注明:
- 统计样本量(总有效 UA 条数)
- 未识别 UA 数量及占比(标记为“未知”)
- 是否已排除爬虫、监控探针等非用户流量











