访问日志
操作场景
在您使用共享型ELB期间,支持对采用HTTP/HTTPS监听器的负载均衡实例的访问日志进行记录,包括请求时间、客户端IP地址、请求路径和服务器响应等。
如果您遇到后端服务器导致的业务故障或异常,您可以查看访问弹性负载均衡的详细日志记录,分析负载均衡的响应状态码,快速定位异常的后端服务器。
由于弹性负载均衡会将访问日志等运维数据内容展示到云日志服务控制台,请您在使用过程中,注意您的隐私及敏感信息数据保护,不建议将隐私或敏感数据通过访问日志涉及的的字段传输,必要时请加密保护。
约束与限制
- 仅采用HTTP/HTTPS监听器的共享型负载均衡实例支持配置访问日志。
- 客户订阅的访问日志中不包含返回码为400的请求,因为该类请求不符合HTTP规范,无法被正常处理。
前提条件
- 您已经创建了七层(应用型)负载均衡器。具体操作,请参见购买共享型负载均衡器。
- 您已经开通了云日志服务。具体操作,请参见开始使用云日志服务。
- 您已经创建了后端服务器组并且已添加后端服务器,在后端服务器中已部署了业务。具体操作,请参见创建后端服务器组。
- 您已经在ELB中创建了HTTP或HTTPS监听器。具体操作,请参见添加HTTP监听器或添加HTTPS监听器。
操作流程
创建日志组
- 登录管理控制台。
- 在管理控制台左上角单击图标,选择区域和项目。
区域和项目选择“华北-北京四”。
- 单击页面左上角的,选择“管理与监管 > 云日志服务”。
- 单击左侧导航栏“日志管理”。
- 单击 “创建日志组”,在弹出框内,输入日志组名称。
图2 创建日志组
- 单击“确定”,创建完成。
创建日志流
- 在云日志服务管理控制台,单击日志组名称对应的按钮。
- 单击“创建日志流”,在弹出框内,输入日志流名称。
图3 创建日志流
- 单击“确定”,创建完成。
配置访问日志
- 单击页面左上角的,选择“网络 > 弹性负载均衡”。
- 在“负载均衡器”界面,单击需要配置访问日志的负载均衡器名称。
- 在该负载均衡器界面的“访问日志”页签,单击“配置访问日志”。
- 开启日志记录,选择您在云日志服务中创建的日志组和日志流。
图4 配置ELB访问日志
图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
日志示例如下:
1644819836.370 eb11c5a9-93a7-4c48-80fc-03f61f638595 [2022-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" "100.64.0.129: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 -
日志字段说明如表1。
参数 |
描述 |
取值说明 |
示例取值 |
---|---|---|---|
msec |
以秒为单位的时间,日志写入时的分辨率为毫秒。 |
浮点型数据 |
1644819836.370 |
access_log_topic_id |
访问日志流ID。 |
uuid |
eb11c5a9-93a7-4c48-80fc-03f61f638595 |
time_iso8601 |
日志写入时的时间,采用ISO 8601标准格式本地时间。 |
- |
[2022-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 请求协议。 |
"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地址+端口号 |
"100.64.0.129:8080" (共享型负载均衡场景该IP地址为ELB内部通信使用) |
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_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地址+端口号 |
"10.1.1.2:8080" (实际日志可能有多个值,每个值都是member_id或者-,用逗号空格隔开) |
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 |
该字段为保留字段,默认为“-”。 |
字符串 |
- |
日志分析示例:
在[2022-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。
分析结果:
后端服务器正常响应请求。
配置日志转储
如果您希望将日志转储进行二次分析,您可以参考本章设置日志转储。
- 登录管理控制台。
- 在管理控制台左上角单击图标,选择区域和项目。
- 单击页面左上角的,选择“管理与监管 > 云日志服务”。
- 在左侧导航栏,单击“日志转储”。
- 在日志转储页面,单击“配置转储”。
图6 配置日志转储
- 根据实际情况设置转储方式和其他配置项,具体操作请参见《云日志服务用户指南》。