OpenResty Edge 中,错误日志可以在两个地方查看:每个应用在 Admin 控制台里都有自己的错误日志页面,而 Dashboard 上则汇总展示了所有网关服务器采集来的全局错误日志。两者都支持按请求 ID、网关、服务器、日志级别和时间区间过滤,你也随时可以下钻到某台网关或 Admin 服务器上的原始 error.log 文件。本教程会依次演示这些入口,以及它们如何与基于请求 ID(Req-ID)的单请求追踪、与访问日志相关联。

OpenResty Edge 错误日志概览示意图

如何在 OpenResty Edge 中查看应用错误日志

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

OpenResty Edge Admin 控制台登录界面

我们继续使用 test-edge.com 域名的样本应用。

应用列表中的 test-edge.com 样本应用

进入这个应用。

在控制台中进入 test-edge.com 应用

点击这里查看该应用的错误日志。

应用错误日志页面的菜单入口

可以看到,这里已经有了一些错误日志记录。这个页面显示了错误日志相关的一些重要信息。

应用错误日志页面列出已记录的错误条目

比如说请求 ID,错误日志信息,主机名,请求体,客户端 IP 地址等等。

现在我们来对应用做一些改动。改动之后再访问 test-edge.com 这个域名会生成一个新的错误日志信息。

这里我们已经定义好了一个页面规则。

test-edge.com 现有的页面规则

这个页面规则设置了一个反向代理到一个预先定义的上游。

页面规则配置为反向代理到上游

让我们转到 Upstreams 页面。

OpenResty Edge 的上游配置页面

编辑上游服务器。

编辑上游服务器条目

停用这个上游服务器。上游服务器被停用之后,我们访问应用时将会得到一个 Bad Gateway 的错误。

停用上游服务器以触发 Bad Gateway 错误

保存这个改动。

保存上游服务器的改动

像往常一样,需要发布一个新的版本来推送我们刚才的改动。

创建新版本以推送修改后的页面规则

点击这个按钮。

控制台中的版本发布确认按钮

发布!

将版本发布到所有网关服务器

新版本现在已经同步到所有的网关服务器上了。

版本已同步到所有网关服务器

现在,新的页面规则已经被推送到所有的网关集群和服务器。

配置同步到网关集群——同步动画开始

配置同步到网关集群——同步进行中

配置同步到网关集群——同步完成

这些配置的变化不需要服务器重载、重启或二进制升级。所以它是非常高效和可扩展的。

无需重载或重启的实时配置同步

现在来发送一个请求。

在终端上,用 curl 发送请求。

curl -sSI http://test-edge.com

在终端向 test-edge.com 发送 curl 请求

可以看到返回了 Bad Gateway 错误,这个错误将被记录在应用的错误日志中。

终端显示 502 Bad Gateway 响应

而且可以看到,服务器端的响应里有一个请求 ID(Req-ID)。复制这个 ID,用它来查找相应的日志信息。

响应头中显示的 Req-ID 请求 ID 值

现在回到应用的错误日志页面。检查错误日志信息。

回到应用错误日志页面定位新生成的条目

不出所料,刚才的请求生成了错误日志。新生成的错误日志出现在列表的顶部。

列表顶部新生成的 Bad Gateway 错误日志

按请求 ID、网关、服务器与日志级别过滤错误日志

这个应用的错误日志比较少。现在来看一下我们线上其他应用的错误日志。

转到应用列表页。

包含多个线上域名的应用列表页

让我们看看 OpenResty.com 网站的错误日志。

选择 OpenResty 网站应用

转到该页面。

打开 OpenResty 网站应用

转到错误日志页面。这里记录了更多的错误日志。

openresty.com 的错误日志页面,记录了大量条目

顶部的过滤查询条件有利于准确定位问题。

用于定位问题的错误日志过滤查询条件

例如我们可以通过请求 ID 来过滤信息。

按请求 ID 过滤错误日志信息

或者通过网关。

按网关过滤错误日志信息

服务器。

按服务器过滤错误日志信息

错误日志级别。

按错误日志级别过滤错误日志信息

以及时间间隔。

按时间间隔过滤错误日志信息

现在来试试通过网关过滤消息。

选择一个网关来过滤错误日志信息

选择 aws-us-west 网关。

按 aws-us-west 网关过滤

可以看到,aws-us-west 网关下没有任何错误日志。

OpenResty Edge 的三类全局错误日志

在了解了应用的错误日志之后,我们再来看看全局错误日志。全局错误日志显示在 Dashboard 页面上。

Dashboard 页面上的全局错误日志区域

Dashboard 上的全局错误日志入口

现在转到 Dashboard 页面去看看全局错误日志。

导航到 Dashboard 全局错误日志

可以看到有三种类型的错误日志。

三类全局错误日志:全局、Admin 站点、日志服务器

全局错误日志。

全局错误日志标签页

Admin 站点的错误日志。

Admin 站点错误日志标签页

日志服务器的错误日志。

日志服务器错误日志标签页

先来看看全局错误日志。

查看全局错误日志列表

全局错误日志是由网关服务器收集的,不隶属于任何应用。

全局错误日志由网关服务器收集,不隶属任何应用

可以过滤错误日志。

过滤全局错误日志

继续看一下 Admin 站点的错误日志。

打开 Admin 站点错误日志

这些错误日志是从 Admin 控制台收集的。

Admin 站点错误日志由 Admin 控制台收集

我们还支持对日志进行条件过滤。

对 Admin 站点错误日志进行条件过滤

例如可以选择日志级别 “Error”。

选择 Error 日志级别过滤条件

可以看到 “Error” 级别和重复次数大于 1 的日志被高亮显示。

高亮显示的 Error 级别、重复次数大于 1 的日志

最后,来看一下日志服务器的错误日志。

打开日志服务器错误日志

本页面显示的错误日志来自 OpenResty Edge 日志服务器。

来自 OpenResty Edge 日志服务器的错误日志

在这里我们也可以过滤日志。

过滤日志服务器错误日志

可以看到,全局错误日志和应用错误日志都有日志级别,但不是所有级别的日志都会被系统上报。

对比全局与应用日志可用的日志级别

我们可以在全局配置页面设置要上报的日志级别。

在全局配置页面设置要上报的日志级别

这里我们把它设置为 “warn”,这意味着只会上报警告以及比警告级别更高的日志。

将上报日志级别设置为 warn

可以设置的错误日志级别有 “warn”、“error”、“crit”、“alert” 等等。

可用日志级别:warn、error、crit、alert

在你的本地部署中,你可以设置任意的日志级别。

如何查看网关与 Admin 服务器上的 error.log 文件

现在让我们来登录 OpenResty Edge 网关服务器,看看 error.log 文件。

通过 SSH 登录网关服务器

检查最后一条错误日志信息。

在网关服务器上检查最后一条错误日志信息

网关服务器的错误日志信息都写在这里。

网关服务器 error.log 文件的位置

运行该命令。

运行命令读取网关的 error.log

我们可以看到网关服务器的错误日志信息。

终端中显示的网关服务器错误日志信息

退出服务器。

退出网关服务器的 SSH 会话

然后,我们登录 OpenResty Edge 的 Admin 服务器,查看 error.log 文件。

登录 OpenResty Edge Admin 服务器

看一下最后的错误日志信息。

在 Admin 服务器上检查最后的错误日志信息

OpenResty Edge Admin 的错误日志信息写在这里。

OpenResty Edge Admin error.log 文件的位置

运行该命令。

运行命令读取 Admin 的 error.log

可以看到 OpenResty Edge Admin 的错误日志信息。

终端中显示的 OpenResty Edge Admin 错误日志信息

常见问题

在 OpenResty Edge 中的哪里可以查看错误日志?

有两个地方。每个应用在 Admin 控制台里都有自己的错误日志页面,展示该应用各域名的错误。此外,Dashboard 上单独展示了跨所有网关服务器采集的全局错误日志。如果要看原始文件,你也可以 SSH 登录到某台网关或 Admin 服务器,直接读取它的 error.log

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

OpenResty Edge 的每个响应都会在响应头里带上一个请求 ID(显示为 Req-ID)。复制这个值,粘贴到应用错误日志页面的请求 ID 过滤条件里,就能直接跳到对应的条目。关于请求追踪的完整机制,参见什么是请求 ID

三类全局错误日志分别是什么?

在 Dashboard 上,全局错误日志分为全局错误日志(由网关服务器采集,不隶属于任何应用)、Admin 站点错误日志(由 Admin 控制台采集)和日志服务器错误日志(由 OpenResty Edge 日志服务器采集)。每一类都可以按日志级别及其他条件过滤。

如何设置要上报哪些错误日志级别?

要上报的日志级别在全局配置页面设置。例如设为 warn,就表示只上报 warn 级别及更高级别的消息。可选级别包括 warnerrorcritalert。在你自己的本地部署中,可以任选所需级别。

如何过滤错误日志以定位问题?

错误日志页面支持按请求 ID、网关、服务器、错误日志级别和时间区间来缩小结果范围。例如,你可以选中单个网关(如 aws-us-west)来确认错误是否只集中在某一处,或者选中 Error 级别,只显示最严重的消息。

关于 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. 公司的博客网站 。也欢迎扫码关注我们的微信公众号:

我们的微信公众号

翻译

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