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日志并进行多维度分析。
目录
相关文章
|
2月前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
625 31
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
1月前
|
监控 安全 Apache
什么是Apache日志?为什么Apache日志分析很重要?
Apache是全球广泛使用的Web服务器软件,支持超过30%的活跃网站。它通过接收和处理HTTP请求,与后端服务器通信,返回响应并记录日志,确保网页请求的快速准确处理。Apache日志分为访问日志和错误日志,对提升用户体验、保障安全及优化性能至关重要。EventLog Analyzer等工具可有效管理和分析这些日志,增强Web服务的安全性和可靠性。
|
3月前
|
XML JSON Java
Logback 与 log4j2 性能对比:谁才是日志框架的性能王者?
【10月更文挑战第5天】在Java开发中,日志框架是不可或缺的工具,它们帮助我们记录系统运行时的信息、警告和错误,对于开发人员来说至关重要。在众多日志框架中,Logback和log4j2以其卓越的性能和丰富的功能脱颖而出,成为开发者们的首选。本文将深入探讨Logback与log4j2在性能方面的对比,通过详细的分析和实例,帮助大家理解两者之间的性能差异,以便在实际项目中做出更明智的选择。
393 3
|
11天前
|
SQL 关系型数据库 MySQL
MySQL事务日志-Undo Log工作原理分析
事务的持久性是交由Redo Log来保证,原子性则是交由Undo Log来保证。如果事务中的SQL执行到一半出现错误,需要把前面已经执行过的SQL撤销以达到原子性的目的,这个过程也叫做"回滚",所以Undo Log也叫回滚日志。
MySQL事务日志-Undo Log工作原理分析
|
1月前
|
监控 应用服务中间件 定位技术
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
116 3
|
1月前
|
存储 监控 安全
什么是事件日志管理系统?事件日志管理系统有哪些用处?
事件日志管理系统是IT安全的重要工具,用于集中收集、分析和解释来自组织IT基础设施各组件的事件日志,如防火墙、路由器、交换机等,帮助提升网络安全、实现主动威胁检测和促进合规性。系统支持多种日志类型,包括Windows事件日志、Syslog日志和应用程序日志,通过实时监测、告警及可视化分析,为企业提供强大的安全保障。然而,实施过程中也面临数据量大、日志管理和分析复杂等挑战。EventLog Analyzer作为一款高效工具,不仅提供实时监测与告警、可视化分析和报告功能,还支持多种合规性报告,帮助企业克服挑战,提升网络安全水平。
|
3月前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1768 14
MySQL事务日志-Redo Log工作原理分析
|
2月前
|
存储 监控 安全
什么是日志管理,如何进行日志管理?
日志管理是对IT系统生成的日志数据进行收集、存储、分析和处理的实践,对维护系统健康、确保安全及获取运营智能至关重要。本文介绍了日志管理的基本概念、常见挑战、工具的主要功能及选择解决方案的方法,强调了定义管理目标、日志收集与分析、警报和报告、持续改进等关键步骤,以及如何应对数据量大、安全问题、警报疲劳等挑战,最终实现日志数据的有效管理和利用。
196 0
|
4月前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP的编程实践中,设计模式是解决常见软件设计问题的最佳实践。单例模式作为设计模式中的一种,确保一个类只有一个实例,并提供全局访问点,广泛应用于配置管理、日志记录和测试框架等场景。本文将深入探讨单例模式的原理、实现方式及其在PHP中的应用,帮助开发者更好地理解和运用这一设计模式。
在PHP开发中,单例模式通过确保类仅有一个实例并提供一个全局访问点,有效管理和访问共享资源。本文详细介绍了单例模式的概念、PHP实现方式及应用场景,并通过具体代码示例展示如何在PHP中实现单例模式以及如何在实际项目中正确使用它来优化代码结构和性能。
61 2
|
3月前
|
Python
log日志学习
【10月更文挑战第9天】 python处理log打印模块log的使用和介绍
51 0