哈皮追踪
Hapi Tracking是一个Hapi插件,用于在请求的生命周期中提供选定的信头,而无需 手动将它们或请求对象传递到每个呼叫中. 主要用途是宣传追踪信头,以便登入并传送到 其他电话.
这有什么用
Hapi Track被注册为插件. 应通过插件的选项提供特定的追踪头.
如果收到带有特定跟踪头的HTTP请求,则一旦登记,将提取头的值,
存储于 本地同步组件 并在整个请求期间提供.
帮助函数 getTraceId() 提供对跟踪信头值的访问,而无需通过请求
对象跨越多个调用.
这不起作用
- 自动将跟踪ID转发到其他 HTTP 呼叫
- 自动日志跟踪ID
为支持这一点而建造的,将来可能会被添加.
安装
npm install @defra/hapi-tracing
使用量
图书馆由两部分组成:
- Hapi 插件
- 这个
getTraceId()财务报告和审定财务报表withTraceId帮助者
注册插件
作为创建服务器的一部分,注册capi追踪插件.
import { tracing } from '@defra/hapi-tracing'
await server.register({
plugin: tracing.plugin,
options: { tracingHeader: 'x-your-trace-id' }
})
一旦注册,你就可以打电话 getTraceId() 在控制器内返回信头的值,如果是的话
已经传入.
例如:
import { getTraceId } from '@defra/hapi-tracing'
const healthController = {
handler: (request, h) => {
return h.response({ message: `trace-id is ${getTraceId()}` }).code(200)
}
}
要求 getTraceId() 不需要来自控制器。 从控制器调用的任何功能,
直接或间接可以使用.
import { getTraceId } from '@defra/hapi-tracing'
const healthController = {
handler: (request, h) => {
doSomething()
return h.response().code(200)
}
}
const doSomething = () => {
doSomethingElse()
}
const doSomethingElse = () => {
console.log(`trace-id is still ${getTraceId()}`)
}
常见使用案例
作宣说头.
要追踪多个服务的请求, 您需要将追踪头转到其他通话中 作为请求的一部分.
举例来说,我们将使用节点:牵引。 不同的 HTTP 客户端可能对设置头有不同的 API , 但是 这一概念应该是一样的.
这个 hapi-tracing 软件包包括一个 withTraceId 使用跟踪头和对象名称的帮助
包含现有标题.
如果已设定了微量线标, 它会返回带有微量线标头和增加值的原始标题对象 。 如果
trackId没有设置,然后原始标题对象会被返回未修改.
import { withTraceId } from '@defra/hapi-tracing'
async function getSomething() {
return await fetch('http://localhost:8080/test', {
method: 'get',
headers: withTraceId('x-your-trace-id', {
'Content-Type': 'application/json',
'x-some-other-header': '1234'
})
})
}
登录信头
一些日志将自动包含原始的 HTTP 请求,其中将包括跟踪头以及任何其他 未编辑的页眉 . 举个例子,我们将使用皮诺 与ECS 物质作为我们的记录器.
export const loggerOptions = {
enabled: logConfig.enabled,
level: 'info', // other setup
nesting: true,
mixin: () => {
const mixinValues = {}
const traceId = getTraceId()
if (traceId) {
mixinValues.trace = { id: traceId }
}
return mixinValues
}
}
// elsewhere
const logger = pino(loggerOptions)
这将设定在 trace.id 字段在结构日志中.