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语法把上图的计算方法翻译如下:

select (casewhen http_x_real_ip = '-' then (casewhen http_x_forwarded_for = '-' then client_ipwhen split_part(http_x_forwarded_for, ',', 1)  = '-' then client_ipelse split_part(http_x_forwarded_for, ',', 1) end)else http_x_real_ipend) as real_client_ip

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秒多,也许正是因为长时间的等待导致用户停止了下载任务。

原文链接

本文为云栖社区原创内容,未经允许不得转载。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/521503.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android选择多个文件_一分钟合并多个Excel、PDF文件,3种方法任你选择,好用到没朋友...

一分钟合并多个Excel、PDF文件,3种方法任你选择,好用到没朋友前情提要:Excel、PDF多个文件怎样合并成一个文件?需求场景:PDF文件合并当一份完成的PDF资料分为很多份的时候,我们怎样将他们合并起来呢&#x…

Spring 常犯的十大错误,打死都不要犯!

戳蓝字“CSDN云计算”关注我们哦! 作者 | Toni Kukurin责编 | 刘丹错误一:太过关注底层我们正在解决这个常见错误,是因为 “非我所创” 综合症在软件开发领域很是常见。症状包括经常重写一些常见的代码,很多开发人员都有这种症状…

confluence启动不起来_汽车“一键启动”只用来点火?太浪费!你不知道的还有这3个功能...

说到“一键启动”,相信大多车主都不陌生。在早些年,这个配置只有B级以上的车才会有,而现在普遍都具备了。那这个“一键启动”到底有什么作用呢?只能用来点火和无钥匙启动?不,还有这几点,我们一起…

数据可视化揭晓NBA球星顶薪背后的真相

戳蓝字“CSDN云计算”关注我们哦!作者 | pk哥责编 | 刘丹7月1日凌晨6点,2019年NBA自由市场正式拉开大幕。之后的故事,我们都知道了,很多球员都签了顶薪合同,在我们看来,这是一堆的天文数字。美媒统计了一个…

RabbitMQ的5种队列_简单队列_入门试炼_第4篇

Statement 文章目录一、队列总览1.1. 图示1.2. 说明二、简单队列2.1. 图示2.2. 导入RabbitMQ的客户端依赖2.3. 获取MQ的连接2.4. 生产者发送消息到队列2.5. 管理工具中查看消息2.6. 消费者从队列中获取消息一、队列总览 1.1. 图示 1.2. 说明 说明模式①简单队列②work模式 多…

阿里云操作审计 - 日志安全分析(一)

摘要: 阿里云操作审计ActionTrail审计日志已经与日志服务打通,提供准实时的审计分析、开箱机用的报表功能。本文介绍背景、配置和功能概览。背景安全形式与日志审计伴随着越来越多的企业采用信息化、云计算技术来提高效率与服务质量。针对企业组织的网络…

spark中local模式与cluster模式使用场景_不可不知的Spark调优点

不可不知的Spark调优点​mp.weixin.qq.com在利用Spark处理数据时,如果数据量不大,那么Spark的默认配置基本就能满足实际的业务场景。但是当数据量大的时候,就需要做一定的参数配置调整和优化,以保证业务的安全、稳定的运行。并且在…

命令逐行显示_Linux命令和Shell脚本学习随笔3

一、处理目录创建目录:mkdir Test创建多级目录: mkdir -p Test1/testsub删除目录:rmdir 该命令只允许删除空目录,删除非空命令提示:Directory not empty,如果文件夹下有文件可以配合命令rm进行删除二、查看文件内容命令…

【图解分布式架构】看不懂直接面壁

戳蓝字“CSDN云计算”关注我们哦!作者 | 佚名责编 | 阿秃初始阶段架构初始阶段的小型系统、应用程序、数据库、文件等所有的资源都在一台服务器上。通俗称为LAMP。特征:应用程序、数据库、文件等所有的资源都在一台服务器上。描述:通常服务器…

RabbitMQ的5种队列_Work模式_入门试炼_第5篇

文章目录一、work模式1.1. 图示1.2. 消费者11.3. 消费者21.4. 生产者1.5. 测试二、Work模式的“能者多劳”2.1. 关键配置2.2. 测试:一、work模式 1.1. 图示 一个生产者、2个消费者。 一个消息只能被一个消费者获取。 1.2. 消费者1 package com.gblfy.rabbitmq.w…

阿里云云数据库RDS秒级监控功能解锁,通宵加班找故障将成为过去式

摘要: 每一个奋斗在前线的数据库管理员和运维人员似乎运气都不太好,这些人都绝对经历过的诡异事件就是:逢年过节必出故障,明明眼看着要休假了,又接到故障通知,只好通宵加班找问题。没问题的时候可能大家都不…

阿里云DDoS高防 - 访问与攻击日志实时分析(三)

摘要: 本文介绍了DDoS日志分析功能的日志报表的使用方法。概述本文介绍DDoS日志分析功能的日志报表的使用方法。前提配置刚进入DDoS高防控制台的全量日志下,在界面引导下开通日志服务并授权操作后。就可以给特定的网站启用日志分析功能了。报表界面介绍在…

vue获取输入框得内容_React入坑(四):获取输入框内的内容

方法一:通过event对象信息获取import React from react;class Show extends React.Component {//state 相当于是Vue里面的data state {text: "",//默认初始值 }; hanChange ev > {//onChange 为Change事件,ev是传递的参数 …

学计算机的用surface,11个高效利用Surface处理工作学习任务的方法 - Surface 使用教程...

在 Surface 上捕获屏幕截图同时按下“电源”按钮 “调高音量”按钮来捕获全屏幕的截图,然后即可将其粘贴到文档、电子邮件或应用中。 屏幕截图同时也会保存在“屏幕截图”文件夹中。在网页上做笔记在 Microsoft Edge 中,选择“设置及更多” >“更多工…

RabbitMQ的5种队列_消息确认模式_入门试炼_第6篇

消费者从队列中获取消息,服务端如何知道消息已经被消费呢? 模式1:自动确认 只要消息从队列中获取,无论消费者获取到消息后是否成功消息,都认为是消息已经成功消费。 模式2:手动确认 消费者从队列中获取消息…

5分钟了解什么是真正的深度学习

人工智能(AI)和机器学习(ML)在当下的火热程度我就不多说了,但是真正懂这方面的人又有多少呢?本文将带你了解人工智能和机器学习的基本知识。同时,你也会了解到机器学习中最火的方法——深度学习…

柱状图中xy轴怎么出现_如果制砂机设备在工作中出现堵料现象该怎么办?

制砂机设备作为砂石生产线中常用的设备,在整条生产线中起着举足轻重的作用,为我国的基础建设的发展提供了巨大的贡献。但是不管技术工艺如何不断的改革完善,在制砂机设备工作中还是会出现堵料的现象。当出现这种情况我们应该怎么办呢?下面我…

阿里云DDoS高防 - 访问与攻击日志实时分析(四)

摘要: 本文介绍了DDoS日志实时分析功能的费用计量细节与案例。概述本文介绍了DDoS日志的费用计量细节与案例。费用概述DDoS日志分析与报表功能依赖日志服务提供日志数据的实时查询与分析功能。当您开通DDoS访问与攻击日志实时分析功能时, 需要您根据界面提示开通日志…

c++检测输入是否为数字_Go64 for Mac(检测应用是否为64位)

“一种快速的方法来全面了解您的64位应用程序兼容性,并在安装macOS Catalina之前避免意外。”Go64 可以帮你检测出你的应用是否 64 位,以及软件版本号,开发商以及官网,甚至可以为你计算出软件升级所需要花费的金额。应用介绍从 ma…