更新时间:2025-09-11 GMT+08:00
分享

ELB接入访问日志

当您通过ELB的HTTP/HTTPS/QUIC/TLS监听器对外提供业务负载时,如果后端服务器出现突发异常,通过逐一排查后端服务器的日志进行分析,难以快速定位问题根因。

弹性负载均衡ELB支持将七层监听器转发的业务接入云日志服务进行分析,云日志将记录包括请求时间、客户端IP地址、请求路径和服务器响应等信息。如果您遇到后端服务器导致的业务故障或异常,您可以查看访问弹性负载均衡的详细日志记录,分析负载均衡的响应状态码,快速定位出异常的后端服务器。

由于弹性负载均衡会将访问日志等运维数据内容展示到云日志服务控制台,请您在使用过程中,注意您的隐私及敏感信息数据保护。不建议将隐私或敏感数据通过访问日志涉及的的字段传输,必要时请加密保护。

什么是ELB访问日志

弹性负载均衡是接收和分发客户端访问请求的入口,ELB的七层访问日志记录了传输请求的详细信息,通过接入云日志服务,结合云日志服务提供的分析能力,您可以快速地对ELB分发的业务请求进行分析和问题定位。

ELB的访问日志记录了以下几类信息:

  • 时间信息:如msec和time_iso8601等字段记录了请求的时间,用于对请求进行时序分析、故障时间定位。
  • 客户端请求基础信息:如remote_addr:remote_port、request_method scheme://host request_uri server_protocol和http_user_agent等字段记录了请求的基础信息,用于对请求进行用户分析和安全审计。
  • 请求响应与性能指标:如status、bytes_sent和request_time等字段记录了响应状态和处理时间等信息,用于请求状态定位和性能监控。
  • 负载均衡器信息:如lb_name、listener_id、pool_name和eip_address:eip_port等字段记录了处理请求的ELB实例配置,用于识别处理请求的资源配置,提升运维效率。
  • 后端服务器信息:如upstream_status、upstream_connect_time和upstream_addr_priv等字段记录了后端服务器返回请求的信息和后端服务器配置,用于识别后端服务器的健康状态和性能分析。
  • HTTPS相关信息:如ssl_protocol、sni_domain_name和certificate_id等字段记录了HTTPS协议相关信息,用于排查HTTPS请求。
  • 其他辅助信息:access_log_topic_id、log_ver和tenant_id等字段记录了系统和日志标识等信息,用于日志管理。

费用说明

ELB接入云日志后,云日志服务根据日志读写流量、日志存储量、日志转测的流量等计费,云日志服务的详细计费信息请参考云日志服务的计费项

约束与限制

  • 仅采用HTTP/HTTPS/QUIC/TLS监听器的负载均衡实例支持配置访问日志。
  • 客户订阅的访问日志中不包含返回码为400的请求,因为该类请求不符合HTTP规范,无法被正常处理。

准备工作

  • 在ELB中创建HTTP/HTTPS/QUIC/TLS监听器。

配置访问日志

  1. 进入弹性负载均衡列表页面
  2. 在“负载均衡器”界面,单击需要配置访问日志的负载均衡器名称。
  3. 在该负载均衡器界面的“访问日志”页签,单击“配置访问日志”。
    图1 配置访问日志入口
  4. 开启日志记录,选择您在云日志服务中创建的日志组和日志流。

    如果您尚未在云日志服务创建日志组和日志流,可以在ELB服务控制台进行创建。

    图3 启动日志记录
  5. 单击“确定”,配置完成。

查看访问日志

您可以通过以下两种方式查看访问日志的详细信息:

  • “弹性负载均衡”控制台:进入目标ELB实例详情页的访问日志页签,即可查看访问日志。
  • “云日志服务”控制台:在日志组列表,单击查看目标日志组。进入日志组详情页,在相应日志流名称所在行,单击看目标日志流的日志详情。

日志显示格式如下所示,不支持修改日志格式。

$msec $access_log_topic_id [$time_iso8601] $log_ver $remote_addr:$remote_port $status "$request_method $scheme://$host$router_request_uri $server_protocol" $request_length $bytes_sent $body_bytes_sent $request_time "$upstream_status" "$upstream_connect_time" "$upstream_header_time" "$upstream_response_time" "$upstream_addr" "$http_user_agent" "$http_referer" "$http_x_forwarded_for" $lb_name $listener_name $listener_id
$pool_name "$member_name" $tenant_id $eip_address:$eip_port "$upstream_addr_priv" $certificate_id $ssl_protocol $ssl_cipher $sni_domain_name $tcpinfo_rtt $self_defined_header $request_header_length $actions_executed $error_reason "$pool_usr_name"

日志示例如下

1644819836.370 eb11c5a9-93a7-4c48-80fc-03f61f638595 [2024-02-14T14:23:56+08:00] elb_01 192.168.1.1:888 200 "POST https://www.test.com/example/ HTTP/1.1" 1411 251 3 0.011 "200" "0.000" "0.011" "0.011" "192.168.1.2:8080" "okhttp/3.13.1" "-" "-" loadbalancer_295a7eee-9999-46ed-9fad-32a62ff0a687 listener_20679192-8888-4e62-a814-a2f870f62148 3333fd44fe3b42cbaa1dc2c641994d90 pool_89547549-6666-446e-9dbc-e3a551034c46 "-" f2bc165ad9b4483a9b17762da851bbbb 121.64.212.1:443 "10.1.1.2:8080" - TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384 www.test.com 56704 "-" 129 waf - "我的后端服务器组"

日志示例分析

在[2024-02-14T14:23:56+08:00]时,ELB接收到客户端地址和端口(192.168.1.1:888)发起的“POST /HTTP/1.1”请求,ELB将请求转发给后端服务器(100.64.0.129:8080),后端服务器响应状态码200,ELB最终向客户端响应状态码200。

日志示例分析结果:

后端服务器正常响应请求。

详细的日志字段说明如表1

表1 ELB日志字段说明

参数

描述

取值说明

示例

msec

以秒为单位的时间,日志写入时的分辨率为毫秒。

浮点型数据

1644819836.370

access_log_topic_id

访问日志流ID。

uuid

eb11c5a9-93a7-4c48-80fc-03f61f638595

time_iso8601

日志写入时的时间,采用ISO 8601标准格式本地时间。

-

[2024-02-14T14:23:56+08:00]

log_ver

ELB服务日志版本号。

固定值:elb_01

elb_01

remote_addr: remote_port

客户端IP地址:客户端端口。

记录客户端IP地址和客户端端口号。

192.168.1.1:888

status

ELB响应的状态码。

记录请求状态码。

200

request_method scheme://host request_uri server_protocol

请求方法。请求方式://主机名:请求URI 请求协议。

  • request_method:请求方法。
  • scheme: http或https。
  • host: 主机名,可能为域名或者IP。
  • request_uri:

    浏览器发起的不做任何修改的原生URI。不包括协议及主机名。

"POST https://www.test.com/example/ HTTP/1.1"

request_length

从客户端收到的请求长度(包括请求header和请求body)。

整型数据

1411

bytes_sent

发送到客户端的字节数 。

整型数据

251

body_bytes_sent

发送到客户端的字节数(不包括响应头)。

整型数据

3

request_time

请求处理时间,即ELB收到第一个客户端请求报文到ELB发送完响应报文的时间间隔(单位:秒)。

浮点型数据

0.011

upstream_status

从上游服务器获得的响应状态码,当ELB代理进行请求重试时会包含多个响应的状态码,当请求未被正确转发到后端服务器时此字段为 -。

后端返回给ELB的状态码

"200"

upstream_connect_time

与上游服务器建立连接所花费的时间,时间以秒为单位,分辨率为毫秒。当ELB代理进行请求重试时会包含多个连接的时间,当请求未被正确转发到后端服务器时此字段为 -。

浮点型数据

"0.000"

upstream_header_time

从上游服务器接收响应头所花费的时间,时间以秒为单位,分辨率为毫秒。当ELB代理进行请求重试时会包含多个响应时间,当请求未被正确转发到后端服务器时此字段为 -。

浮点型数据

"0.011"

upstream_response_time

从上游服务器接收响应所花费的时间,时间以秒为单位,分辨率为毫秒。当ELB代理进行请求重试时会包含多个响应时间,当请求未被正确转发到后端服务器时此字段为 -。

浮点型数据

"0.011"

upstream_addr

后端主机的IP地址和端口号。可能有多个值,每个值都是ip:port或者-,用逗号空格隔开。

IP地址+端口号

"192.168.1.2:8080"

(实际日志可能有多个值,每个值都是ip:port或者-,用逗号空格隔开)

http_user_agent

ELB收到请求头中的http_user_agent内容,表示客户端的系统型号、浏览器信息等。

记录浏览器的相关信息

"okhttp/3.13.1"

http_referer

ELB收到请求头中的http_referer内容,表示该请求所在的页面链接。

页面链接请求

"-"

http_x_forwarded_for

ELB收到请求头中的http_x_forwarded_for内容,表示请求经过的代理服务器IP地址。

IP地址

"-"

lb_name

负载均衡器的名称(格式为“loadbalancer_” + “负载均衡器ID”)。

字符串

loadbalancer_295a7eee-9999-46ed-9fad-32a62ff0a687

listener_name

监听器的名称(格式为“listener_” + “监听器ID”)。

字符串

listener_20679192-8888-4e62-a814-a2f870f62148

listener_id

监听器在ELB服务内部的ID。

字符串

3333fd44fe3b42cbaa1dc2c641994d90

pool_name

后端服务器组名称(格式为“pool_” + “后端服务器组ID”或“pool_” + “后端服务器组ID*负载均衡器ID”)。

字符串

pool_89547549-6666-446e-9dbc-e3a551034c46

member_name

后端服务器的名称(格式为“member_” + “服务器ID”,尚未支持)。可能有多个值,每个值都是member_id或者-,用逗号空格隔开。

字符串

"-"

(实际日志可能有多个值,每个值都是member_id或者-,用逗号空格隔开)

tenant_id

租户ID。

字符串

f2bc165ad9b4483a9b17762da851bbbb

eip_address:eip_port

弹性IP地址和监听器监听的端口号。

弹性IP地址和监听器监听的端口号。

121.64.212.1:443

upstream_addr_priv

后端主机的IP地址和端口号。可能有多个值,每个值都是IP:Port或者-,用逗号空格隔开。

IP地址+端口号

"-"

(独享型负载均衡为"-")

certificate_id

HTTPS监听器:SSL连接建立时使用的证书ID(尚未支持)。

字符串

-

ssl_protocol

HTTPS监听器:SSL连接建立使用的协议,非HTTPS监听器,此字段为 -。

字符串

TLSv1.2

ssl_cipher

HTTPS监听器:SSL连接建立使用的加密套件,非HTTPS监听器,此字段为 -。

字符串

ECDHE-RSA-AES256-GCM-SHA384

sni_domain_name

HTTPS监听器:SSL握手时客户端提供的SNI域名,非HTTPS监听器,此字段为 -。

字符串

www.test.com

tcpinfo_rtt

ELB与客户端之间的tcp rtt时间,单位:微秒。

整型数据

56704

self_defined_header

该字段为保留字段,默认为“-”。

字符串

"-"

request_header_length

客户端请求的header头大小。

整型数据

129

actions_executed

waf的执行结果。

字符串

  • waf:请求waf成功。
  • waf-failed :请求waf失败。
  • waf-block:请求被waf拦截。

waf

error_reason

请求waf失败的原因。

字符串

  • WAFUnhandledException:异常内部错误,需要联系业务定位。
  • WAFRequestHeaderLengthExceeded:客户端请求头超过限制。
  • WAFRequestBodyLengthExceeded:客户端body体过大。
  • WAFRequestHeaderContentLengthEmpty:客户端body体长度为0
  • WAFResponseBodyReadError:读取waf返回的body error。
  • WAFResponseReadTimeout:读取waf返回的结果超时
  • WAFConnectionTimeout:连接waf超时。
  • WAFConnectionError: 连接waf失败。
  • WAFNoBackendAvailable:waf没有可用后端。
  • WAFNoBackendOnline:waf没有后端在线。

-

pool_usr_name

后端服务器组的名称

字符串

"我的后端服务器组"

记录自定义header

除了常用的header字段外,ELB支持您通过all_headers字段记录请求中其他header的值,可以更完整地记录日志,增强ELB日志与实际业务的关联性。

  • 推荐使用场景
    • 问题快速定位与追踪:在复杂业务系统中,仅通过ELB提供的默认日志信息(如 IP、URL、状态码)难以关联具体业务上下文时,添加额外参数辅助分析。
    • 安全合规性与审计追溯:部分行业(如医疗、金融)有严格的合规要求,需日志记录特定业务信息以满足监管审计。
  • 约束与限制
    • 针对同一个header参数,拦截操作的优先级更高,拦截操作仅针对需要打印的header信息生效。
    • 自定义header不会记录以下字段信息:host、user-agent、referer、x-forwarded-for、x-clienttraceid、traceparent。
    • 访问日志自定义header的长度默认支持1KB,支持提升至4KB,如果您有使用需求可以提工单申请。
  • 操作步骤
    1. 在负载均衡实例的“访问日志”页签下,单击记录自定义header下方的“查看/编辑”。
    2. 在记录自定义header侧拉窗中,选择要添加记录自定义header的监听器。

      如果您需要为多个监听器记录自定义header,您可以单击侧拉窗左上方的“添加”。

    3. 在“打印的header信息”列,单击“全部”或“自定义”。
      1. 全部:ELB的日志将会记录所有的header信息。
      2. 自定义:ELB的日志仅记录您写入的header信息。选择“自定义”后,您需要在下方的输入框中,输入您希望记录的header字段。
    4. 如果您不希望日志中记录某些header信息,您也可以通过输入“拦截的header信息”,对header信息进行拦截。

      在“拦截的header信息”下方的输入header信息后,ELB日志将不会记录对应的字段。

    5. 单击“确定”。

定位异常后端服务器

筛选异常日志如下:

1554944564.344 - [2024-04-11T09:02:44+08:00] elb 10.133.251.171:51527 500 "GET http://10.154.73.58/lrange/guestbook HTTP/1.1" 411 3726 3545 19.028 "500" "0.009" "19.028" "19.028" "172.17.0.82:3000" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36" "http://10.154.73.58:5971/" "-" loadbalancer_ed0f790b-e194-4657-9f97-53426227099e listener_b21dd0a9-690a-4945-950e-b134095c6bd9 6b6aaf84d72b40fcb2d2b9b28f6a0b83

分析日志:

在 [2024-04-11T09:02:44+08:00 时,ELB接收到客户端地址和端口 (10.133.251.171:51527) 发起的 “GET / HTTP/1.1” 请求,ELB将请求转发给后端服务器(172.17.0.82:3000)处理,后端服务器响应状态码500。ELB最终向客户端响应状态码500。

分析结果:

后端服务器(私网IP地址为172.17.0.82:3000)异常,不能正常响应请求。

相关文档

高频问题

相关文档