在过去的几个月,社区用户为 Apache APISIX 添加了许多插件,丰富了 Apache APISIX 的生态。从使用者的角度而言,更多样化的插件出现无疑是一件好事,它们在完善 Apache APISIX 高性能和低延迟的基础之上,满足了使用者对于网关的更多期望,即 “一站式”和“多功能”。
社区的贡献者们是如何为 Apache APISIX 开发插件的呢?Apache APISIX 博客上的文章似乎都没有详细讲述过开发插件的流程。那么这次我们换一个视角,从插件开发者的角度出发,一起来看看一款插件诞生的全过程吧!
本篇文章记录了一个没有后端经验的前端工程师开发 file-logger
插件的过程。在详细说明实现过程之前,先向大家简单介绍下 file-logger
的功能。
功能介绍
file-logger
支持使用 Apache APISIX 插件元数据生成自定义的日志格式,用户可以通过 file-logger
插件将 JSON 格式的请求和响应数据附加到日志文件中,也可以将 Log 数据流推送到指定位置。
试想,在监控某一个路由的访问日志时,很多时候我们关注的不仅是某些请求和响应数据的值,还希望将日志数据单独写入到指定的文件中。这时就可以使用 file-logger
插件来帮忙实现这些需求。
不支持在 Docs 外粘贴 block
具体实现过程中我们可以通过 file-logger
将日志数据单独写入指定的日志文件,简化监控和调试的过程。
开发实现过程
介绍完 file-logger
的功能之后,大家也算对这个插件有了更多的认识。下面为大家详细讲解一下,没有服务端经验的我是如何从 0 开始为 Apache APISIX 完成该插件并添加相应测试的。
确定插件名称及优先级
打开 Apache APISIX 插件开发指南,按照先后顺序需要确定以下几项:
- 确定插件分类。
- 确定插件优先级,并更新
conf/config-default.yaml
文件。
因为此次开发的 file-logger
属于日志类型的插件,所以我参考了Apache APISIX 已有的日志插件的名称和排序,将 file-logger
放到了这里:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ccxmaesp-1644982750516)(https://tfzcfxawmk.feishu.cn/space/api/box/stream/download/asynccode/?code=YzY3MDllNzU1Mzc2YTViMjQzMWQ2YjczNmQyYjViZGRfVzhGY1U1QkhQQTNwZzBxSVhiRnByRVp3N2piaWxuMVZfVG9rZW46Ym94Y25qbzdaZmptOHo4RGVXWFJxSG5FNXhjXzE2NDQ5ODIzNTA6MTY0NDk4NTk1MF9WNA)]
咨询了其他插件的作者和社区的热心成员之后,最终确认了该插件的名称 file-logger
和优先级 399
。
需要注意,插件的优先级与执行顺序有关,优先级的值越大,执行越靠前。而插件名称的排序与执行顺序无关。
创建最小可执行插件文件
确认好插件名称和优先级后,便可在 apisix/plugins/
目录下创建我们的插件代码文件,这里有两点需要注意下:
-
如果是直接在
apisix/plugins/
目录下直接创建插件代码文件,就无需更改Makefile
文件。 -
如果你的插件有新建自己的代码目录,那么就需要更新
Makefile
文件,详细步骤可参考