使用慢日志排查超时问题

更新时间:
复制 MD 格式

慢请求引起的连接超时等问题是影响云数据库 Tair(兼容 Redis)服务质量的常见问题,云数据库 Tair(兼容 Redis)的慢日志系统能够帮助您快速找到慢请求问题发生的位置,定位发出请求的客户端IP,为彻底解决超时问题提供可靠的依据。

功能简介

实例的慢日志会记录执行时间超过指定阈值的请求,慢日志分为数据节点慢日志和代理慢日志。

说明

Redis开源版 2.8版本实例不支持查询慢日志功能,您可以在CloudDBA > 慢请求中查看慢日志,但Redis开源版 2.8版本的慢日志不支持显示客户端地址等信息。

数据节点慢日志

  • 数据节点慢日志中统计的命令执行时间仅包含命令在数据节点中的执行时间,不包含数据节点与代理或客户端的通信时间以及命令在单线程队列上的排队延迟等。

  • 数据节点慢日志的保留时间为72小时,无数量限制。

  • 由于实例性能出色,通常情况下,数据节点慢日志的数量较少。

相关参数

参数名

说明

slowlog-log-slower-than

设置数据节点慢日志阈值,默认为20000微秒(即20毫秒)。

说明

通常情况下您感知到的延迟实际会高于本参数设置的值,因为感知时间中包含了数据在客户端、代理、数据节点之间传输和处理所消耗的时间。

slowlog-max-len

设置最大慢日志条目数,默认为1024。

参数设置方法请参见配置参数概述

代理慢日志

  • 代理慢日志中统计的命令执行时间从代理向数据节点发出请求开始,到代理从数据节点收到相应的回复为止,包含了命令在数据节点中的执行时间、数据在网络中的传输时间以及命令的排队延迟等。

  • 代理慢日志的保留时间为72小时,无数量限制。

  • 由于代理慢日志反映的延迟与您在应用端感受到的延迟更相近,在排查实例超时问题时,建议多关注此类日志。

说明

标准架构实例不提供代理慢日志。

相关参数

参数名

说明

rt_threshold_ms

设置代理慢日志的阈值,默认为500毫秒。建议将该阈值配置为与客户端超时时间近似的值,推荐为200毫秒到500毫秒。

参数设置方法请参见配置参数概述

慢日志查看方式

慢日志类型

查看方式

数据节点慢日志

代理慢日志

通过管理控制台或调用OpenAPI查看:

操作步骤

服务超时的原因通常比较复杂,很多情况下与慢请求相关。您可以按照下述步骤来排查超时问题。

  1. 当服务出现超时问题,首先查看代理慢日志,详情请参见查询慢日志

    说明
    • 如果实例为标准架构,请跳转至步骤3分析数据节点慢日志。

    • 如果代理慢日志内容为空,您可以排查客户端与实例间的网络状况。如果确认通过外网(公网)连接实例,请参见本文的「排查外网(公网)连接延迟」章节。

  2. 定位最早的代理慢日志由哪条命令引发。

    说明

    代理慢日志通常是因为数据节点中出现慢请求,引起命令堆积而导致的。

    本案例中,最早出现的慢日志是由一条KEYS命令生成的。慢日志记录中的IP地址即为使用这些命令的客户端IP地址。

    慢日志页面单击代理节点页签,可查看代理慢日志记录。本案例中,代理慢日志表格显示了 5 条记录,包含 1 条 KEYS 命令和 4 条 SET 命令,执行时长在 64048~88861 微秒之间。

  3. 查看数据节点慢日志以确认代理慢日志中的哪些日志引起了超时问题。

    说明

    通常情况下,在代理慢日志中最先产生慢日志的命令,也会在数据节点生成慢日志。数据节点的慢日志一般比代理节点慢日志少,这与二者对执行时间的定义以及慢日志阈值不同有关。

    本案例中,查看代理慢日志后,再对比数据节点慢日志,发现也存在KEYS命令产生的慢日志,且没有出现代理慢日志中的其它慢日志,说明真正引起超时即为KEYS命令产生的慢日志。

    慢日志页面单击数据节点页签,可查看数据节点慢日志记录。本案例中,数据节点慢日志中仅出现 KEYS 命令的慢日志记录,其执行时长较长,确认该命令为导致超时的根因。

  4. 在代理慢日志中,根据上一步骤定位到的命令精确搜索,可找到使用这些命令的客户端IP,随后进行优化。

利用慢日志排查热Key问题

当怀疑实例存在热Key问题时,可以通过调整慢日志阈值参数辅助排查读请求侧的热Key。数据节点慢日志的记录阈值由参数 slowlog-log-slower-than 控制,默认值为 20000 微秒(20 毫秒),只有执行时长超过该阈值的命令才会被记录到慢日志中。即使某个 Key 被高频访问,只要单次命令的执行时长没有超过默认阈值,这些读请求也不会产生慢日志记录,因此默认阈值下无法通过慢日志定位热Key。

排查热Key时,建议适当调低 slowlog-log-slower-than 的取值,以捕获更多访问记录,再根据慢日志中反复出现的高频命令定位热Key的来源客户端IP。

需要注意的是,审计日志开通后仅记录写操作的访问信息,不记录读操作,因此无法通过审计日志查看热Key的读访问IP;如需定位读请求侧的热Key来源,需依赖调低阈值后的慢日志。若需要排查基于写请求的热Key,可参考查询历史热点Key

排查外网(公网)连接延迟

当确认实例服务端无性能瓶颈,但客户端仍出现连接超时报错时,需排查客户端与实例之间是否存在外网(公网)连接延迟问题。

问题现象

客户端报 socket error、read error 或 connection timeout 等错误,但性能监控页面显示 CPU 使用率、内存使用率、连接数指标均正常,AvgRt(平均响应时间)处于低位(微秒量级)。

问题原因

公网链路延迟高且不稳定,跨国访问场景尤为明显(例如实例部署在海外,业务从国内通过公网访问)。AvgRt 仅反映实例侧处理耗时,不含网络传输时间;即使服务端指标正常,公网传输延迟也可能导致客户端触发超时阈值。

解决方案

建议按以下优先级排查和改善:

  1. 改用内网连接:将连接方式改为专有网络(VPC)内网连接,避免依赖公网链路。可在连接信息页面获取专有网络连接地址。

  2. 跨地域部署使用云企业网(CEN):业务与实例跨地域部署时,通过云企业网(CEN)打通不同地域的 VPC 内网,实现低延迟稳定连接。详情请参见管理跨地域连接

  3. 调整客户端超时参数并添加重试机制:适当加大连接超时时间和读写超时时间,并实现重试逻辑以应对网络波动。常见客户端报错(如 Jedis SocketTimeoutException)的处置建议请参见常见报错

其他排查方向

完成慢日志和公网连接排查后仍未定位问题时,可继续通过实例巡检、性能监控以及 VPC、ECS 和应用侧信息缩小排查范围。

使用诊断功能一键排查

  1. 实例详情页单击AI 实例巡检

  2. 全选 8 个巡检项目后,单击开始巡检

  3. 查看生成的巡检报告,确认实例状态、安全性、高可用、数据节点性能、代理节点性能、慢日志、大 Key 和热 Key、事件告警等维度是否存在异常。

查看性能监控

  1. 实例详情页单击性能监控

  2. 切换到数据节点代理节点视图,查看 CPU 使用率、请求数(QPS)、平均时延(RT)和出入口流量速率等指标。

  3. 结合各节点指标判断实例侧是否存在性能异常。

排查 VPC、ECS 和应用侧

  1. 实例详情页获取 VPC ID 和 vSwitch ID。

  2. 检查出现访问慢或超时的 ECS 实例是否异常,并核对异常时间点是否与应用变更时间一致。

  3. 如果异常时间与应用变更时间一致,回滚变更或从变更内容中排查原因;可根据 VPC ID 和 vSwitch ID 前往 VPC 或 ECS 控制台继续排查。