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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 阿里云 SLS 是云上一站式大数据处理、分析平台,其目标是“让用户专注在数据价值上,把数据系统部署、运维、扩容的工作交给 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

涉及到成分占比对比分析,选择“饼图”,效果如图:
用户设备信息统计

2. 访问地域分布

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

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

3. 各商品的点击来源

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

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

分类统计,选择“流图”,类型“柱状图”,聚合列选择“source”,效果如下:
各商品的点击来源

总结

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

  1. Logtail 采集性能高、开销少、延迟低
  2. 数据加工处理灵活易用、免运维、易扩展
  3. 统计分析支持 SQL,丰富强大,完整的可视化方式
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
23天前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
170 30
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
2月前
|
XML JSON Java
Logback 与 log4j2 性能对比:谁才是日志框架的性能王者?
【10月更文挑战第5天】在Java开发中,日志框架是不可或缺的工具,它们帮助我们记录系统运行时的信息、警告和错误,对于开发人员来说至关重要。在众多日志框架中,Logback和log4j2以其卓越的性能和丰富的功能脱颖而出,成为开发者们的首选。本文将深入探讨Logback与log4j2在性能方面的对比,通过详细的分析和实例,帮助大家理解两者之间的性能差异,以便在实际项目中做出更明智的选择。
255 3
|
2月前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1650 14
|
3月前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP的编程实践中,设计模式是解决常见软件设计问题的最佳实践。单例模式作为设计模式中的一种,确保一个类只有一个实例,并提供全局访问点,广泛应用于配置管理、日志记录和测试框架等场景。本文将深入探讨单例模式的原理、实现方式及其在PHP中的应用,帮助开发者更好地理解和运用这一设计模式。
在PHP开发中,单例模式通过确保类仅有一个实例并提供一个全局访问点,有效管理和访问共享资源。本文详细介绍了单例模式的概念、PHP实现方式及应用场景,并通过具体代码示例展示如何在PHP中实现单例模式以及如何在实际项目中正确使用它来优化代码结构和性能。
49 2
|
2月前
|
Python
log日志学习
【10月更文挑战第9天】 python处理log打印模块log的使用和介绍
35 0
|
2月前
|
数据可视化
Tensorboard可视化学习笔记(一):如何可视化通过网页查看log日志
关于如何使用TensorBoard进行数据可视化的教程,包括TensorBoard的安装、配置环境变量、将数据写入TensorBoard、启动TensorBoard以及如何通过网页查看日志文件。
223 0
|
2月前
|
存储 分布式计算 NoSQL
大数据-136 - ClickHouse 集群 表引擎详解1 - 日志、Log、Memory、Merge
大数据-136 - ClickHouse 集群 表引擎详解1 - 日志、Log、Memory、Merge
45 0
|
2月前
|
缓存 Linux 编译器
【C++】CentOS环境搭建-安装log4cplus日志组件包及报错解决方案
通过上述步骤,您应该能够在CentOS环境中成功安装并使用log4cplus日志组件。面对任何安装或使用过程中出现的问题,仔细检查错误信息,对照提供的解决方案进行调整,通常都能找到合适的解决之道。log4cplus的强大功能将为您的项目提供灵活、高效的日志管理方案,助力软件开发与维护。
60 0
|
3月前
|
Java
日志框架log4j打印异常堆栈信息携带traceId,方便接口异常排查
日常项目运行日志,异常栈打印是不带traceId,导致排查问题查找异常栈很麻烦。
|
3月前
|
存储 监控 数据可视化
SLS 虽然不是直接使用 OSS 作为底层存储,但它凭借自身独特的存储架构和功能,为用户提供了一种专业、高效的日志服务解决方案。
【9月更文挑战第2天】SLS 虽然不是直接使用 OSS 作为底层存储,但它凭借自身独特的存储架构和功能,为用户提供了一种专业、高效的日志服务解决方案。
163 9