SLS 基于访问日志实现用户画像

简介

阿里云 SLS 是云上一站式大数据处理、分析平台,其目标是“让用户专注在数据价值上,把数据系统部署、运维、扩容的工作交给 SLS”。随着用户在 SLS 存储的数据越来越多,除了最常见的运维等场景,如何进一步挖掘数据的价值,就成为了下一步的重要目标。这里,我们通过一个实例,介绍如何使用 SLS 基于 WEB 访问日志一站式实现用户画像分析,一步一步实现数据价值的挖掘。

访问日志

WEB 访问日志包含了很多用户特征数据,以 nginx 服务器为例,如下是使用 logtail 从测试 nginx 服务器采集到访问日志样例,该样例是模拟“电商商品点击”场景:

content:  127.0.0.1 - - [26/Oct/2020:21:43:09 +0800] "GET /product/8396812?from=source-2 HTTP/1.1" 200 473 "-" "Mozilla/5.0 (iPhone; U; fr; CPU iPhone OS 4_2_1 like Mac OS X; fr) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148a Safari/6533.18.5"

在访问日志中,包含以下用户特征信息:

  • 客户端 IP:可以解析得到访问发出的地理位置信息、IP 风险度(是否存在共攻击风险)
  • 时间:用户的访问频率,访问的时间偏好
  • URL 地址:用户的商品偏好(商品ID)、点击来源(广告源)
  • HTTP 状态码:运维定位访问失败的原因、跟踪客户流失
  • 请求数据大小
  • 客户端 UserAgent:用户设备信息(硬件设备、操作系统、浏览器)

但是,访问日志的所有内容被打包成一条非结构化的文本数据条目,无法直接使用。为了实现有效信息的使用,第一步就是需要进行数据规整,从其中抽取出有效信息,变为结构化数据。SLS 中【数据加工】就是实现数据处理和结构化的完整解决方案。

有了结构化数据,下一步则是统计分析和可视化展示。SLS 提供大规模数据的实时查询与分析能力,并支持使用 SQL 做统计分析。SLS 还提供了丰富的数据可视化方式,只需要在控制台选择配置就可以,简使用单方便。

SLS 处理

Logtail: 采集访问日志

使用 logtail 采集已经有很多社区文章的讲解,这里就不再赘述。列举以下几篇文章以供参考:
Logtail从入门到精通系列
Kubernets日志采集配置模式介绍与对比

数据加工:规整数据

SLS 的数据加工功能是一个全托管、高可用、易扩展的数据处理服务,广泛适用于数据的规整、富化、分发、汇总、重建索引等场景。数据加工 DSL(Domain Specific Language)语法是 SLS 数据加工使用的与Python兼容的脚本,编排灵活易用。DSL 目前提供 200+ 内置函数来简化数据加工模式,更多函数还在添加和更新。

这里,我们展示使用数据加工从访问日志中抽取出部分用户相关的特征数据:

  • 客户端 IP
  • 点击商品
  • 设备信息

数据加工 DSL 脚本如下:

e_regex("content", grok(r'%{IPORHOST:client_ip} - %{USER} \[%{HTTPDATE:time}\] %{QS:request} %{NUMBER} (?:%{NUMBER}|-) %{QS} %{QS:user_agent}'))
e_regex("request", grok(r'"%{WORD:method} %{URIPATH:product}%{URIPARAM:params} %{NOTSPACE:http_version}"'))

e_kv("params")
e_set("user_os", ua_parse_os(v("user_agent")))
e_drop_fields("content", "request", "params", "user_agent", regex=False)

这里,DSL 首先使用正则函数,从非结构化文本中提取出各个组成部分,而且支持丰富的 GROK 模式,使得正则抽取不再那么令人生畏。接着通过 KV 抽取访问请求中的参数变量,和解析用户的设备信息。最后,我们可以操作时间字段,保持数据的简洁,方便分析使用和减少存储成本。

经过加工处理以后,数据内容规整为:

client_ip: 127.0.0.1
from: source-2
http_version: HTTP/1.1
method: GET
product: /product/8396812
time: 26/Oct/2020:21:43:09 +0800
user_os: {"family": "iOS", "major": "4", "minor": "2", "patch": "1"}

从以上可以看出,数据加工 DSL 使用很方便,因为 DSL 内置函数非常丰富,可以满足各种各样的数据处理需求。而且开发活跃,一直在添加、更新函数。

查询/SQL:分析展示结果

通过数据加工将非结构化的文本规整为结构化数据后,SLS 就可以非常方便地进行同居分析。这里,我们从 3 个实例展示 SLS 的统计分析和可视化,实现用户画像。

1. 用户设备信息统计

统计访问涞源的用户设备统计,SQL语句如下:

* | select "user_os.family" as Device, count(1) as Count group by Device

涉及到成分占比对比分析,选择“饼图”,效果如图:
SLS 基于访问日志实现用户画像

2. 访问地域分布

模拟访问数据的地理位置信息,SQL语句如下:

* | select ip_to_province(client_ip) as ip_province, count(*) as Users group by ip_province order by Users desc limit 500

基于地理位置的数据分布,选择“地图”,效果如下:
SLS 基于访问日志实现用户画像

3. 各商品的点击来源

分析每一个广告投放对于各个商品的点击效果,SQL语句如下:

* | select product, "from" as source, count(1) as count group by product, source

分类统计,选择“流图”,类型“柱状图”,聚合列选择“source”,效果如下:
SLS 基于访问日志实现用户画像

总结

如果我们为了实现数据分析,需要搭建多个不同的系统组件,就会分散我们对于数据价值挖掘的投入,SLS 正是解决这个问题。从数据采集,到规整化处理,最后统计分析和可视化,一站式完成。

  1. Logtail 采集性能高、开销少、延迟低
  2. 数据加工处理灵活易用、免运维、易扩展
  3. 统计分析支持 SQL,丰富强大,完整的可视化方式
上一篇:如何移植开源软件到嵌入式Linux系统


下一篇:linux——pacman包管理