Nginx Access Log 指标预聚合实践

本文涉及的产品
对象存储 OSS,标准 - 本地冗余存储 20GB 3个月
对象存储 OSS,标准 - 同城冗余存储 20GB 3个月
对象存储OSS,敏感数据保护2.0 200GB 1年
简介: Nginx 完成请求处理后会记录客户端请求信息到 access log。与业务请求数量成正比,access log 文件内容日积月累,占用大量磁盘的存储空间的同时,数据量增长也使分析 access log 变得困难。本文介绍一种预计算方案实现冷数据的存储优化以及分析效率提升。

背景


Nginx 完成请求处理后会记录客户端请求信息到 access log。与业务请求数量成正比,access log 文件内容日积月累,占用大量磁盘的存储空间的同时,数据量增长也使分析 access log 变得困难。


阿里云日志服务(SLS)是云原生观测分析平台,为Log/Metric/Trace等数据提供大规模、低成本、实时平台化服务。一站式提供数据采集、加工、分析、告警可视化与投递功能,全面提升研发、运维、运营和安全等场景数字化能力。


在 web 服务器上部署  Logtail 客户端,实时采集 Nginx access log 数据到 SLS 存储:



image-20210715214622219.png


  • 问题一:存储空间持续增加


以 34K TPS 的请求量计算,每条日志 500 Bytes,一个月累计后达到 42 TB。但 access log 随时间推移逐渐从温数据变为冷数据,这带来一笔不小的存储开销。


image-20210715220619165.png


  • 问题二:分析计算消耗大


假设对 30 天的数据分析小时级流量特征,如果每次对全量数据做即时分析,计算成本是巨大的,计算延时的增加也影响了体验。


以 host、method 分组计算小时级流量特征为例:


* | select (__time__ - __time__ % 3600) as dt, method, host, sum(request_length)/1024.0/1024.0 as request_MB, sum(body_byte_sent)/1024.0/1024.0 as body_sent_MB, avg(upstream_response_time) as avg_latency, avg(request_time) as avg_request_time group by dt, method, host order by dt asc limit 10000


随着查询时间范围增加,计算引擎需要扫描更多的数据量做计算,增加了资源开销与分析延时。

数据查询范围

扫描日志条数

计算耗时

24 hours

14,397,600

1,390ms

30 days

431,884,800

13,291ms


方案


本文介绍一种预计算方案:


  1. 优化冷数据:历史数据降精度存储。
  2. 降分析延时:将全量数据计算拆分为多次增量计算。


具体来说,是将 SQL 计算任务托管在后台,周期性运行,得到一个个时间区间的统计值,将这些统计结果写入存储库,可达到如下效果:


  1. 降维后的数据满足固定的统计需求,对于 30 天前的日志原文,如不需要做细节问题调查,甚至可以缩短存储 TTL 到 7 天。
  2. 统计结果直接存储下来,可以被多种下游系统直接使用,例如可视化大盘、告警监控、入库数仓等。
  3. 查询引擎在降维后数据上计算,由于要处理的数据量大大降低,达到秒开的效果。


Scheduled SQL 实践


Scheduled SQL 是一项由 SLS 全托管的功能,解决场景需求:


  1. 定时分析数据:根据业务需求设置 SQL 语句或查询分析语句,定时执行数据分析,并将分析结果存储到目标库中。
  2. 全局聚合:对全量、细粒度的数据进行聚合存储,汇总为存储大小、精度适合的数据,相当于一定程度的有损压缩数据。


image-20210601122007945.png


本节介绍如何通过 Scheduled SQL 对 Nginx access log 做指标预计算。


原始日志库中执行 SQL 分析


索引字段配置如下:


image-20210718112045691.png


指标要求:按照时间( 5 分钟粒度)、请求方法(method)、主机(host)维度分组,统计每个时间段内客户端请求服务端的流量总计(request_MB)、服务端返回给客户端的流量总计(body_sent_MB)、后端响应平均延时(avg_latency)、客户端请求平均耗时(avg_request_time)。


SQL 代码如下:


* | select (__time__ - __time__ % 300) as dt, method, host, sum(request_length)/1024.0/1024.0 as request_MB, sum(body_byte_sent)/1024.0/1024.0 as body_sent_MB, avg(upstream_response_time) as avg_latency, avg(request_time) as avg_request_time group by dt, method, host order by dt asc limit 10000


在 SLS 控制台上分析预览:


image-20210718115803961.png


确认结果符合预期后,以当前  SQL 语句创建 Scheduled SQL 作业。


计算配置


资源池有免费(Project 级别 15 并行度)、增强型(收费,但资源可扩展,适用于大量计算且有 SLA 要求的业务场景)两种,按照你的需求来设置即可。


image-20210718115842090.png


注意为目标库 nginx_access_log_rollup 也提前准备好数据索引,如下图:


image-20210718120023711.png


调度配置


设置 SQL 每 5 分钟执行一次,每次执行处理最近 5 分钟窗口的数据。


注意:


1. 设置延迟执行参数,上游 Logstore 的数据到来可能延迟,建议设置大一些的值做等待来保证计算数据的完整性。

2. SQL 运行超过指定次数或指定时间后,这一次的 SQL 实例会失败并继续下一个实例的调度。


image-20210718114004043.png


实例查看、管理


可以在控制台上查看刚才创建的 Scheduled SQL 作业:


image-20210718120205278.png


在作业管理页面内,可以查看到每一次执行的实例列表。


image-20210718120412831.png


每个实例信息中有 SQL 查询区间,如果任务失败(权限、SQL 语法等原因)或 SQL 处理行数指标为 0(数据迟到或确实没有数据),可以对指定实例做重试运行(失败告警功能开发中)。


效果


Nginx access log 预计算之后数据格式:


image-20210718120250125.png


预计算结果之上用 SQL 分析流量、延时的时间趋势,对分析结果添加仪表盘来实现一个业务大盘。


image-20210718123329509.png


  • 延时统计


统计 client 请求延时趋势图:


* | select from_unixtime(dt - dt % 3600) as t, concat('host:', host, '#method:', method) as host_method, round(max(avg_request_time), 3) as max_request_time group by dt, host_method order by dt asc limit 10000


选择流图,图表类型为线图:


image-20210718135615865.png


服务端响应延时用相同方式处理,SQL 语句:


* | select from_unixtime(dt - dt % 3600) as t, concat('host:', host, '#method:', method) as host_method, round(max(avg_latency), 3) as max_latency group by dt, host_method order by dt asc limit 10000


  • 流量统计


统计 response 流量趋势图:



* | select from_unixtime(dt - dt % 3600) as t, concat('host:', host, '#method:', method) as host_method, round(sum(body_sent_MB), 3) as sum_body_sent_MB group by dt, host_method order by dt asc limit 10000


选择流图,图表类型为面积图:


image-20210718135738078.png


request 流量用相同方式处理,SQL 语句:


* | select from_unixtime(dt - dt % 3600) as t, concat('host:', host, '#method:', method) as host_method, round(sum(request_MB), 3) as sum_request_MB group by dt, host_method order by dt asc limit 10000


  • 流量、延时分析大盘


将以上四个图表保存到仪表盘中,效果如下:


image-20210718201129391.png


更多内容请参考:


采集 Nginx access log


使用 Scheduled SQL


相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
|
3月前
|
SQL 人工智能 监控
SLS Copilot 实践:基于 SLS 灵活构建 LLM 应用的数据基础设施
本文将分享我们在构建 SLS SQL Copilot 过程中的工程实践,展示如何基于阿里云 SLS 打造一套完整的 LLM 应用数据基础设施。
670 57
|
存储 运维 开发工具
警惕日志采集失败的 6 大经典雷区:从本地管理反模式到 LoongCollector 标准实践
本文探讨了日志管理中的常见反模式及其潜在问题,强调科学的日志管理策略对系统可观测性的重要性。文中分析了6种反模式:copy truncate轮转导致的日志丢失或重复、NAS/OSS存储引发的采集不一致、多进程写入造成的日志混乱、创建文件空洞释放空间的风险、频繁覆盖写带来的数据完整性问题,以及使用vim编辑日志文件导致的重复采集。针对这些问题,文章提供了最佳实践建议,如使用create模式轮转日志、本地磁盘存储、单线程追加写入等方法,以降低日志采集风险,提升系统可靠性。最后总结指出,遵循这些实践可显著提高故障排查效率和系统性能。
1010 21
|
11月前
|
存储 监控 安全
网络安全视角:从地域到账号的阿里云日志审计实践
日志审计的必要性在于其能够帮助企业和组织落实法律要求,打破信息孤岛和应对安全威胁。选择 SLS 下日志审计应用,一方面是选择国家网络安全专用认证的日志分析产品,另一方面可以快速帮助大型公司统一管理多组地域、多个账号的日志数据。除了在日志服务中存储、查看和分析日志外,还可通过报表分析和告警配置,主动发现潜在的安全威胁,增强云上资产安全。
876 90
|
9月前
|
数据可视化 关系型数据库 MySQL
ELK实现nginx、mysql、http的日志可视化实验
通过本文的步骤,你可以成功配置ELK(Elasticsearch, Logstash, Kibana)来实现nginx、mysql和http日志的可视化。通过Kibana,你可以直观地查看和分析日志数据,从而更好地监控和管理系统。希望这些步骤能帮助你在实际项目中有效地利用ELK来处理日志数据。
666 90
|
Rust 前端开发 JavaScript
Tauri 开发实践 — Tauri 日志记录功能开发
本文介绍了如何为 Tauri 应用配置日志记录。Tauri 是一个利用 Web 技术构建桌面应用的框架。文章详细说明了如何在 Rust 和 JavaScript 代码中设置和集成日志记录,并控制日志输出。通过添加 `log` crate 和 Tauri 日志插件,可以轻松实现多平台日志记录,包括控制台输出、Webview 控制台和日志文件。文章还展示了如何调整日志级别以优化输出内容。配置完成后,日志记录功能将显著提升开发体验和程序稳定性。
697 1
Tauri 开发实践 — Tauri 日志记录功能开发
|
12月前
|
存储 数据采集 监控
云上数据安全保护:敏感日志扫描与脱敏实践详解
随着企业对云服务的广泛应用,数据安全成为重要课题。通过对云上数据进行敏感数据扫描和保护,可以有效提升企业或组织的数据安全。本文主要基于阿里云的数据安全中心数据识别功能进行深入实践探索。通过对商品购买日志的模拟,分析了如何使用阿里云的工具对日志数据进行识别、脱敏(3 种模式)处理和基于 StoreView 的查询脱敏方式,从而在保障数据安全的同时满足业务需求。通过这些实践,企业可以有效降低数据泄漏风险,提升数据治理能力和系统安全性。
1692 235
云上数据安全保护:敏感日志扫描与脱敏实践详解
|
12月前
|
运维 监控 Cloud Native
一行代码都不改,Golang 应用链路指标日志全知道
本文将通过阿里云开源的 Golang Agent,帮助用户实现“一行代码都不改”就能获取到应用产生的各种观测数据,同时提升运维团队和研发团队的幸福感。
612 136
|
Web App开发 存储 监控
iLogtail 开源两周年:UC 工程师分享日志查询服务建设实践案例
本文为 iLogtail 开源两周年的实践案例分享,讨论了 iLogtail 作为日志采集工具的优势,包括它在性能上超越 Filebeat 的能力,并通过一系列优化解决了在生产环境中替换 Filebeat 和 Logstash 时遇到的挑战。
453 101
|
9月前
|
SQL 存储 自然语言处理
让跨 project 联查更轻松,SLS StoreView 查询和分析实践
让跨 project 联查更轻松,SLS StoreView 查询和分析实践
178 1

热门文章

最新文章

相关产品

  • 日志服务