1
博客【最佳实践】全链路追踪最佳实践

【最佳实践】全链路追踪最佳实践-c7电子娱乐

2 天前用户实践

《oceanbase 最佳实践》会持续发布和更新,想要查看更多和更新内容可以访问这里< >。

全链路追踪最佳实践

全链路顾名思义就是:整个链路,从业务生成 sql 到 sql 从数据库执行完返回客户端一整套下来的链路。在分布式架构下,链路较长,问题的分析处理也变得复杂。

本文主要论述如何使用全链路追踪来定位问题,并通过分析问题,进行相应的处理。

在 oceanbase 4.0 之前,可以使用业务 sql 请求的 trace_id 进行追踪,但是 obproxy 和 observer 记录的不是应用或 sql 设置的 trace_id,而是各自的内部 trace_id,还需要使用 sql 语句的特征(比如,主键或者唯一键的值)进行辅助定位。

2.x、3.x 版本全链路追踪介绍

负载均衡层

slb 问题排查方法

一个 slb 负载均衡地址后端会挂载多个后端服务地址,快速定位是不是 slb 这层出问题的办法是绕过 slb 直连数据库服务器地址进行验证。

例如:a 为负载均衡地址,b、c、d 为后端服务器地址。

正常连接是:app-->a-->(b or c or d)

验证问题:app-->b、app-->c、app-->d 如果连接都没有问题,那说明肯定是负载均衡设备问题。

slb 常见问题处理

slb 配置不足

问题现象:可能有两类表现。

  • 业务使用负载均衡地址连接 hang。
  • 没有到达连接数上限但是应用报错无法创建连接。此类问题还有可能是 sql 执行过慢,导致获取连接超时了。

问题原因:可能 slb 配置不足,达到了瓶颈。

处理方法:  扩容。具体操作如下:登录负载均衡设备--> 查看 slb 配置-->修改配置项增加配置

例如:某客户出现 slb 连接使用达到 100% 问题,通过流量监控可以发现问题时间点的连接数和流量。查看对应 slb 配置,显示该 slb 配置规格为最大支持 5000 连接数,实际上压测阶段已经超过 5000,资源明显不够,需要修改配置进行扩容。

slb 网络存在问题

问题现象:通过负载均衡地址连接 hang 或者直接网络不通。

问题原因:可能是防火墙策略、网络路由问题等其他硬件问题。

处理方法:排查防火墙策略是否存在端口限制、网络路由是否存在问题,同时检查交换机设备模块是否存在丢包等问题。

流量负载不均衡问题

问题现象:不同后端服务流量不一致。

问题原因:slb 负载均衡算法存在一定问题或者业务模型存在问题。

处理方法:对于算法问题可以动态调整 slb 负载均衡算法(推荐最大权重和 hash 算法)找到比较合适的算法,或者联系c7电子娱乐的技术支持人员进行协助处理。

obproxy 层

obproxy 只是全链路中的一个组件,在对 obproxy 进行排查时,需要明确问题的场景,确定排查的方向。

  • obproxy 日志是问题诊断的主要信息来源,善于利用 trace_id、session_id、错误码以及 sql 语句等信息进行日志的搜索。
  • ocp 监控平台也提供了 obproxy 的日志检索功能,对于有多个 obprxoy 节点的环境特别有用。

在全链路追踪中,对 obproxy 进行排查首先要确定 obproxy 实例的地址。在私有云场景,obproxy 上面往往会有一个负载均衡,应用通常不直接连接 obproxy 的地址,而是连接一个 vip。此时,要确定 obproxy 的地址可以采取以下方法:

  • 在 oceanbase 数据库中通过 sql_audit 查看 client_ip,client_ip 即为 obproxy 的 地址。
  • 查看 lb 的配置情况,确定应用连接对应的 obproxy 的范围列表。

慢查询诊断

在 obproxy.log 中会记录更详细的 slow query 和 slow transaction 日志。我们可以使用 obproxy.log 来查询从 obproxy 视角统计的 sql 与交易执行时间,通过对比上游的应用耗时统计,以及下游的 observer 的 sql 和交易的耗时统计,从而得知 sql 或者交易执行是慢在哪个环节。

要使用的慢查询日志,需要配置相应的 obproxy 配置项:

  • slow_query_time_threshold:obproxy_slow.log 的打印阈值,慢查询同时打印到 obproxy.log 日志中。
  • query_digest_time_threshold:obproxy_digest.log 的打印阈值。
  • slow_transaction_time_threshold:obproxy.log 的慢事务打印阀值。

observer 层

sql 执行失败如果发生在 observer 端,则 obproxy 以及应用侧均会收到对于的 sql 错误码,可以根据对应的错误码进行相应的分析处理。

在 oceanbase 数据库中进行问题诊断,根据问题类型的不同,可能会用到分布在不同位置的诊断信息。比如说,应用侧收到的错误码,ocp 监控平台的告警,observer 的运行日志,系统监控视图,以及操作系统日志等。

oceanbase 数据库的问题诊断要根据问题发生模块的不同而采用不同的真的方法,详细的诊断方法可参考c7电子娱乐官网内容 。

4.x 版本全链路追踪介绍

oceanbase 4.x 版本新增全链路追踪 trace,运维人员通过对所有 trace 日志进行搜集分析后,可以追踪每个事务或每个 sql 在整条链路中的执行耗时等相关信息,以此帮助运维人员定位整条访问链路的问题所在。更多信息可以参见c7电子娱乐官网链接:

4.x 版本使用全链路追踪定位问题示例

在进行 sql 查询时,发现执行语句的时间过长,通过全链路追踪,来分析对应的原因。

1. 开启 show trace 功能。

1737009976

2.执行以下查询语句。

1737010003

返回结果如下:

1737010018

3.通过 show trace 语句查看该语句的执行调用链路情况以及链路中各阶段的耗时情况。

1737010039

返回结果如下:

1737010056

通过上述回显结果,可以分析得出,导致 sql 语句执行慢的原因是 sql_execute 占用了大量的时间,从而导致查询耗时增加。

4.查询表 tp1 的结构并分析。

1737010073

返回结果如下:

1737010089

通过查询表 tp1 的结构,发现查询字段 c1 上没有创建索引,导致在第 5 步查询时,走的全表扫描,从而使 sql 语句执行缓慢,因此为表中 c1 字段创建索引。

5.为测试表创建索引。

1737010109

6.重新执行上述查询语句。

1737010139

返回结果如下:

1737010156

7.通过 show trace 语句查看该语句的执行调用链路情况以及链路中各阶段的耗时情况,此时发现查询效率明显提升。

1737010172

返回结果如下:

1737010187

通过上述回显结果与第 3 步的内容对比得出,此时的 sql_execute 的耗时由 478.105 ms 降到了 0.908 ms,很大程度的提高了查询的效率。

点赞1
收藏

声明

本网站下的“博客”等板块为技术爱好者提供分享、交流的平台。发布者发布的任何内容、信息等,并不反映或代表本网站的观点、立场或政策。本网站不对其任何内容和信息的错误以及由此产生的损失或损坏承担任何责任。

尊重知识产权是本网站的基本原则之一,如您在使用本网站过程中发现本网站中存在侵犯您或其他第三人合法知识产权的情况,请您即可将侵权材料及初步证据提交至下述邮箱:obcompliance@oceanbase.com 。本网站将在收到材料后尽快进行审核及处理。

已发布 19 篇博文

网站地图