用好SLB访问日志,做实时可视化分析

本文涉及的产品
对象存储 OSS,20GB 3个月
日志服务 SLS,月写入数据量 50GB 1个月
对象存储 OSS,内容安全 1000次 1年
简介: 阿里云SLB是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 负载均衡对于大部分云上架构来说都是基础设施组件,地位非常重要,因此,对SLB持续的监控、探测、诊断和报告是一个强需求。

阿里云SLB是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。

负载均衡对于大部分云上架构来说都是基础设施组件,地位非常重要,因此,对SLB持续的监控、探测、诊断和报告是一个强需求。用户一般可以通过云厂商内置的监控报表来了解SLB实例运行状况,本文则会介绍另一种途径:通过采集SLB访问日志,结合可视化报表、查询分析引擎,最终达到实时、交互分析SLB实例状况的目标。

SLB访问日志功能当前支持基于HTTP/HTTPS的七层负载均衡,访问日志内容丰富,提供近30个字段,例如:收到请求的时间、客户端的IP地址、处理Latency、请求URI、后端RealServer(阿里云ECS)地址、返回状态码等。完整字段及功能说明请参考负载均衡7层访问日志功能

本文基于阿里云日志服务的可视化和日志实时查询(OLTP+OLAP)能力,向大家介绍SLB实例的一些典型报表统计、日志查询分析的方法。

总体概览

负载均衡支持RealServer的水平扩展和故障冗余恢复,为应用提供大规模、高可靠的并发web访问服务支撑。典型的概览指标包括:

  • PV:client(请求源IP)发起的HTTP(S)请求次数
  • UV:对于相同client IP只计算一次,合计的总体请求次数
  • 请求成功率:状态码为2XX的请求次数占总体PV的比例
  • 请求报文流量:客户端请求报文长度(request_length字段)的总和
  • 返回客户端流量:SLB返回给客户端的HTTP body的字节数(body_bytes_sent字段)总和
  • 请求的热点分布:计算client IP的地理位置,按照每个地理位置来统计每个区域的PV情况

operation_overview

上图中,可以看到用户请求主要来自珠三角和长三角区域。

在日志服务的Dashboard中,通过添加过滤条件可以在当前图表中筛选符合条件的数据指标(例如:client IP维度、SLB实例ID维度)来展示,这里需要查询一个指定SLB实例ID的PV、UV随时间的变化趋势。

slb_add_id_filter

client_pv_uv_trend

请求调度分析

从客户端过来的流量会先被SLB处理,并分发到多台RealServer的一台上做实际的业务逻辑处理。SLB可以检测不健康的机器并重新分配流量到其它正常服务的RealServer上,等异常机器恢复正常后再将流量重新加上去,这个过程是自动完成的。

slb_listener

对SLB实例添加一个监听,监听可以设置轮询、加权轮询(WRR)、加权最小连接数(WLC)这三种调度方法:

  • 轮询:按照访问次数依次将外部请求依序分发到后端ECS上。
  • 加权轮询:您可以对每台后端服务器设置权重值,权重值越高的服务器,被轮询到的次数(概率)也越高。
  • 加权最小连接数:除了根据每台后端服务器设定的权重值来进行轮询,同时还考虑后端服务器的实际负载(即连接数)。当权重值相同时,当前连接数越小的后端服务器被轮询到的次数(概率)也越高。

slb_listener_config

在示例中,172.19.39.34机器同时兼有跳板机职能,其性能是其它三台机器的4倍,这里为它设置权重100,其余设置权重为20。

slb_weight_config

基于实例的访问日志,通过如下一条查询语句可以完成和两个维度的流量聚合:

* | select COALESCE(client_ip, vip_addr, upstream_addr) as source, COALESCE(upstream_addr, vip_addr, client_ip) as dest, sum(request_length) as inflow group by grouping sets( (client_ip, vip_addr), (vip_addr, upstream_addr))

结合桑基图对SQL查询结果做vip维度的聚合可视化,最终得到请求报文流量拓扑图。多个client IP向SLB vip(172.19.0.24)发起请求,请求报文流量基本遵循20:20:20:100比例转发到后端的RealServer进行处理。下图清晰地表述了每台RealServer的负载情况。

slb_flow_topology

流量与Latency分析

按照1分钟时间维度对流量与latency指标做聚合计算:

  • request_length、body_bytes_sent统计

flow_trend

  • request_time、upstream_response_time统计

latency_trend

  • 高延迟RealServer统计

slb_access_top_upstreamtime

用户请求概览

对访问日志中HTTP(S)请求本身的分析,可以从请求的方法、协议、状态码等维度来入手。

request_method_distribution

在一个时间段内,请求方法维度上可以做PV分布统计(如上图)。除此之外,如果再加上时间属性,同时在时间、请求方法两个维度上可以统计出各方法的PV趋势如下图。

pv_trend_by_method

请求响应状态码分布可以帮助我们快速掌握服务的基本状况,如果大量的500状态码则意味着我们后端RealServer的应用程序在发生内部错误。

status_distribution

围绕着每一个状态码,可以查看其随时间变化趋势。

pv_trend_by_status

工程师指定时间段、状态码快速定位RealServer的需求,借助日志服务的查询分析功能可以很快得以实现:

search_log_500

请求源分析

对client的IP做计算可以得到每条请求的发起地理位置(国家、省份、城市)、电信运营商信息,如下是对用户请求IP的运营商做了一个PV分布图。

slb_ip_provider

按照请求PV降序,对client IP做统计可以帮助我们发现大用户请求的具体来源。

slb_access_top_client_ua

用户代理(http_user_agent)也是常常需要关注的对象,可以据此区分出谁在访问我们的网站或服务。比如搜索引擎会使用爬虫机器人扫描或下载网站资源,一般情况下的低频爬虫访问可以让搜索引擎及时更新网站内容、有助于网站的推广和SEO,但如果高PV的请求都来自于爬虫,则可能对服务的性能和机器资源造成浪费,我们需要了解到这个状况并采取手段来控制影响。

访问日志中根据查询SLB ID或应用host、http_user_agent关键词,可以很快检索出相关记录。下图是一条搜狗爬虫程序的GET请求日志,请求很稀疏,对于应用无影响。

search_log_ua

运营概览

SLB访问日志在运营同学手里同样发挥着重要作用,可以基于日志分析出来流量模式,进而辅助业务决策。

在地理维度上,通过PV的热点分布,可以清晰了解到我们服务的重点客户在哪里,PV低的区域可能需要再推广加强。

slb_access_pv_distribution

对于一个网站而言,通过分析访客的行为可以为网站内容建设提供有力的参考。哪些内容好,哪些内容不好?这个问题可以用头部、尾部PV的host/URI来回答。

slb_access_top_host_uri

对于热门资源(访问日志的request_uri字段),可以关注一下日志详情的http_referer字段,看看我们网站的请求都来自于哪里?好的导流入口需要持续加强,对于盗链行为则需要想办法克制。下图是在日志查询页面中找到一条来自百度图片的跳转请求。

search_log_detail_refer

SLB访问日志分析介绍至此告一段落,意在抛砖引玉,数据已备好,等你来分析。

目前SLB访问日志(7层)已在国内所有公有云区域开放,欢迎使用。

更多资料

  • 文档

负载均衡7层访问日志功能
SLB访问日志

  • 云栖文章

新功能:阿里云负载均衡支持访问日志功能

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
9天前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP的编程实践中,设计模式是解决常见软件设计问题的最佳实践。单例模式作为设计模式中的一种,确保一个类只有一个实例,并提供全局访问点,广泛应用于配置管理、日志记录和测试框架等场景。本文将深入探讨单例模式的原理、实现方式及其在PHP中的应用,帮助开发者更好地理解和运用这一设计模式。
在PHP开发中,单例模式通过确保类仅有一个实例并提供一个全局访问点,有效管理和访问共享资源。本文详细介绍了单例模式的概念、PHP实现方式及应用场景,并通过具体代码示例展示如何在PHP中实现单例模式以及如何在实际项目中正确使用它来优化代码结构和性能。
|
13天前
|
缓存 监控 算法
分析慢日志文件来优化 PHP 脚本的性能
分析慢日志文件来优化 PHP 脚本的性能
|
2月前
|
负载均衡 应用服务中间件 nginx
搭建域名访问环境二(负载均衡到网关)
这篇文章讲述了如何配置Nginx实现域名访问环境,通过负载均衡将请求从Nginx反向代理到服务网关,并提供了详细的配置步骤和测试验证方法。
搭建域名访问环境二(负载均衡到网关)
08-06-06>pe_xscan 精简log分析代码 速度提升一倍
08-06-06>pe_xscan 精简log分析代码 速度提升一倍
|
2月前
|
SQL 监控 关系型数据库
使用 pt-query-digest 工具分析 MySQL 慢日志
【8月更文挑战第5天】使用 pt-query-digest 工具分析 MySQL 慢日志
39 3
使用 pt-query-digest 工具分析 MySQL 慢日志
|
2月前
|
存储 分布式计算 大数据
【Flume的大数据之旅】探索Flume如何成为大数据分析的得力助手,从日志收集到实时处理一网打尽!
【8月更文挑战第24天】Apache Flume是一款高效可靠的数据收集系统,专为Hadoop环境设计。它能在数据产生端与分析/存储端间搭建桥梁,适用于日志收集、数据集成、实时处理及数据备份等多种场景。通过监控不同来源的日志文件并将数据标准化后传输至Hadoop等平台,Flume支持了性能监控、数据分析等多种需求。此外,它还能与Apache Storm或Flink等实时处理框架集成,实现数据的即时分析。下面展示了一个简单的Flume配置示例,说明如何将日志数据导入HDFS进行存储。总之,Flume凭借其灵活性和强大的集成能力,在大数据处理流程中占据了重要地位。
36 3
|
2月前
|
Ubuntu Linux 测试技术
在Linux中,已知 apache 服务的访问日志按天记录在服务器本地目录/app/logs 下,由于磁盘空间紧张现在要求只能保留最近7天的访问日志,请问如何解决?
在Linux中,已知 apache 服务的访问日志按天记录在服务器本地目录/app/logs 下,由于磁盘空间紧张现在要求只能保留最近7天的访问日志,请问如何解决?
|
2月前
|
应用服务中间件 Linux nginx
在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?
在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?
|
2月前
|
监控 安全 关系型数据库
在Linux中,什么是系统日志和应用程序日志?如何分析它们?
在Linux中,什么是系统日志和应用程序日志?如何分析它们?
|
2月前
|
存储 消息中间件 监控
Java日志详解:日志级别,优先级、配置文件、常见日志管理系统ELK、日志收集分析
Java日志详解:日志级别,优先级、配置文件、常见日志管理系统、日志收集分析。日志级别从小到大的关系(优先级从低到高): ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF 低级别的会输出高级别的信息,高级别的不会输出低级别的信息

相关产品

  • 日志服务
  • 下一篇
    无影云桌面