在使用CLB的七层负载均衡时,如果您需要进行业务开发测试、故障处理或用户行为数据分析,您可使用CLB访问日志功能。CLB访问日志功能结合阿里云日志服务,可帮助您大幅提升日志数据分析、故障定位处理的效率。
功能简介
什么是CLB访问日志
CLB访问日志功能收集所有发送到CLB的请求详细信息,包括请求时间、客户端IP地址、延迟、请求路径和服务器响应等。作为公网访问入口,CLB承载海量访问请求。您可以通过访问日志分析用户行为、了解地域分布、进行问题排查等。
在开启CLB访问日志后,您可以将访问日志存储在日志服务(SLS)的日志库(Logstore)中,采集分析访问日志。您可以随时删除访问日志的配置。
CLB访问日志功能无需额外付费,您仅需支付日志服务的费用。计费可参考日志服务计费概述。
使用限制
-
仅CLB的七层负载均衡(HTTP/HTTPS监听)支持访问日志功能。
-
四层监听(TCP/UDP)不支持开启访问日志,用户需在后端服务器上自行配置日志采集(例如 Nginx 访问日志、应用层日志框架等)。
-
确保 HTTP header 的值不包含
||,否则可能导致日志分割错位。
前提条件
设置访问日志
- 登录传统型负载均衡CLB控制台。
-
在左侧导航栏,选择。
-
在顶部菜单栏,选择CLB实例所属地域。
-
如果您是首次使用该功能,需要进行账号授权。单击立即授权,在弹出的云资源访问授权页面单击同意授权。
说明该操作只有在首次配置时需要执行。
如果您使用的是RAM用户,需要阿里云账号进行授权。具体操作,请参见授权RAM用户(子账号)使用CLB访问日志。
-
在访问日志(7层)页面,找到目标CLB实例,在操作列单击设置。
-
在日志设置面板,设置项目Project和日志库Logstore,然后单击确定。
-
项目Project:项目(Project)是日志服务的资源管理单元,用于资源隔离和控制。建议使用不同的Project管理不同的应用、产品或项目中的数据。
-
日志库Logstore:日志库(Logstore)是日志服务中日志数据的采集、存储和查询单元。建议同个应用中不同类型的日志创建独立的Logstore。
-
选择现有 Logstore:该功能会默认开启选中的Logstore的分析仪表盘,如果该Logstore已配置索引,配置会被覆盖。
-
说明-
确保Project的名称全局唯一,且Project的地域和负载均衡实例的地域相同。
-
配置完成后,SLS 侧的 Project 和 Logstore 可能需要数分钟才会在 SLS 控制台显示,此期间日志数据不会丢失。若暂时未显示,请稍后刷新页面。
配置负载均衡访问日志后,您可以在日志服务中查询、检索以下字段的日志信息。
字段
说明
body_bytes_sent
发送给客户端的http body的字节数。
client_ip
请求客户端IP地址。
client_port
请求客户端端口。
host
优先从请求参数中获取host,如果获取不到则从host header取值,如果还是获取不到则以处理请求的后端服务器IP地址作为host。
http_host
请求报文host header的内容。
http_referer
负载均衡收到的请求报文中HTTP的referer header的内容。
http_user_agent
负载均衡收到的请求报文中http_user_agent header的内容。
http_x_forwarded_for
负载均衡收到的请求报文中x-forwarded-for header的内容。
http_x_real_ip
负载均衡收到的请求报文中HTTP的x-real-ip的内容。
read_request_time
负载均衡读取请求的时间,单位:毫秒。
request_length
请求报文的长度,包括startline、http header和http body。
request_method
请求报文的方法。
request_time
负载均衡收到第一个请求报文的时间到SLB返回应答之间的间隔时间,单位:秒。
request_uri
负载均衡收到的请求报文的URI。
scheme
请求的scheme,包括http、https。
server_protocol
负载均衡收到的HTTP协议的版本,例如HTTP/1.0或HTTP/1.1。
slb_vport
负载均衡的监听端口。
slbid
负载均衡实例ID。
ssl_cipher
建立SSL连接使用的密码,例如ECDHE-RSA-AES128-GCM-SHA256等。
ssl_protocol
建立SSL连接使用的协议,例如TLSv1.2。
status
负载均衡应答报文的状态。
tcpinfo_rtt
客户端TCP连接时间,单位:微秒。
time
日志记录时间。
upstream_addr
后端服务器的IP地址和端口。
upstream_response_time
从与后端建立连接开始到接受完数据然后关闭连接为止的时间,单位:秒。
upstream_status
负载均衡收到的后端服务器的响应状态码。
vip_addr
虚拟IP地址。
write_response_time
负载均衡写的响应时间,单位:毫秒。
-
使用说明与注意事项
在 SLS 访问日志中分析请求来源时,两个字段的含义不同:
-
client_ip:CLB 在网络层观测到的、与 CLB 建立连接的源 IP。无前置代理时即为客户端真实 IP;若客户端前面还有代理,则为最近一跳代理的出口 IP。 -
http_x_forwarded_for:CLB 收到的客户端入站请求中携带的X-Forwarded-For头原始内容,由客户端或上游代理写入,可能被伪造,仅作参考。
在访问日志中统计访问来源时,建议以 client_ip 为准。
如果您需要在后端服务器上获取客户端真实 IP(而非在访问日志中分析),CLB 七层监听默认通过 X-Forwarded-For 头透传真实 IP,具体操作请参见后端服务器通过CLB七层监听获取客户端真实IP。
虚拟服务器组与转发策略识别
访问日志不包含服务器组 ID 或转发策略 ID 字段。如需判断某条请求命中了哪条转发策略,需结合日志中的 request_uri(请求路径)和 host(域名)字段,与 CLB 控制台中已配置的转发策略进行对比推断。基于此,您还可以进一步验证转发策略是否生效:
-
识别未被命中的转发策略:组合使用
slbid、request_uri和时间范围查询某条转发策略在指定时段内的命中次数。将<转发策略路径>替换为该转发策略配置的路径(如/api),末尾的*用于匹配以该路径开头的所有请求。若结果为0,说明该策略在该时段内未命中任何请求,可结合实际业务判断是否需要清理。slbid: <负载均衡实例ID> and request_uri: "<转发策略路径>*" | select count(*) as hit_count -
核对转发是否符合预期:将日志中的
upstream_addr(实际转发到的后端服务器 IP:端口)与 CLB 控制台中对应监听的虚拟服务器组成员列表进行比对,确认请求是否按预期转发至指定后端服务器。
TLS 策略拦截记录
被 TLS 安全策略拦截的连接(例如握手阶段因 TLS 版本不满足要求被拒绝的请求)因未完成 TLS 握手,不会生成访问日志记录。访问日志仅记录成功完成 TLS 握手并建立 HTTP/HTTPS 请求的七层请求。
查询访问日志
访问日志配置完成后,您可以通过日志服务控制台查询日志。
- 登录传统型负载均衡CLB控制台。
-
在左侧导航栏,选择。
-
在顶部菜单栏,选择CLB实例所属地域。
-
在访问日志(7层)页面,在目标实例操作列单击查看日志,跳转到日志服务页面。
-
日志服务配置完成后,如有客户端访问过CLB实例可查看到对应的日志信息。
说明-
日志实时更新:访问日志在写入 SLS 后实时更新,字段索引汇总信息无固定刷新周期。如果切换了查询时间范围后未显示最新数据,请手动单击查询按钮或刷新页面以获取最新结果。
-
同一时间戳多条记录:若查询结果中同一时间戳出现多条日志记录,属于客户端在该秒内发起了多个并发请求的正常记录,并非系统异常。如判断为非正常的高频访问,建议结合访问控制功能限制来源 IP。
-
-
输入SQL语句查询特定的访问日志。
例如,输入如下SQL语句查询Top20的客户端,用于分析请求访问来源,辅助商业决策。
* | select http_user_agent, count(*) as pv group by http_user_agent order by pv desc limit 20例如,输入如下SQL语句按来源IP和响应状态码筛选日志,用于查询特定IP段的访问请求。
* | select * where client_ip like '172.17.%' and status=200
多实例共用 Logstore 时的精确查询
如果多个 CLB 实例将访问日志写入同一个 SLS Logstore,查询时必须同时指定 slbid(负载均衡实例 ID)和 slb_vport(监听端口)进行精确过滤。仅按域名或端口筛选时,可能因混入其他实例的日志而导致结果遗漏或不准确。
例如,查询指定实例和监听端口的 5xx 状态码请求:
<负载均衡实例ID> and slb_vport: <监听端口> and status >= 500
将 <负载均衡实例ID> 替换为实际 CLB 实例 ID(如 lb-bp1abc123),<监听端口> 替换为对应监听端口号(如 443)。
查询无结果时的排查建议:
-
确认
slbid为 CLB 实例 ID,可在 CLB 控制台实例列表中查看,注意与监听器 ID 区分。 -
确认
slb_vport值与实际配置的监听端口完全一致(如80、443),字段名区分大小写。 -
先去除
status条件查询全量日志,验证该实例在当前时间范围内是否有流量记录。
通过 SLS SDK/API 编程查询
CLB 访问日志数据存储在日志服务(SLS)的 Logstore 中,除控制台外,您也可以通过 SLS 的 SDK 或 API 以编程方式查询日志数据,无需登录控制台。具体操作及代码示例,请参见快速入门:接入日志服务SDK上报日志并分析。
CLB 侧 API(如 DescribeAccessLogsDownloadAttribute)仅用于管理日志下载配置,不支持查询日志数据。
分析访问日志
您可以通过日志服务的仪表盘分析访问日志,仪表盘提供更丰富的数据信息。
-
在上述日志服务页面,在左侧导航栏选择
,然后单击仪表盘列表。 -
单击CLB对应访问日志的名称slb_layer7_access_center_cn,查看分析报表。
基于 SQL 的业务统计分析
除仪表盘外,您还可以针对以下常见业务场景编写 SQL 语句进行统计分析。
统计特定端口的累计请求数
统计某实例某监听端口在指定时间范围内的总请求数:
slbid: <负载均衡实例ID> and slb_vport: <监听端口> | select count(*) as total_requests
查看各域名的流量占比
结合 http_host 和 request_length 字段,统计各域名接收的请求字节量及其在总流量中的占比:
* | select http_host, sum(request_length) as total_bytes, round(sum(request_length) * 100.0 / sum(sum(request_length)) over (), 2) as pct group by http_host order by total_bytes desc limit 20
查询后端 ECS 的请求量与流量分布
通过 upstream_addr 字段识别各后端服务器(IP:端口)接收的请求数量,并结合 request_length 估算后端 ECS 流量分布,用于评估负载是否均衡:
* | select upstream_addr, count(*) as req_count, sum(request_length) as total_bytes group by upstream_addr order by req_count desc limit 20
通过访问日志识别异常外部请求
CLB访问日志会记录所有经过负载均衡实例的外部请求。当您在日志中发现不明来源的请求时,可以通过以下关键字段判断请求是否为异常外部访问,并采取相应的防护措施。
识别异常请求的关键字段
您可以结合以下日志字段综合判断请求是否来自异常外部客户端:
-
client_ip:请求客户端的IP地址。如果该IP不属于您的业务系统或阿里云内网IP段,则说明该请求来自外部客户端。您可以通过IP归属地查询工具进一步确认来源。 -
request_uri:请求的URI路径。如果出现与您业务无关的路径(例如扫描探测类路径、其他云服务的API路径等),通常表明该请求为异常外部访问。 -
request_method:请求的HTTP方法。如果您的业务仅使用GET请求,但日志中出现大量PUT、DELETE等方法的请求,需要关注是否为异常行为。 -
http_user_agent:请求的User-Agent标识。自动化工具或爬虫通常使用特定的User-Agent(例如curl、python-requests等),与正常浏览器访问不同。
例如,您可以在日志服务中使用以下SQL语句查询来自非预期IP的异常请求:
* | select client_ip, request_method, request_uri, count(*) as cnt group by client_ip, request_method, request_uri order by cnt desc limit 50
限制异常来源IP
确认异常请求的来源IP后,您可以通过CLB的访问控制功能配置黑名单,阻止这些IP的后续访问。具体操作步骤如下:
-
在CLB控制台左侧导航栏,选择访问控制。
-
创建访问控制策略组,将从日志中识别出的异常来源IP添加到策略组中。
-
在CLB实例的监听配置中,将该策略组绑定为黑名单。绑定后,来自黑名单中IP的请求将被CLB直接拒绝,不再转发到后端服务器。
关闭访问日志
您可以通过关闭访问日志,不再收集CLB的访问日志。
CLB实例关闭日志记录后,对应的日志Project和Logstore不会被删除,该实例的历史日志信息也不会立即删除,您仍可以在SLS中管理历史日志。
- 登录传统型负载均衡CLB控制台。
-
在左侧导航栏,选择。
-
在顶部菜单栏,选择CLB实例所属地域。
-
在访问日志(7层)页面,找到目标实例,然后在目标实例操作列单击关闭日志记录。
-
在弹出的对话框中,单击确定,关闭该实例的访问日志。
常见问题
如何通过访问日志排查请求延迟、超时或连接异常?
延迟归因
访问日志提供了两个与时延相关的字段,结合使用可定位延迟瓶颈:
-
request_time:CLB 收到第一个请求报文到向客户端返回完整响应的总耗时(单位:秒)。 -
upstream_response_time:CLB 与后端服务器建立连接、发送请求、接收完整后端响应的耗时(单位:秒)。
两者差值(request_time - upstream_response_time)包含 CLB 自身处理、CLB 与客户端之间的网络往返,以及客户端读取响应的耗时等多项。可结合两者的占比判断瓶颈:
-
upstream_response_time在request_time中占比较高:延迟主要源于后端服务器响应慢,建议排查后端应用、数据库等性能。 -
upstream_response_time占比较低(即差值较大):后端响应较快,瓶颈更可能在客户端与 CLB 之间的网络传输,或客户端慢速读取较大响应体。可结合client_ip、body_bytes_sent等字段进一步定位,而非直接归因于 CLB 处理耗时。
示例:查询总响应时间超过 3 秒的请求,按延迟降序排列,辅助全链路排查:
* | select client_ip, request_uri, request_time, upstream_response_time, upstream_addr where request_time > 3 order by request_time desc limit 50
超时排查
连接超时的请求在 TCP 握手或七层协议建立阶段就已失败,不会产生对应的访问日志记录,因此无法在访问日志中直接查到这类请求。您可以间接排查:在 SLS 控制台按异常时间段查询访问日志,确认是否存在请求量骤降或空白时段,以推断超时发生的时间范围。若需进一步定位,可结合上下游日志(如 CLB 上游的 WAF 日志、后端 ECS 的应用及防火墙日志)做全链路排查。
相关文档
-
日志服务产品详细介绍可参考什么是日志服务。
-
使用CLB的七层负载均衡(HTTP/HTTPS监听)期间,如遇业务故障或异常,怀疑是后端服务器问题,可通过CLB使用访问日志快速定位异常后端服务器。