如果您需要通过访问日志分析用户行为,了解用户的地域分布及排查问题等,您可以通过ALB联合日志服务(SLS)推出的访问日志功能来实现。
ALB 访问日志适用于请求审计、故障排查及性能分析场景,可提供类似传统 Nginx 等 Web 网关的访问日志记录能力。通过访问日志,可以查询 HTTP 请求头、状态码及延迟分布等信息,用于排查请求报错 URL、接口延迟高、监控数据与业务量不符等问题。访问日志仅记录成功建立的 HTTP/HTTPS 请求,不记录 TCP 建联失败、端口扫描及 TLS 握手失败等情况。
费用说明
ALB将日志投递到日志服务后,日志服务根据存储空间、读取流量、请求数量、数据加工、数据投递等进行计费,更多信息,请参见日志服务计费。
前提条件
使用访问日志功能前,请确保您已开通日志服务。具体操作,请参见开通日志服务。
创建访问日志
- 登录应用型负载均衡ALB控制台。
在顶部菜单栏,选择ALB实例所属的地域。
在实例页面,单击目标实例ID。
在实例详情页,单击访问日志页签,在访问日志页签单击创建访问日志。
在创建访问日志对话框,配置项目Project和日志库Logstore,然后单击确定。
配置
说明
项目Project
日志服务中的资源管理单元,用于资源隔离和控制。
选择现有 Project:在下拉框中选择一个Project。
新建 Project:在文本框中输入新建Project名称。
日志库Logstore
日志服务中日志数据的采集、存储和查询单元。
选择现有 Logstore:在下拉框中选择一个Logstore。
新建 Logstore:在文本框中输入新建Logstore名称。Project选择新建时,Logstore也需选择新建。
服务关联角色创建须知
执行此操作时,系统将会为您自动创建一个服务关联角色,以完成相应功能。
在弹出的对话框中,确认提示信息,然后单击确定。
选择新建日志库Logstore时,配置完成后,日志服务默认为该Logstore创建索引及开启仪表盘。
选择现有日志库Logstore时,配置完成后,日志服务会自动开启仪表盘。如果该Logstore已设置索引,配置不会被覆盖,如需新的索引,请至日志服务控制台调整。
查看访问日志
在访问日志页签,单击SLS日志存储右侧的链接,前往日志服务查看原始日志等信息。
在访问日志页签,您可以分别单击监控中心、访问中心或秒级监控页签,输入筛选条件,查询相关指标信息。
模块分类
指标说明
监控中心
展示ALB实例的实时监控数据,包括访问PV、请求成功率、平均延迟、4xx请求数、Status分布、流量、P50延迟、P90延迟、P99延迟、P9999延迟、TOP请求Host、TOP延迟Host、TOP失败率Host、TOP请求URL、TOP延迟URL、TOP失败率URL、TOP请求后端、TOP延迟后端、TOP失败率后端等指标。
访问中心
展示ALB实例的访问状态数据,包括PV对比昨日、PV对比上周、UV对比昨日、UV对比上周、PV分布、UV分布、今日访问PV、7天访问PV、TOP10访问省份、移动端占比、TOP10访问Host、TOP10访问UserAgent、TOP访问IP等指标。
秒级监控
以秒级粒度展示监控信息,便于发现瞬时抖动的异常情况,包括QPS、访问延迟、Upstream延迟、成功率、请求流量、返回Body流量、2xx状态码、3xx状态码、错误状态码、Upstream2xx状态码、Upstream3xx状态码、Upstream错误状态码等指标。
在监控中心、访问中心或秒级监控页签右上角,您可以单击更多报表前往CloudLens for ALB页面,查看更多ALB数据报表信息。更多信息,请参见查看数据报表。
在监控中心、访问中心或秒级监控页签右上角,您可以单击报警设置前往CloudLens for ALB页面,查看ALB实例告警事务。
关于监控中心、访问中心或秒级监控页签右上角的更多功能介绍:
:开启SQL增强。更多信息,请参见高性能完全精确查询与分析(SQL独享版)。日志服务采集到访问日志后,您可以执行查询分析、下载、投递、加工日志、创建告警等操作。具体操作,请参见云产品日志通用操作。
记录自定义header
除常用的header外,slb_headers用来记录请求中其余header的header name和header value,以便完整地记录请求和更好地分析日志。
访问日志的自定义header长度默认支持1 KB,最大可以提升到4KB,如需提升请联系您的客户经理申请。更多信息,请参见ALB转发请求的长度限制是多少?是否支持调整?。
扩展版暂不支持记录自定义header。
在访问日志页签,在基本信息区域单击记录自定义header设置。
在日志中记录自定义HTTP头设置对话框,在下拉框中选择该ALB实例已添加的监听。
在弹出的对话框中,确认提示信息,单击确定。
设置完成后,日志中的slb_headers字段会记录请求中除以下header之外的header_name和header_value:
#自定义header不会记录以下字段信息 host referer user-agent x-forwarded-for x-readtime x-real-ip uber-trace-id X-B3-TraceId X-B3-SpanId X-B3-ParentSpanId X-B3-Sampled
删除日志
在访问日志页签,在基本信息区域单击关闭日志记录。
在弹出的对话框中,确认提示信息,然后单击确定。
日志字段说明
字段 | 说明 |
app_lb_id | 负载均衡实例ID。 |
__topic__ | 日志主题,固定为alb_layer7_access_log。 |
body_bytes_sent | 发送给客户端的HTTP Body的字节数。 |
client_ip | 请求客户端IP地址。当未开启“查找真实客户端源IP”功能时,该字段为负载均衡的上一跳IP地址;开启后,该字段为真实客户端源IP地址。 |
host | 域名或IP地址。优先从请求参数中获取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 | 负载均衡收到的请求报文中HTTP的x-forwarded-for的内容。 |
http_x_real_ip | 负载均衡收到的请求报文中HTTP的x-real-ip的内容。 |
read_request_time | 负载均衡读取请求的时间,单位:毫秒。 |
request_length | 请求报文的长度,包括startline、HTTP头报文和HTTP body。单位:Byte。 |
request_method | 请求报文的方法。 |
request_time | 负载均衡收到第一个请求报文的时间到返回应答之间的时间间隔,单位:秒。 |
request_uri | 负载均衡收到的请求报文的URI。 |
scheme | 请求的scheme:HTTP或HTTPS。 |
server_protocol | 负载均衡收到的HTTP协议的版本,例如HTTP/1.0或HTTP/1.1。 |
slb_vport | 负载均衡的监听端口。 |
slb_xtrace | 负载均衡链路追踪的调用链TraceId。 |
xtrace_type | 负载均衡链路追踪Xtrace数据的类型,目前仅支持Zipkin。 |
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 | 负载均衡写的响应时间,单位:毫秒。 |
client_port | 请求客户端端口。 |
slb_headers | 自定义headers,需打开对应功能才能使用,用于存放请求的自定义header。 |
查询示例
在日志服务控制台进入 ALB 对应的 Logstore 后,可通过以下方式筛选日志:
按时间筛选:在页面顶部的时间选择器中选择时间段,支持最近 15 分钟、最近 1 小时、今天等预设范围,或自定义时间范围。
按 URL 筛选:在查询输入框中输入
request_uri:/api/xxx,仅显示请求 URI 包含/api/xxx的日志记录。按状态码筛选:输入
status:200查询指定状态码的请求,或输入status:5*匹配所有 5xx 错误响应。按请求方法筛选:输入
request_method:Get*筛选 GET 请求。多条件组合:使用
and连接多个条件,例如request_uri:/api/xxx and status:200,筛选特定 URL 且状态码为 200 的请求。
使用 field:value 语法查询指定字段前,需在日志服务控制台为该字段创建字段级索引。全文索引不支持字段级查询,未配置字段级索引时查询将返回错误提示。如需按 request_uri 关键词直接搜索,请先在日志服务控制台为该字段创建索引。
常见问题
是否可以查看创建访问日志前的访问日志数据?
不支持。
仅支持查看创建访问日志之后所采集到的日志数据。在创建访问日志之前,日志服务不会主动采集ALB访问数据,因此无法查看创建前的日志数据。
为什么 ALB 监控显示有异常(如 4XX 报错、高并发)或遭受扫描,但访问日志中没有记录?
访问日志中未出现对应记录,可能由以下原因导致:
1. 未开通访问日志
必须先开通 ALB 访问日志功能,日志服务才能采集 ALB 的请求数据。若未开通,仅凭监控指标难以定位具体的报错 URL、请求来源及数据准确性。建议参考本文"创建访问日志"章节完成开通。
2. TCP 建联失败或端口扫描
ALB 作为七层负载均衡,访问日志仅记录成功建立 HTTP/HTTPS 连接后的请求,不记录 TCP 建联失败的情况。端口扫描或 TCP 层面的异常连接不会出现在访问日志中。若需获取异常 IP 并进行封禁,建议开启云防火墙,查看与 ALB 公网 IP 建联失败的记录。
3. 四层监听超时
四层 TCP 监听的超时事件通常不会记录在 Ingress 日志或访问日志中。仅当 TCP 连接建立成功、但后续请求响应超时时,才可能在访问日志中产生 499 或 504 状态码记录。
4. TLS 握手失败
TLS 握手阶段发生的错误(如证书不匹配、协议版本不兼容)通常无法通过访问日志直接体现,因为握手失败意味着 HTTP 请求尚未建立。此类问题需要结合后端服务器日志及客户端抓包进行分析。
如何通过 ALB 访问日志排查具体的报错 URL、延迟高或请求记录?
登录日志服务控制台,进入 ALB 对应的 Logstore,可按照以下场景进行查询:
1. 查询特定状态码(如 400/4XX)对应的 URL
在查询框中输入 status:400(或其他状态码,如 status:5*),在结果中查看 request_uri 字段,即可定位具体出错的请求路径。
2. 排查接口延迟高
筛选 upstream_response_time 字段,该字段记录从 ALB 向后端服务器建立连接到接收完数据的时间(单位:秒)。若数值较大,说明延迟主要消耗在后端业务处理,而非 ALB 转发层面。同时可对比 request_time 字段确认整体耗时(从收到客户端请求到返回应答之间的时间间隔,单位:秒)。
3. 核实特定路径或源 IP 的请求记录
request_uri 等路径字段在 SLS Logstore 中默认为非索引字段,无法直接通过路径关键词进行搜索。建议结合已索引的 client_ip(请求客户端 IP)或 http_host(请求 Host)等字段进行组合查询,以确认 ALB 是否收到了来自指定来源的请求。如需直接搜索 request_uri,需先在 SLS 控制台为该字段创建索引。
4. 验证日志数据准确性
ALB 访问日志记录的是客户端通过 ALB 访问后端服务的所有 HTTP/HTTPS 请求流量。可参考本文"日志字段说明"章节,核对各字段的数据定义和含义,确认日志内容是否与预期业务流量一致。