OpenResty Edge 中配置访问日志,先在 Global Config 页面定义一个命名的日志格式,再把它指派给应用并指向一个日志文件。改动会推送到每一台网关服务器,无需重载或重启。默认的 main 格式记录了远程 IP 地址、HTTP 主机和上游状态。

本教程将演示如何在全局层面配置访问日志格式、把它应用到某个应用,并在网关服务器上验证日志输出。

在 OpenResty Edge Admin 控制台中为应用配置访问日志格式

在 Global Config 中定义访问日志格式

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

OpenResty Edge Admin Web 控制台的样本部署

我们先来配置一下访问日志的格式。

开始在 OpenResty Edge 中配置访问日志格式

转到 Global Config 页面。

在 OpenResty Edge 控制台中打开 Global Config 页面

当前的全局配置属于名为 “default” 的网络分区。

名为 default 的网络分区的 Global Config

直接跳到设置日志的部分。

Global Config 页面上的日志设置部分

这里是默认使用的日志文件目录。如果想修改这个目录,你必须确保修改以后的目录在所有网关服务器上都存在。

Global Config 中的默认访问日志文件目录

这是名为 “main” 的默认访问日志格式。

名为 main 的默认访问日志格式

这个格式记录了很多信息,如远程 IP 地址、HTTP 主机、请求行、发送字节数、上游状态等。

main 访问日志格式记录远程 IP、HTTP 主机、请求行和上游状态

“As default” 是指将这个日志格式设置为该网络分区的默认访问日志格式。在应用中,如果我们不做任何改动,默认就是使用这个日志格式。

将某格式设为网络分区的默认访问日志格式

如果你想添加一个新的格式,你可以点击这个按钮。

添加新访问日志格式的按钮

在本教程中,我们使用这个现有的格式 “tutorial-example”。

tutorial-example 访问日志格式

它记录了请求耗时、远程 IP 地址、HTTP 主机和请求行。

tutorial-example 格式记录请求耗时、远程 IP、HTTP 主机和请求行

为应用指派访问日志格式

现在让我们为应用配置这种访问日志格式。

为应用配置访问日志格式

转到应用列表页。

在 OpenResty Edge 中打开应用列表页

我们可以继续使用之前的示例应用,test-edge.com。

test-edge.com 域名的示例应用

进入该应用。

进入 OpenResty Edge 中的示例应用

进入设置页面。

打开应用的设置页面

之前我们为这个应用配置了名为 “default” 的网络分区。

配置到名为 default 的网络分区的应用

可以看到该应用默认使用全局配置的默认访问日志格式。

使用 Global Config 默认访问日志格式的应用

在使用默认的日志格式时,我们不能改变访问日志的文件名。

使用默认日志格式时锁定的访问日志文件名

现在来改一下使用的日志格式。我们选择使用名为 “tutorial-example” 的访问日志格式。

为应用选择 tutorial-example 访问日志格式

现在可以改动日志文件名了。我们把它改为 “example.access.log”。

把应用的日志文件改为 example.access.log

保存这个改动。

保存访问日志格式与日志文件设置

像往常一样,我们需要发布来推送这个新改动。

发布以推送访问日志改动

点击这个按钮。

在 OpenResty Edge 中创建新发布的按钮

发布!

把新发布推送到网关集群

改动现在已经同步到所有的网关服务器。

发布已完全同步到所有网关

现在,刚才的改动已经被推送到所有的网关集群和服务器。

配置改动开始同步到所有网关集群

配置改动正在同步到所有网关集群

配置改动已同步到所有网关服务器

更改访问日志格式时,改动会同步到所有网关服务器,其间会执行一次二进制升级(binary upgrade);这是 OpenResty 的在线热升级,不需要重载或重启,也不会停机或中断已有连接。所以它依然非常高效和可扩展。

配置从 Edge Admin 同步到各网关节点,并更新到节点本地存储

在网关服务器上测试访问日志

在之前的教程中我们已经定义了一个上游。

在早前 OpenResty Edge 教程中定义的上游

这个 my_backend 上游定义了一个后端服务器。

定义了后端服务器的 my_backend 上游

我们也已经定义了一个页面规则。

已为应用定义的页面规则

这个页面规则设置了一个反向代理到我们刚才看到的上游。

设置反向代理到上游的页面规则

所以当我们访问应用时,会有上游的内容返回。

现在让我们看看我们的应用程序属于哪个网关服务器。

转到网关集群页面。

打开网关集群页面

我们的应用属于名为 “default” 的网络分区。

应用所属的名为 default 的网络分区

可以看到有许多网关集群属于名为 “default” 的网络分区。

属于名为 default 网络分区的网关集群

我们选择其中一个来查看访问日志信息。

选择一个网关集群以查看访问日志信息

首先让我们通过访问应用来生成访问日志消息。

在终端上,我们通过 curl 发送一个请求。

curl -sSI -H 'Host: test-edge.com' http://52.53.251.226/

用 curl 向应用发送请求

访问成功!

向网关发送的 curl 请求成功

然后,检查一下访问日志信息。我们登录到 OpenResty Edge 网关服务器。

登录 OpenResty Edge 网关服务器

检查 example.access.log 文件中的最后一条访问日志信息。

检查 example.access.log 中最新的访问日志信息

日志文件目录是在全局配置中定义的。

在 Global Config 中定义的访问日志文件目录

而日志文件名是在我们的应用中定义的。

在应用中定义的访问日志文件名

运行该命令。

在网关服务器上运行命令读取访问日志

我们可以看到访问日志信息包含了请求耗时。

访问日志信息中显示的请求耗时

和远程 IP 地址。

访问日志信息中显示的远程 IP 地址

HTTP 主机。

访问日志信息中显示的 HTTP 主机

和请求行。

访问日志消息中显示的请求行

可以看到,访问日志信息与访问日志格式 “tutorial-example” 相匹配。

与 tutorial-example 格式匹配的访问日志信息

顺便说一下,除了在设置页面为应用配置访问日志格式外,我们还可以在创建新的应用时进行配置。

回到应用列表页。

返回 OpenResty Edge 的应用列表页

点击新的应用按钮,看看在哪里可以设置访问日志格式。

OpenResty Edge 中的新建应用按钮

我们可以在这里设置访问日志格式。

OpenResty Edge 新建应用页面上的访问日志格式选择器

访问日志是 OpenResty Edge 可观测性的一部分。要排查故障,可参阅如何跨应用和网关服务器查看错误日志,以及如何通过 Request ID 追踪请求

常见问题

如何在 OpenResty Edge 中配置访问日志格式?

进入 Global Config 页面,在日志设置下定义(或选择)一个命名的访问日志格式。然后打开应用的设置页面,选择该格式并设置日志文件名。发布一次即可把改动推送到所有网关服务器。

OpenResty Edge 的访问日志文件存放在哪里?

日志文件目录在 Global Config 中定义,日志文件名按应用定义。本教程中,应用把日志写入各网关服务器上所配置日志目录下的 example.access.log

可以在不重启网关的情况下更改访问日志格式吗?

可以,无需重启。发布之后,配置改动会推送到所有网关集群和服务器。需要说明的是,更改访问日志格式会触发网关的一次二进制升级(binary upgrade)——这是 OpenResty 的在线热升级,不停机、也不会中断已有连接,因此无需重启网关即可生效,依旧高效且可扩展。

默认的 “main” 访问日志格式记录哪些字段?

名为 “main” 的默认格式记录了大量信息,包括远程 IP 地址、HTTP 主机、请求行、发送字节数、请求耗时和上游状态。

可以为每个应用设置不同的访问日志格式吗?

可以。每个应用既可以使用网络分区的默认格式,也可以选择自己的格式——例如本文使用的 “tutorial-example” 格式,它记录请求耗时、远程 IP 地址、HTTP 主机和请求行。你也可以在创建新应用时设置该格式。

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

我们的微信公众号

翻译

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