一招高效解析 Access Log,轻松应对泼天流量

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 一招高效解析 Access Log,轻松应对泼天流量


业务背景

Cloud Native


近日大量美国用户转移到新的社交平台,小红书登顶美国 App 下载榜首。与小红书一样的出海企业都会遇到类似问题:海外用户规模猛增,访问流量也随之快速上涨,如何应对这突如其来的“泼天富贵”:

  • 后端服务如何识别突增流量、快速扩容?
  • 如何识别流量来源、针对网络做优化?
  • 服务波动时能否快速定位来源?

只有妥善解决这些关键问题,企业才能有效留住用户。为此,阿里云可观测推出一套全面的流量分析解决方案,帮助企业在面对巨大的商业机遇时拥有充足的底气与信心。本文将基于访问日志(Access Log)并结合 AIOps 算法,演示如何快速识别流量波动以及精准定位波动的来源,从而为企业提供有针对性的优化建议。


什么是访问日志(Access Log)

Cloud Native


访问日志(Access Log)作为记录用户对服务器或网络服务进行访问的详细信息的日志文件。在各类服务器中得到广泛应用,例如 Web 服务器、应用服务器和数据库服务器等。通过访问日志,对分析用户习惯、优化服务性能以及提升用户体验具有重要意义。


访问日志通常包含多种信息,如用户的 IP 地址、访问时间、请求的 URL、HTTP 状态码、用户代理字符串等。这些数据不仅有助于监控系统的性能,还能在遇到问题时为故障排查提供宝贵的线索。此外,访问日志还可以用于安全审计,帮助识别可疑的访问模式和潜在的网络攻击,从而增强系统的安全防护措施,是现代网络服务管理中不可或缺的一部分。这里我们以 Nginx 的 Access Log 为例,其通常具备以下字段,可以看到,其中记录了访问请求的来源、方法、延时等数据。


host:www.lsb.mock.com
remote_addr:123.246.223.87
http_user_agent:Mozilla/5.0 (Macintosh; AMD Mac OS X 10_8_2) AppleWebKit/535.22 (KHTML, like Gecko) Chrome/18.6.872
request_method:POST
request_time:53
request_uri:/request/path-0/file-2
status:200
time_local:15/Jan/2025:01:36:56
upstream_response_time:2.05


为什么需要 AlOps 算法分析访问日志

Cloud Native


想要更好的分析日志信息,离不开一套成熟的数据处理语法,SPL(SLS Processing Language,https://help.aliyun.com/zh/sls/user-guide/spl-overview)是针对数据查询、流式消费、数据加工、采集、Ingestion等数据处理场景,所提供的统一的数据处理语法。通过 SPL 能够快速从数据中提取出时序指标,并进行进一步分析。为什么要推出智能化运维呢?


在传统的运维告警方案上,存在着两个挑战:

  • 难以准确识别异常。针对指标数据,通常会通过计算时间窗口均值、变化率等方式来识别异常并配置告警,但是存在着大量漏报、误报问题,针对不断变化的场景,难以确定一个合适的异常阈值。例如一些微小的噪声波动就可能触发大量告警,亦或者因为只差一点达到阈值,而未能及时发出告警。如何准确识别出时序指标中的异常,成为了大量用户的痛点,面对采集上来的监控指标“束手无策”,难以配置出有效的告警。
  • 难以快速定位根因。异常指标可能是由某一个维度引起的,当发现整体指标异常时,如何从海量维度中快速定位异常来源于哪个维度组合?是某个机房故障?还是某个服务组件故障?传统方案依赖于专家经验逐个检查可能性最大的维度,浪费大量时间去恢复故障。只有快速定位根因,才能快速响应和解决故障。


针对以上用户痛点,我们可以利用 SPL 所提供的 AIOps 系列函数,实现了更智能的可观测能力。这里介绍其中的两类算法:

  • 异常检测算法。异常检测算法基于历史数据本身的特征,从历史数据建模,分析其变化趋势,标注存在的异常区间,并且能够提供异常分数,准确表示出异常程度。
  • 根因定位算法。能够快速计算出不同维度组合的子序列,并进行算法分析,找到产生异常的维度来源。


最佳实践

Cloud Native


在正式开始前,我们需要完成相关前序准备工作。在完成创建日志服务 SLS 的资源管理单元 Project 和采集、存储和查询单元 Logstore 后,完成 Logtail 采集配置。将 Logtail 安装至 ECS 服务器并开始采集日志,日志会发送到对应的 Logstore 中。

在获得相关日志数据后,我们就可以通过 SPL + AIOps 对访问日志进行智能可观测。

1. 日志到指标:把文本转化为可分析指标

访问指标:根据访问日志可以得到系统整体的访问指标。通过 SPL 将数据按时间进行聚合,得到每分钟的访问量。


*
| extend ts= second_to_nano(to_unixtime(date_trunc(60, __time__)))
| stats request_count=count(1) by ts| make-series request_count on ts

示例中,我们可以看到通过 SPL 得到全局的访问流量指标序列。



2. 异常检测:识别时序指标是否存在异常

针对该时间序列,可以使用异常检测函数识别时序数据中的异常。在现有的可观测产品中,我们提供了两个检测算法,可以覆盖高频场景中的异常检测需求。

  • series_decompose_anomalies
    异常检测函数 series_decompose_anomalies 异常检测函数专注于对偏连续性指标,内置多种算法进行周期估计、趋势拟合、序列分解、序列重构、假设检验,同时也提供了丰富的高级参数供专业的研发同学进行精细的调参,解决时序的异常检测问题。
  • series_pattern_anomalies
    异常检测函数 series_pattern_anomalies 异常检测函数专注于对指标的形态出发,设计端到端的检测模型,可以支持任意长度的连续型或离散型序列的检测。同时支持更大规模的检测需求。


......
| extend ret = series_decompose_anomalies(request_count_arr)or
| extend ret = series_pattern_anomalies(request_count_arr)


在示例中,我们看到 16:00 开始指标存在异常情况,我们可以结合告警感知变化。



3. 定位异常时间点:精确定位异常时间

基于异常检测的结果,使用 SPL 进一步进行过滤,能够判断最近 5 分钟是否有异常分数大于 0.5 的异常点。并且使用该 SPL 语句配置告警,可以准确且及时地发现系统异常。


......
| extend anomalies_score_series = ret.anomalies_score_series
| where array_max(slice(anomalies_score_series, -5, 5)) >= 0.5


4. IP 函数:

多维度富化指标维度当前观测到系统访问流量存在异常,流量猛增,从 IP 角度来看用户可能来自各种地方,但是我们可以把IP转化为其他维度,然后从这些维度查看是否有公共特征。可以使用 SLS 提供的 IP 函数对流量来源进行进一步分析,IP 函数可以把 IP 转化为国家、省、市、运营商等。使用以下 SPL 语句,分析访问 IP 来源的国家。


*
| extend country = ip_to_country(remote_addr)
| stats access_count = count(1) by country

将结果进行可视化,观测访问来源,发现大量海外访问流量来自美国。



5. 根因分析:快速发现异常来源

国外的访问流量增长是否是导致整体访问流量突增的原因?SLS 提供的根因下探函数可以解答这个疑问。我们将整体访问流量按 country,host,agent 这三个维度进行分组聚合,然后对其进行根因定位。


* 
| extend ts= second_to_nano(to_unixtime(date_trunc(60, __time__)))
| extend country = ip_to_country(remote_addr)
| stats request_count=count(1) by ts, country, host, agent
| make-series request_count on ts by country, host, agent
| stats country_arr = array_agg(country), host_arr = array_agg(host), agent_arr = array_agg(agent),ts_arr = array_agg(__ts__), metrics_arr = array_agg(request_count)
| extend ret = series_drilldown(country_arr, host_arr, agent_arr, ts_arr, metrics_arr, 1736756946000000000)

从算法返回结果可以看到,导致异常的维度组合是 country='美国',验证了我们的猜想。接下来我们可以针对该来源的流量进行针对性的优化。


{
# 异常根因对应的维度组合
"attrs": [{   
"country": "美国" 
}],
# 异常根因的评价指标 
"statistics": {  
"relative_ratio": 0.84,   
"relative_unexpected_difference": 0.73,  
"difference": -293.2,   
"predict": 53.3,   
"real": 346.5  
}
}


6. 针对性扩容

通过以上流程,能够快速发现流量异常,并使用 IP 函数和根因定位算法定位出异常原因,能够指导运维人员进行针对性地处理,快速扩容,接住上涨的流量。


总结

Cloud Native


通过上述 step-by-step 的例子中可以看到,SPL + AIOps 能够提供智能化的可观测解决方案,对访问日志获得立体化的观测覆盖,帮助我们加快感知流量,接住泼天富贵。

未来,我们还将提供出更多 AIOps 函数,让 AI 为可观测赋能。欢迎来可观测案例中心尝试:https://sls.aliyun.com/doc/


AI 机器学习函数:

https://help.aliyun.com/zh/sls/user-guide/ai-machine-learning-functions/https://help.aliyun.com/zh/sls/user-guide/machine-learning-syntax-and-functions/

相关文章
|
1月前
|
存储 Java 文件存储
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— logback.xml 配置文件解析
本文解析了 `logback.xml` 配置文件的详细内容,包括日志输出格式、存储路径、控制台输出及日志级别等关键配置。通过定义 `LOG_PATTERN` 和 `FILE_PATH`,设置日志格式与存储路径;利用 `<appender>` 节点配置控制台和文件输出,支持日志滚动策略(如文件大小限制和保存时长);最后通过 `<logger>` 和 `<root>` 定义日志级别与输出方式。此配置适用于精细化管理日志输出,满足不同场景需求。
155 1
|
18天前
|
SQL 运维 关系型数据库
MySQL Binlog 日志查看方法及查看内容解析
本文介绍了 MySQL 的 Binlog(二进制日志)功能及其使用方法。Binlog 记录了数据库的所有数据变更操作,如 INSERT、UPDATE 和 DELETE,对数据恢复、主从复制和审计至关重要。文章详细说明了如何开启 Binlog 功能、查看当前日志文件及内容,并解析了常见的事件类型,包括 Format_desc、Query、Table_map、Write_rows、Update_rows 和 Delete_rows 等,帮助用户掌握数据库变化历史,提升维护和排障能力。
|
30天前
|
监控 Shell Linux
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。
|
1月前
|
监控 Java 应用服务中间件
Tomcat log日志解析
理解和解析Tomcat日志文件对于诊断和解决Web应用中的问题至关重要。通过分析 `catalina.out`、`localhost.log`、`localhost_access_log.*.txt`、`manager.log`和 `host-manager.log`等日志文件,可以快速定位和解决问题,确保Tomcat服务器的稳定运行。掌握这些日志解析技巧,可以显著提高运维和开发效率。
117 13
|
2月前
|
XML JSON Java
Java中Log级别和解析
日志级别定义了日志信息的重要程度,从低到高依次为:TRACE(详细调试)、DEBUG(开发调试)、INFO(一般信息)、WARN(潜在问题)、ERROR(错误信息)和FATAL(严重错误)。开发人员可根据需要设置不同的日志级别,以控制日志输出量,避免影响性能或干扰问题排查。日志框架如Log4j 2由Logger、Appender和Layout组成,通过配置文件指定日志级别、输出目标和格式。
|
6月前
|
存储 监控 安全
深入解析Sysmon日志:增强网络安全与威胁应对的关键一环
在不断演进的网络安全领域中,保持对威胁的及时了解至关重要。Sysmon日志在这方面发挥了至关重要的作用,通过提供有价值的见解,使组织能够加强其安全姿态。Windows在企业环境中是主导的操作系统,因此深入了解Windows事件日志、它们的独特特性和局限性,并通过Sysmon进行增强,变得至关重要。
167 1
|
7月前
|
存储 缓存 关系型数据库
redo log 原理解析
redo log 原理解析
105 0
redo log 原理解析
|
6月前
|
存储 关系型数据库 MySQL
MySQL中的Redo Log、Undo Log和Binlog:深入解析
【10月更文挑战第21天】在数据库管理系统中,日志是保障数据一致性和完整性的关键机制。MySQL作为一种广泛使用的关系型数据库管理系统,提供了多种日志类型来满足不同的需求。本文将详细介绍MySQL中的Redo Log、Undo Log和Binlog,从背景、业务场景、功能、底层实现原理、使用措施等方面进行详细分析,并通过Java代码示例展示如何与这些日志进行交互。
819 0
|
6月前
|
监控 网络协议 CDN
阿里云国际监控查询流量、用量查询流量与日志统计流量有差异?
阿里云国际监控查询流量、用量查询流量与日志统计流量有差异?
|
8月前
|
数据库 Java 监控
Struts 2 日志管理化身神秘魔法师,洞察应用运行乾坤,演绎奇幻篇章!
【8月更文挑战第31天】在软件开发中,了解应用运行状况至关重要。日志管理作为 Struts 2 应用的关键组件,记录着每个动作和决策,如同监控摄像头,帮助我们迅速定位问题、分析性能和使用情况,为优化提供依据。Struts 2 支持多种日志框架(如 Log4j、Logback),便于配置日志级别、格式和输出位置。通过在 Action 类中添加日志记录,我们能在开发过程中获取详细信息,及时发现并解决问题。合理配置日志不仅有助于调试,还能分析用户行为,提升应用性能和稳定性。
103 0

热门文章

最新文章

推荐镜像

更多
下一篇
oss创建bucket