一招高效解析 Access Log,轻松应对泼天流量
业务背景
近日大量美国用户转移到新的社交平台,小红书登顶美国 App 下载榜首。与小红书一样的出海企业都会遇到类似问题:海外用户规模猛增,访问流量也随之快速上涨,如何应对这突如其来的“泼天富贵”:
- 后端服务如何识别突增流量、快速扩容?
- 如何识别流量来源、针对网络做优化?
- 服务波动时能否快速定位来源?
只有妥善解决这些关键问题,企业才能有效留住用户。为此,阿里云可观测推出一套全面的流量分析解决方案,帮助企业在面对巨大的商业机遇时拥有充足的底气与信心。本文将基于访问日志(Access Log)并结合 AIOps 算法,演示如何快速识别流量波动以及精准定位波动的来源,从而为企业提供有针对性的优化建议。
什么是访问日志(Access Log)
访问日志(Access Log)作为记录用户对服务器或网络服务进行访问的详细信息的日志文件。在各类服务器中得到广泛应用,例如 Web 服务器、应用服务器和数据库服务器等。通过访问日志,对分析用户习惯、优化服务性能以及提升用户体验具有重要意义。
访问日志通常包含多种信息,如用户的 IP 地址、访问时间、请求的 URL、HTTP 状态码、用户代理字符串等。这些数据不仅有助于监控系统的性能,还能在遇到问题时为故障排查提供宝贵的线索。此外,访问日志还可以用于安全审计,帮助识别可疑的访问模式和潜在的网络攻击,从而增强系统的安全防护措施,是现代网络服务管理中不可或缺的一部分。这里我们以 Nginx 的 Access Log 为例,其通常具备以下字段,可以看到,其中记录了访问请求的来源、方法、延时等数据。
为什么需要 AlOps 算法分析访问日志
想要更好的分析日志信息,离不开一套成熟的数据处理语法,SPL(SLS Processing Language,https://help.aliyun.com/zh/sls/user-guide/spl-overview)是针对数据查询、流式消费、数据加工、采集、Ingestion等数据处理场景,所提供的统一的数据处理语法。通过 SPL 能够快速从数据中提取出时序指标,并进行进一步分析。为什么要推出智能化运维呢?
在传统的运维告警方案上,存在着两个挑战:
- 难以准确识别异常。针对指标数据,通常会通过计算时间窗口均值、变化率等方式来识别异常并配置告警,但是存在着大量漏报、误报问题,针对不断变化的场景,难以确定一个合适的异常阈值。例如一些微小的噪声波动就可能触发大量告警,亦或者因为只差一点达到阈值,而未能及时发出告警。如何准确识别出时序指标中的异常,成为了大量用户的痛点,面对采集上来的监控指标“束手无策”,难以配置出有效的告警。
- 难以快速定位根因。异常指标可能是由某一个维度引起的,当发现整体指标异常时,如何从海量维度中快速定位异常来源于哪个维度组合?是某个机房故障?还是某个服务组件故障?传统方案依赖于专家经验逐个检查可能性最大的维度,浪费大量时间去恢复故障。只有快速定位根因,才能快速响应和解决故障。
针对以上用户痛点,我们可以利用 SPL 所提供的 AIOps 系列函数,实现了更智能的可观测能力。这里介绍其中的两类算法:
- 异常检测算法。异常检测算法基于历史数据本身的特征,从历史数据建模,分析其变化趋势,标注存在的异常区间,并且能够提供异常分数,准确表示出异常程度。
- 根因定位算法。能够快速计算出不同维度组合的子序列,并进行算法分析,找到产生异常的维度来源。
最佳实践
在正式开始前,我们需要完成相关前序准备工作。在完成创建日志服务 SLS 的资源管理单元 Project 和采集、存储和查询单元 Logstore 后,完成 Logtail 采集配置。将 Logtail 安装至 ECS 服务器并开始采集日志,日志会发送到对应的 Logstore 中。
在获得相关日志数据后,我们就可以通过 SPL + AIOps 对访问日志进行智能可观测。
1. 日志到指标:把文本转化为可分析指标
访问指标:根据访问日志可以得到系统整体的访问指标。通过 SPL 将数据按时间进行聚合,得到每分钟的访问量。
示例中,我们可以看到通过 SPL 得到全局的访问流量指标序列。
2. 异常检测:识别时序指标是否存在异常
针对该时间序列,可以使用异常检测函数识别时序数据中的异常。在现有的可观测产品中,我们提供了两个检测算法,可以覆盖高频场景中的异常检测需求。
series_decompose_anomalies
异常检测函数 series_decompose_anomalies 异常检测函数专注于对偏连续性指标,内置多种算法进行周期估计、趋势拟合、序列分解、序列重构、假设检验,同时也提供了丰富的高级参数供专业的研发同学进行精细的调参,解决时序的异常检测问题。
series_pattern_anomalies
异常检测函数 series_pattern_anomalies 异常检测函数专注于对指标的形态出发,设计端到端的检测模型,可以支持任意长度的连续型或离散型序列的检测。同时支持更大规模的检测需求。
在示例中,我们看到 16:00 开始指标存在异常情况,我们可以结合告警感知变化。
3. 定位异常时间点:精确定位异常时间
基于异常检测的结果,使用 SPL 进一步进行过滤,能够判断最近 5 分钟是否有异常分数大于 0.5 的异常点。并且使用该 SPL 语句配置告警,可以准确且及时地发现系统异常。
4. IP 函数:
多维度富化指标维度
当前观测到系统访问流量存在异常,流量猛增,从 IP 角度来看用户可能来自各种地方,但是我们可以把IP转化为其他维度,然后从这些维度查看是否有公共特征。可以使用 SLS 提供的 IP 函数对流量来源进行进一步分析,IP 函数可以把 IP 转化为国家、省、市、运营商等。使用以下 SPL 语句,分析访问 IP 来源的国家。
将结果进行可视化,观测访问来源,发现大量海外访问流量来自美国。
5. 根因分析:快速发现异常来源
国外的访问流量增长是否是导致整体访问流量突增的原因?SLS 提供的根因下探函数可以解答这个疑问。我们将整体访问流量按 country,host,agent 这三个维度进行分组聚合,然后对其进行根因定位。
从算法返回结果可以看到,导致异常的维度组合是 country=‘美国’,验证了我们的猜想。接下来我们可以针对该来源的流量进行针对性的优化。
6. 针对性扩容
通过以上流程,能够快速发现流量异常,并使用 IP 函数和根因定位算法定位出异常原因,能够指导运维人员进行针对性地处理,快速扩容,接住上涨的流量。
总结
通过上述 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/