OpenResty Edge 中,请求 ID(即 Req-ID 头)是网关为每个请求分配的唯一标识,让你能在复杂的分布式系统中追踪某一个具体请求。该功能默认开启,会同时出现在代理请求头和响应头中。出现问题时,把这个 ID 粘贴到 Edge 管理控制台内置的 Request ID 解码器 中,即可查出处理该请求的应用域名、网关分区、网关集群和网关服务器,并直接跳转到错误日志和 WAF 日志中的对应条目。本文将演示如何开启请求 ID、解码请求 ID,以及用它把错误日志和 WAF 日志筛选到单个请求。

随着业务增长,你的系统可能会变得越来越复杂。对于复杂的系统来说,能够正确地追踪请求变得至关重要,而且颇有难度。

在大型分布式系统中追踪某一个具体请求

OpenResty Edge 可以通过以唯一的 ID 标识请求来降低追踪请求的难度。这就是我们今天的主题: Request ID。

OpenResty Edge 为每个请求分配唯一的 Req-ID 以便追踪

全局配置 Request ID

让我们进入 OpenResty Edge 的 Admin Web 控制台。这是我们控制台的样本部署。每个用户都有自己的本地部署。

OpenResty Edge 管理控制台仪表盘

跳转到全局配置页面。在这里你可以配置是否在所有请求头添加一个 Request ID。

在 OpenResty Edge 管理控制台打开全局配置页面

全局配置页面上的 Request ID 设置项

这个配置项默认是打开的,这意味着每个请求在代理头和响应头中都会有一个 Req-ID 字段。

现在我们向 openresty.org 发送一个请求,看看这个 ID 是如何被使用的。

向 openresty.org 发送请求以查看其 Req-ID

可以看到在请求头中有一个 “Req-ID” 字段。

响应头中返回的 Req-ID 字段

Request ID 解码器

现在转到工具页面。

在 OpenResty Edge 管理控制台打开工具页面

进入 Request ID 解码器页面。

OpenResty Edge 的 Request ID 解码器页面

输入我们刚才看到的 Request ID。

把 Req-ID 粘贴到 Request ID 解码器输入框

点击这个按钮进行解码。

点击 Request ID 解码器的解码按钮

可以看到下面显示了与该请求有关的一些详细信息。

像应用的域名、

解码结果显示的应用域名

网关分区、

解码结果显示的网关分区

网关集群、

解码结果显示的网关集群

以及网关服务器。

解码结果显示的网关服务器

这里有两个按钮。你可以在 openresty.org 应用的错误日志和 WAF 日志页面中搜索这个 Request ID。

在错误日志和 WAF 日志中搜索该 Request ID 的两个按钮

现在我来演示一下要怎么做。

点击 “Search in Error Logs” 按钮。

为解码出的 Request ID 点击“Search in Error Logs”

这会将我们带到错误日志页面。

按 Request ID 筛选后的 OpenResty Edge 错误日志页面

看不到有任何日志显示,这是因为我们使用的 Request ID 是来自一个正常的请求。该请求并没有创建任何错误日志。

正常请求的 ID 没有任何错误日志

清除 Request ID 这个筛选项。

清除错误日志页面的搜索条件

你可以看到所有错误日志的详细信息。

复制其中一个 Request ID。

从错误日志条目中复制一个 Request ID

把它粘贴到搜索框中。

把 Request ID 粘贴到错误日志搜索框

可以看到错误日志列表经过了筛选,只有与所选 Request ID 相符的错误日志被显示出来。

筛选到所选单个 Request ID 的错误日志

这是错误日志页面。同样,在被 WAF 拦截的可疑请求页面,所有请求也都带有 Request ID 信息。

进入 WAF 的日志页面。

列出被拦截请求的 OpenResty Edge WAF 日志页面

你可以看到所有被 WAF 拦截的请求以及相应的 Request ID。

这里你也可以使用 Request ID 来过滤请求。

在 OpenResty Edge 中按 Request ID 过滤 WAF 日志

而且你可以直接在列表中解码 Request ID。

点击一个 Request ID。

在 WAF 日志列表中点击 Request ID 进行解码

WAF 日志列表中内联显示的请求信息弹窗

点击这个弹窗上的链接将把你带到相应的页面。例如,点击一下网关服务器的链接。我们被带到了网关服务器的页面上。

顺着解码出的链接跳转到网关服务器页面

这时请求信息的弹窗依然是打开的,因为你可能想去其他页面。

如果你想关闭它,只需点击关闭按钮。

关闭请求信息弹窗

常见问题

OpenResty Edge 中的 Request ID 是什么?

Request ID 是 OpenResty Edge 为每个请求分配的唯一标识,让你能追踪某一个请求在复杂分布式系统中的流转。它会以 Req-ID 字段的形式同时出现在代理请求头和响应头中,该设置在全局配置页面默认开启。由于 ID 里编码了请求被处理的位置信息,你之后可以解码它,把请求一路追溯到具体的应用、网关分区、集群和服务器。

如何在 OpenResty Edge 中解码 Request ID?

打开 Edge 管理控制台的工具页面,进入 Request ID 解码器,粘贴 Req-ID 的值并点击解码。Edge 会显示处理该请求的应用域名、网关分区、网关集群和网关服务器。你也可以内联解码:在 WAF 日志页面直接点击列表中的 Request ID,无需离开页面即可查看同样的解码信息。

如何找到某个具体请求的错误日志或 WAF 日志?

解码 Request ID 后,用 Search in Error LogsSearch in WAF Logs 按钮即可直接跳到该请求对应的条目。在错误日志页面,你还可以把 Request ID 粘贴到搜索框,把视图筛选到该请求的那一条日志;WAF 日志页面同样支持按 Request ID 过滤——这样你就不必在无关的日志条目里翻找。如果想跨日志之外的更多范围搜索 Request ID,参见 OpenResty Edge 的全局搜索

关于 OpenResty Edge

OpenResty Edge 是一款专为微服务和分布式流量架构设计的全能型网关软件,由我们自主研发。它集流量管理、私有 CDN 构建、API 网关、安全防护等功能于一体,帮助您轻松构建、管理和保护现代应用程序。OpenResty Edge 拥有业界领先的性能和可扩展性,能够满足高并发、高负载场景下的苛刻需求。它支持调度 K8s 等容器应用流量,并可管理海量域名,轻松满足大型网站和复杂应用的需求。

如果你喜欢这个教程,请订阅这个博客网站和我们的 YouTube 频道B 站频道。谢谢!

关于作者

章亦春是开源 OpenResty® 项目创始人兼 OpenResty Inc. 公司 CEO 和创始人。

章亦春(Github ID: agentzh),生于中国江苏,现定居美国湾区。他是中国早期开源技术和文化的倡导者和领军人物,曾供职于多家国际知名的高科技企业,如 Cloudflare、雅虎、阿里巴巴, 是 “边缘计算“、”动态追踪 “和 “机器编程 “的先驱,拥有超过 22 年的编程及 16 年的开源经验。作为拥有超过 4000 万全球域名用户的开源项目的领导者。他基于其 OpenResty® 开源项目打造的高科技企业 OpenResty Inc. 位于美国硅谷中心。其主打的两个产品 OpenResty XRay(利用动态追踪技术的非侵入式的故障剖析和排除工具)和 OpenResty Edge(最适合微服务和分布式流量的全能型网关软件),广受全球众多上市及大型企业青睐。在 OpenResty 以外,章亦春为多个开源项目贡献了累计超过百万行代码,其中包括,Linux 内核、Nginx、LuaJITGDBSystemTapLLVM、Perl 等,并编写过 60 多个开源软件库。

关注我们

如果您喜欢本文,欢迎关注我们 OpenResty Inc. 公司的博客网站 。也欢迎扫码关注我们的微信公众号:

我们的微信公众号

翻译

我们提供了英文版原文和中译版(本文)。我们也欢迎读者提供其他语言的翻译版本,只要是全文翻译不带省略,我们都将会考虑采用,非常感谢!