访问日志

更新时间:
复制 MD 格式

在使用CLB的七层负载均衡时,如果您需要进行业务开发测试、故障处理或用户行为数据分析,您可使用CLB访问日志功能。CLB访问日志功能结合阿里云日志服务,可帮助您大幅提升日志数据分析、故障定位处理的效率。

功能简介

什么是CLB访问日志

CLB访问日志功能收集所有发送到CLB的请求详细信息,包括请求时间、客户端IP地址、延迟、请求路径和服务器响应等。作为公网访问入口,CLB承载海量访问请求。您可以通过访问日志分析用户行为、了解地域分布、进行问题排查等。

在开启CLB访问日志后,您可以将访问日志存储在日志服务(SLS)的日志库(Logstore)中,采集分析访问日志。您可以随时删除访问日志的配置。

CLB访问日志功能无需额外付费,您仅需支付日志服务的费用。计费可参考日志服务计费概述

使用限制

  • CLB的七层负载均衡(HTTP/HTTPS监听)支持访问日志功能。

  • 四层监听(TCP/UDP)不支持开启访问日志,用户需在后端服务器上自行配置日志采集(例如 Nginx 访问日志、应用层日志框架等)。

  • 确保 HTTP header 的值不包含 ||,否则可能导致日志分割错位。

前提条件

设置访问日志

  1. 登录传统型负载均衡CLB控制台
  2. 在左侧导航栏,选择日志管理 > 访问日志

  3. 在顶部菜单栏,选择CLB实例所属地域。

  4. 如果您是首次使用该功能,需要进行账号授权。单击立即授权,在弹出的云资源访问授权页面单击同意授权

    说明

    该操作只有在首次配置时需要执行。

    如果您使用的是RAM用户,需要阿里云账号进行授权。具体操作,请参见授权RAM用户(子账号)使用CLB访问日志

  5. 访问日志(7层)页面,找到目标CLB实例,在操作列单击设置

  6. 日志设置面板,设置项目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

    负载均衡收到的请求报文中HTTPreferer header的内容。

    http_user_agent

    负载均衡收到的请求报文中http_user_agent header的内容。

    http_x_forwarded_for

    负载均衡收到的请求报文中x-forwarded-for header的内容。

    http_x_real_ip

    负载均衡收到的请求报文中HTTPx-real-ip的内容。

    read_request_time

    负载均衡读取请求的时间,单位:毫秒。

    request_length

    请求报文的长度,包括startline、http headerhttp body。

    request_method

    请求报文的方法。

    request_time

    负载均衡收到第一个请求报文的时间到SLB返回应答之间的间隔时间,单位:秒。

    request_uri

    负载均衡收到的请求报文的URI。

    scheme

    请求的scheme,包括http、https。

    server_protocol

    负载均衡收到的HTTP协议的版本,例如HTTP/1.0HTTP/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 控制台中已配置的转发策略进行对比推断。基于此,您还可以进一步验证转发策略是否生效:

  • 识别未被命中的转发策略:组合使用 slbidrequest_uri 和时间范围查询某条转发策略在指定时段内的命中次数。将 <转发策略路径> 替换为该转发策略配置的路径(如 /api),末尾的 * 用于匹配以该路径开头的所有请求。若结果为 0,说明该策略在该时段内未命中任何请求,可结合实际业务判断是否需要清理。

    slbid: <负载均衡实例ID> and request_uri: "<转发策略路径>*" | select count(*) as hit_count
  • 核对转发是否符合预期:将日志中的 upstream_addr(实际转发到的后端服务器 IP:端口)与 CLB 控制台中对应监听的虚拟服务器组成员列表进行比对,确认请求是否按预期转发至指定后端服务器。

TLS 策略拦截记录

被 TLS 安全策略拦截的连接(例如握手阶段因 TLS 版本不满足要求被拒绝的请求)因未完成 TLS 握手,不会生成访问日志记录。访问日志仅记录成功完成 TLS 握手并建立 HTTP/HTTPS 请求的七层请求。

查询访问日志

访问日志配置完成后,您可以通过日志服务控制台查询日志。

  1. 登录传统型负载均衡CLB控制台
  2. 在左侧导航栏,选择日志管理 > 访问日志

  3. 在顶部菜单栏,选择CLB实例所属地域。

  4. 访问日志(7层)页面,在目标实例操作列单击查看日志,跳转到日志服务页面。

  5. 日志服务配置完成后,如有客户端访问过CLB实例可查看到对应的日志信息。

    说明
    • 日志实时更新:访问日志在写入 SLS 后实时更新,字段索引汇总信息无固定刷新周期。如果切换了查询时间范围后未显示最新数据,请手动单击查询按钮或刷新页面以获取最新结果。

    • 同一时间戳多条记录:若查询结果中同一时间戳出现多条日志记录,属于客户端在该秒内发起了多个并发请求的正常记录,并非系统异常。如判断为非正常的高频访问,建议结合访问控制功能限制来源 IP。

  6. 输入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 值与实际配置的监听端口完全一致(如 80443),字段名区分大小写。

  • 先去除 status 条件查询全量日志,验证该实例在当前时间范围内是否有流量记录。

通过 SLS SDK/API 编程查询

CLB 访问日志数据存储在日志服务(SLS)的 Logstore 中,除控制台外,您也可以通过 SLS 的 SDK 或 API 以编程方式查询日志数据,无需登录控制台。具体操作及代码示例,请参见快速入门:接入日志服务SDK上报日志并分析

说明

CLB 侧 API(如 DescribeAccessLogsDownloadAttribute)仅用于管理日志下载配置,不支持查询日志数据。

分析访问日志

您可以通过日志服务的仪表盘分析访问日志,仪表盘提供更丰富的数据信息。

  1. 在上述日志服务页面,在左侧导航栏选择image.png,然后单击仪表盘列表

  2. 单击CLB对应访问日志的名称slb_layer7_access_center_cn,查看分析报表。

基于 SQL 的业务统计分析

除仪表盘外,您还可以针对以下常见业务场景编写 SQL 语句进行统计分析。

统计特定端口的累计请求数

统计某实例某监听端口在指定时间范围内的总请求数:

slbid: <负载均衡实例ID> and slb_vport: <监听端口> | select count(*) as total_requests

查看各域名的流量占比

结合 http_hostrequest_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(例如curlpython-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的后续访问。具体操作步骤如下:

  1. CLB控制台左侧导航栏,选择访问控制

  2. 创建访问控制策略组,将从日志中识别出的异常来源IP添加到策略组中。

  3. CLB实例的监听配置中,将该策略组绑定为黑名单。绑定后,来自黑名单中IP的请求将被CLB直接拒绝,不再转发到后端服务器。

关闭访问日志

您可以通过关闭访问日志,不再收集CLB的访问日志。

说明

CLB实例关闭日志记录后,对应的日志ProjectLogstore不会被删除,该实例的历史日志信息也不会立即删除,您仍可以在SLS中管理历史日志。

  1. 登录传统型负载均衡CLB控制台
  2. 在左侧导航栏,选择日志管理 > 访问日志

  3. 在顶部菜单栏,选择CLB实例所属地域。

  4. 访问日志(7层)页面,找到目标实例,然后在目标实例操作列单击关闭日志记录

  5. 在弹出的对话框中,单击确定,关闭该实例的访问日志。

常见问题

如何通过访问日志排查请求延迟、超时或连接异常?

延迟归因

访问日志提供了两个与时延相关的字段,结合使用可定位延迟瓶颈:

  • request_time:CLB 收到第一个请求报文到向客户端返回完整响应的总耗时(单位:秒)。

  • upstream_response_time:CLB 与后端服务器建立连接、发送请求、接收完整后端响应的耗时(单位:秒)。

两者差值(request_time - upstream_response_time)包含 CLB 自身处理、CLB 与客户端之间的网络往返,以及客户端读取响应的耗时等多项。可结合两者的占比判断瓶颈:

  • upstream_response_timerequest_time 中占比较高:延迟主要源于后端服务器响应慢,建议排查后端应用、数据库等性能。

  • upstream_response_time 占比较低(即差值较大):后端响应较快,瓶颈更可能在客户端与 CLB 之间的网络传输,或客户端慢速读取较大响应体。可结合 client_ipbody_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 的应用及防火墙日志)做全链路排查。

相关文档