1 Star 2 Fork 0

inlym / egg-apigw-tracer

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

egg-apigw-tracer

npm version MIT npm star

egg-apigw-tracer-image

适配 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',
}

相关

  • egg-aliyun-tablestore —— (推荐)阿里云表格存储(Tablestore)插件,用于 Egg.js 框架
  • egg-load —— (推荐)自动装载第三方模块至 Egg.js 框架上
  • egg-user —— (推荐)用户登录、退出登录等状态管理插件,用于 Egg.js 框架
  • egg-miniprogram —— (推荐)微信小程序服务端工具集,用于 Egg.js 框架

作者

我是 inlym ,一个产品经理和全栈开发者。

如果你有任何问题或者建议,欢迎联系我,以下是我的联系方式:

参与

非常欢迎你能够参与这个项目的开发和维护。

你可以通过以下几种方式参与到项目中:

  1. 提建议和需求。对于几句话就能说清楚的建议和需求,你可以直接 提一个 New Issue
  2. 直接 Fork 整个项目,改完后提交合并请求。(提交前请检查务必通过 ESLint 检查)

许可证

本插件使用 MIT 许可证。

MIT License Copyright (c) 2020 inlym Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

⚡ 适配 API 网关的 HTTP 请求示踪器,用于 Egg.js 框架 展开 收起
NodeJS
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
NodeJS
1
https://gitee.com/inlym/egg-apigw-tracer.git
git@gitee.com:inlym/egg-apigw-tracer.git
inlym
egg-apigw-tracer
egg-apigw-tracer
master

搜索帮助