如何在 OpenResty Edge 中使用自定义动态指标
今天我将演示 OpenResty Edge 的另一项功能。那就是,使用 Metric SQL 语言来创建全新的动态指标。
动态指标简介
动态指标允许用户通过即时编写类似 SQL 的查询来创建自定义指标。OpenResty Edge 会自动生成高效率代码,以收集和汇总每个网关服务器内存中的指标数据。这之后,数据会被报告给 web 控制台,并实时显示在漂亮的图表中。
别担心。它使用固定大小的内存进行流式聚合和统计。我们的优化编译器,将为每个用户定义的指标生成高效的本地代码。
为示例应用创建自定义动态指标
让我们进入 OpenResty Edge 的 Admin Web 控制台。这是我们控制台的样本部署。每个用户都有自己的本地部署。
我们可以继续使用之前的示例应用,test-edge.com。
进入应用程序。
点击这个菜单项,进入动态指标页面。
有两种类型的动态指标。一种叫做自定义动态指标,是由用户自己定义的。
另一种是由 OpenResty Edge 预定义的标准动态指标。
我们今天着重介绍“自定义动态指标”。标准动态指标会在另一个教程中介绍。
点击这个按钮来创建一个新的动态指标。这个指标会计算出发送请求最多的前十个城市。
为这个指标输入一个名称:Client Cities。
添加一个描述:请求最多的前十大城市。
指定报告数据的时间间隔。这个间隔是指从网关服务器的内存向 Edge 日志服务器报告聚合统计数据的时间间隔。之后数据将显示在 Edge 的 Admin Web 控制台。为了方便起见,这里使用 10 秒作为间隔。实际上使用这么短的报告间隔开销会相对较高。
我们使用 Edge 产品提供的 Metric SQL 语言。它使用流行的 SQL 语言的语法。
你可以在我们的文档网站上找到完整的用户手册。
在这里有这个语言的详细描述。从“词汇结构”,到“运算符和表达式”,和“选择查询语句”。
我们输入这个指标的 Metric SQL 查询语句。从所有的请求中选择客户端城市。按发送请求的城市进行分组。并对城市进行降序排列。只保留前 10 个城市。
select client_city, count(*) as count
from reqs
group by client_city
order by count desc
limit 10
保存这个指标。
保存成功。
测试
新的动态指标不需要单独的配置发布就会立即生效。现在来发送一些请求,看看它是如何工作的。
在终端上,我们登录到德国法兰克福市的一个远程服务器。
用 “curl” 命令行工具发送一个 HTTP 请求。
curl http://test-edge.com
退出服务器。
然后我们登录到美国圣何塞市的另一个服务器。
也发送一个请求。
curl http://test-edge.com
退出服务器。
现在登录到英国伦敦的第三台服务器上。这一次,我们将发送四个请求。
发送第一个请求。
curl http://test-edge.com
我们等待 10 秒,然后发送第二个和第三个。再过 10 秒后,发送第四个请求。
检查一下刚刚发送的所有请求。可以看到有一个请求来自法兰克福。
一个请求来自圣何塞。
四个请求来自伦敦。
数据也可以用饼状图显示。
也可以在折线图中显示。
这正是我们所期望的。
你可以点击这个按钮来显示这个动态指标的 Metric SQL 查询。
Metric SQL 语句在这里显示。
可以使用 “编辑” 按钮来编辑这个指标。
或者使用 “删除” 按钮将其删除。
如果你认为图表太小,请点击展开按钮。图表会在一个更大的窗口中显示。
我们可以显示不同时间间隔的指标,从 1 分钟到 1 年。
或者直接选择一个任意的时间区间。
点击关闭按钮,关闭这个大窗口。
这里也有时间范围选项。只是选项比较少。
当启用自动刷新时,指标会以我们之前指定的十秒钟的间隔自动更新。
“清除数据” 按钮是用来清除所有的历史数据并重新启动数据收集的。
基于 openresty.org 真实流量的动态指标
现在我们去看一些基于真实的流量的动态指标。以一个我们公司自己的正在使用 OpenResty Edge 的网站为例。
在搜索框中输入 openresty.org。
进入这个应用程序。
进入动态指标页面。
这里已经有许多自定义的动态指标了。数据以各种方式显示,如饼状图、柱状图和线状图。
这个看起来很有趣。它显示了按客户 IP 地址分组的所有请求。
点击这个按钮,看看该指标的 Metric SQL 语句是什么样的。
通过这个指标可以知道我们的网站是否遭遇到了 Denial-of-Service 的攻击。
来看看这个指标。它显示了北美地区发送请求最多的前 10 个国家。
点击查看 Metric SQL 语句。
下面是图表。
希望你觉得这些例子很有趣并且对你有所帮助。这就是我今天要讲的内容。
关于 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、LuaJIT、GDB、SystemTap、LLVM、Perl 等,并编写过 60 多个开源软件库。
关注我们
如果您喜欢本文,欢迎关注我们 OpenResty Inc. 公司的博客网站 。也欢迎扫码关注我们的微信公众号:
翻译
我们提供了英文版原文和中译版(本文) 。我们也欢迎读者提供其他语言的翻译版本,只要是全文翻译不带省略,我们都将会考虑采用,非常感谢!