`
猫耳呀
  • 浏览: 165711 次
社区版块
存档分类
最新评论

SLB访问日志分析:基于客户端来源和HTTP状态码的实践

 
阅读更多

摘要: 阿里云负载均衡SLB可以对多台云服务器(ECS)进行流量分发,支持TCP的四层负载均衡和基于HTTP/HTTPS的七层负载均衡。使用SLB可以降低单台ECS异常时对业务的冲击,提升系统可用性。同时,结合弹性伸缩服务(ESS)动态扩容、缩容后端服务器可以快速应对业务流量的变化。

阿里云负载均衡SLB可以对多台云服务器(ECS)进行流量分发,支持TCP的四层负载均衡和基于HTTP/HTTPS的七层负载均衡。使用SLB可以降低单台ECS异常时对业务的冲击,提升系统可用性。同时,结合弹性伸缩服务(ESS)动态扩容、缩容后端服务器可以快速应对业务流量的变化。

SLB七层访问日志内容丰富,提供近30个字段,例如:收到请求的时间、客户端的IP地址、处理Latency、请求URI、后端RealServer(阿里云ECS)地址、返回状态码等。在您开启SLB七层访问日志功能后,SLB会记录对应实例上所有访问日志到日志服务。本文以两个主题向大家介绍如何通过日志服务来发掘SLB访问日志背后蕴含的一些价值。

请求从哪里来

这是一个关于client_ip的问题,直接看访问日志的client_ip字段就可以回答。但有时会发现client_ip总是那么几个值,直觉告诉我们不大对劲:

一个客户端的请求从最初的ip到SLB负载均衡,如果不经过代理,那么client_ip记录的就是原始客户端ip。而假如请求经过proxy多次转发,这种情况下访问日志记录的client_ip就不能真实反应请求来源了。

好在SLB访问日志中有另两个字段可以帮助我们解决真实client_ip问题:

  • http_x_forwarded_for,取自HTTP扩展头X-Forwarded-For字段,是RFC7293标准。假设客户端在client_0发出请求,到达服务端之前依次经过了三个代理proxy_1、proxy_2、proxy_3,其中proxy_3直连负载均衡器,那么proxy_3会在X-Forwarded-For上追加proxy_2的ip表示是在替proxy_2转发请求。这样多层级联后形成一个用逗号连接的字符串"client_0_ip,proxy_1_ip,proxy_2_ip",字符串中的第一个即是原客户端ip。
  • http_x_real_ip,取自HTTP自定义头X-Real-IP字段,非正式标准但在业内普遍使用。在各层代理始终坚持记录原始客户端ip的前提下,这是最方便且正确的取值。

值得注意的是,X-Forwarded-For和X-Real-IP字段都有可能出现不准确的情况,感兴趣的同学可以读一下这篇文章:HTTP请求头中的X-Forwarded-For。

本文按照X-Real-IP优先策略计算真实的请求来源ip,算法用如下决策树来表达:

当http_x_forwarded_for、http_x_real_ip字段取值为字符串"-"时,表示该字段值不是有效内容。那么通过SQL的case/when语法把上图的计算方法翻译如下:

real_client_ip是通过算法得到的优化版真实客户端ip:

在real_client_ip基础上,可以使用日志服务IP地理函数计算访问来源的地理(国家、省市、运营商、经纬度)信息。例如按照省维度统计PV分布:

HTTP状态码说明了什么

408 Request Timeout

现象

客户端请求部署在SLB上的服务,但经常出现网络超时情况。

排查过程

首先用SQL统计是否有异常的状态码:

not (status : 200) | select status, count(*) as pv group by status order by pv desc

分析发现在最近15分钟的访问日志中有些408返回的请求:

关于408状态码,它表示服务端在一定时间内没有收到完整的请求,这个时候服务端决定不再等待,在响应中将Connection首部值设置为close并主动关闭连接。

发生408错误的时候,表现为Request Timeout。最大可能的两个原因有:客户端没有在超时时间内把数据包发到服务端;或者是因为服务端负载很重,没有及时处理请求。如果通过监控可以排除服务端负载原因,那么可以将更多关注点转移到客户端身上。

统计408状态的client_ip来源:

status : 408 | select client_ip, count(*) as pv group by client_ip order by pv desc

如果client_ip集中在几个特定来源上,那么,个别客户端网络流量导致问题的可能性就比较大。

同时,查看408状态码的日志发现,异常请求的upstream_addr、upstream_status都没有记录,这说明请求没有到达后端real server。这个时候可以认为,客户端问题导致网络超时的可能性是很大了。

接下来,就请到客户端上查看网路监控或抓包调查吧。

499 Client Closed Request

现象

SLB负载均衡上的流量出现下跌,同时后端服务器上没有看到5xx错误。

排查过程

经典开局,先看异常状态码分布,但这次我们怀疑是499导致的:

499状态码表示服务端Nginx正在处理请求过程中,客户端主动关闭了连接。

通过异常的访问日志加以印证,upstream_addr记录了请求在real server上进行处理,但是没有记录响应的后端状态码upstream_status,说明后端服务器没有完成请求的处理。并且,整个请求的处理时间request_time用了10秒多,也许正是因为长时间的等待导致用户停止了下载任务。

原文链接

分享到:
评论

相关推荐

    SLB七层访问日志分析.pptx

    在日志分析和可视化方面,SLB提供了开箱即用的实时交互式仪表盘,而AWS ELB则需要额外的工具。在日志内容告警方面,SLB直接支持,而AWS ELB则不提供此功能。对于日志消费,SLB支持实时消费,如消费组、Storm、Spark ...

    阿里云ECS+SLB的架构

    客户端通过浏览器访问http://www.webtest.com时,SLB将根据轮询算法分发请求到后端服务器。 #### 角色定义 - **前端**:SLB负责接收外部请求并通过负载均衡算法将流量分发到后端服务器。 - **后端**:ECS实例扮演...

    nginx四层代理测试 及SLB负载均衡功能配置测试

    SLB(Server Load Balancer)是指一种负载均衡技术,可以将客户端的请求分配到多个服务器上,以提高服务器的可用性和性能。我们的测试结果表明,SLB可以实现IP透传功能,即将客户端的IP地址传递给后端服务器。SLB还...

    负载均衡SLB使用手册

    - **网络请求分发**:基于应用特性智能分配客户端请求至服务池中的服务器。 - **高可用性保障**:通过健康检查机制,自动隔离异常状态的服务器,确保服务连续性。 - **安全增强**:增强服务器池的抗攻击能力,实现...

    负载均衡SLB使用手册1

    负载均衡SLB(Server Load Balancer)是阿里云提供的一种网络负载均衡服务,其主要目标是提高应用服务的可用性和性能,通过分散网络流量到多个云服务器实例来避免单一节点故障。SLB通过设置虚拟服务地址(IP),使得...

    基于Python django实现的企业内部安全巡检工具源码+数据库,帮助基于阿里云构建生产服务的中小企业,巡扫ECS/SLB

    基于Python django实现的企业内部安全巡检工具源码+数据库,帮助基于阿里云构建生产服务的中小企业,巡扫ECS/SLB是否存在未授权访问的端口 其主体分为三部分:SLB外网开放web端口扫描及浏览器模拟截图,ECS外网开放...

    HSRP SLB VRRP GLBP简单理解

    ### HSRP (Hot Standby Router Protocol) #### 简介 HSRP 是一种热备份路由...HSRP 和 VRRP 主要在路由器级别提供冗余,而 SLB 和 GLBP 更侧重于服务器级别的负载均衡。这些协议的选择取决于具体的网络需求和场景。

    关于SLB您不可不知的使用方法

    - **性能提升**:利用SLB实现负载均衡,确保任何时刻都有足够处理能力来应对访问请求,提高系统稳定性和可靠性。 - **易维护性**:当某个ECS实例出现故障时,其他正常运行的实例可无缝接管任务,保障服务不中断。 ...

    阿里云ssl证书配置https和slb的http跳转到https-详细笔记总结

    摘要:本文主要介绍了阿里云 SSL 证书配置 HTTPS 和 SLB 的 HTTP 跳转到 HTTPS 的详细笔记总结,包括两种方案:一种是 SSL 证书配置在 SLB 上,访问 HTTP:// 会自动跳转到 HTTPS://;另一种是 SSL 证书配置在 Nginx ...

    转:典型的几个负载均衡算法---SLB

    负载均衡(Load Balancing)是网络服务中的一个关键概念,主要目的是通过分散网络流量到多个服务器,以确保系统的高可用性、性能优化和资源的有效利用。在本文中,我们将深入探讨几种典型的负载均衡算法,特别是在...

    ServerLoadBalancingRadware负载均衡.pptx

    服务器负载均衡(Server Load Balancing, SLB)是一种网络技术,用于在多台服务器之间分配网络流量,以优化资源利用、提高系统响应速度、保证服务可用性和可靠性。Radware是提供此类解决方案的知名供应商之一。以下...

    如何定义SLB.docx

    负载均衡服务(SLB,Server Load Balancer)是阿里云提供的一种云服务,用于自动分配进入系统的网络流量,以实现高可用性和高可扩展性。通过将流量分散到多个后端服务器,SLB可以防止单点故障,提高应用的服务质量和...

    阿里云 专有云企业版 V3.6.1 负载均衡SLB 技术白皮书 - 20181105.pdf

    【阿里云专有云企业版 V3.6.1 负载均衡SLB 技术白皮书】是阿里云针对其专有云环境下,提供的一种高可用和高性能的负载分发解决方案的技术文档。负载均衡(Server Load Balancer, SLB)是一种网络服务,其主要目标是...

    阿里云 专有云企业版 V3.6.2 负载均衡SLB 用户指南 - 20181228.pdf

    7. **安全与监控**:SLB提供了丰富的安全控制,如黑白名单、防火墙规则,以及访问日志记录,帮助用户监控和保护服务免受攻击。同时,用户可通过云监控服务查看SLB的各项性能指标,如带宽使用、请求QPS等。 8. **...

    负载均衡原理与技术实现.doc

    - **四层负载均衡(L4 SLB)**:基于网络层(IP层)和传输层(TCP/UDP层),主要根据IP地址和端口号进行负载分配。负载均衡器接收客户端请求,修改目标地址为实服务器地址,再转发请求,并将响应从实服务器转发回...

    阿里云 专有云Enterprise版 V3.5.0 负载均衡SLB 技术白皮书 - 20180710.pdf

    - 日志管理:提供访问日志记录,便于分析和调试。 4. **使用注意事项**: - 用户在阅读和使用白皮书时,应遵守法律声明中的条款,如保密、非授权传播等规定。 - 文档可能随产品升级而更新,用户需关注最新版本以...

    藏经阁-基于混合云架构的高可用实践.pdf

    Log 是指记录系统或应用程序的日志记录,用于记录系统或应用程序的运行状态和错误信息。监控是指对系统或应用程序的实时监控,用于检测系统或应用程序的运行状态和 performance。 知识点八:App 和 Cache-Control ...

Global site tag (gtag.js) - Google Analytics