适配 API 网关的 HTTP 请求示踪器,用于 Egg.js 框架。
在对外提供 Web 服务时,可能在线上环境出现偶发性的错误,为了方便排查问题,给所有的请求都提供一个唯一请求ID是一个不错的实践,开发者可以根据这个请求ID去相关日志中找寻对应的错误内容。
这个「唯一请求ID」(Unique Request ID)有的时候也叫「示踪ID」(trace ID),一个通俗的做法是使用 UUID 生成一个字符串,并在响应中附带该字符串。另外一些 Web 服务,会使用云厂商的 API 网关作为接入层,然后将请求转发到开发者自己的服务器上。此时我们往往希望使用 API 网关自带的请求ID作为示踪ID,本插件就是为了解决这个问题诞生的。
本插件完美适配 Egg.js 框架,只需要按照框架要求启用插件,可以零配置使用。
按照通用的方式使用 npm 下载安装到你的项目下即可,无需全局安装。
安装命令:
npm i egg-apigw-tracer
在使用前,请确保你已经阅读 Egg.js 框架关于插件的文档。
下面说明如何配置以及使用插件。
在 config/plugin.js
文件中中声明启用插件:
exports.tracer = {
// enable 属性表示是否启用插件,true 为启用,false 为禁用
enable: true,
// 指定插件使用的包,为 'egg-apigw-tracer'
package: 'egg-apigw-tracer',
};
本插件无需任何配置即可使用。但考虑到以下使用场景:
线上生产环境使用 API 网关做接入层,使用 API 网关自带的请求ID做示踪ID,但本地开发环境无该接入层,同时为了保持功能逻辑一致,也需要一个类似的示踪ID,因此使用 UUID 做示踪ID。
在 config/config.${env}.js
文件配置插件的使用方式(以下为默认配置):
exports.tracer = {
mode: 'apigw',
idHeaders: 'x-ca-request-id',
}
各配置项的含义是:
属性 | 类型 | 默认值 | 是否必填 | 说明 |
---|---|---|---|---|
mode | string | 'apigw' | 否 | 模式,使用 apigw 表示存在API 网关接入层,使用 uuid 表示使用 uuid 生成示踪ID |
idHeaders | string | 'x-ca-request-id' | 否 | 仅在使用apigw 模式下该设置项有效,表明从指定的请求头中获取requestId 用作示踪ID |
主要有 2 处使用场景,一是你可以直接通过 ctx.traceId
获取示踪ID,二是你使用 ctx.logger
打印日志时,框架会自动在日志前附上示踪ID,前缀格式为:[$userId/$ip/$traceId/${cost}ms $method $url]
,详情见 文档 。
我们模拟以下这个使用场景,来演示如何配置和使用本插件:
线上生产环境使用 阿里云 API 网关做接入层,本地开发测试未使用特定接入层。
在 config/plugin.js
文件中中声明启用插件:
exports.tracer = {
enable: true,
package: 'egg-apigw-tracer',
};
在 config.local.js
文件中配置内容为:
exports.tracer = {
mode: 'uuid',
}
在 config.prod.js
文件中配置内容为:
exports.tracer = {
mode: 'apigw',
}
我是 inlym ,一个产品经理和全栈开发者。
如果你有任何问题或者建议,欢迎联系我,以下是我的联系方式:
非常欢迎你能够参与这个项目的开发和维护。
你可以通过以下几种方式参与到项目中:
本插件使用 MIT 许可证。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. 开源生态
2. 协作、人、软件
3. 评估模型