1.0.1 • Published 11 months ago
@meeyi-opentelemetry/auto-instrumentations-voerka v1.0.1
Voerka 自动链路追踪器 auto-instrumentations-voerka
链路追踪 等同于 链路数据采集。
Voerka 自动链路追踪器(auto-instrumentations-voerka)旨在提供自动化(零配置)地进行链路追踪的仪器,以便在 Voerka 平台上进行链路追踪。同时,结合插件,支持将数据导出到控制台、Jaeger、文本文件等。
安装
npm i --save @meeyi-opentelemetry/auto-instrumentations-voerka
使用
案例1:追踪并导出到控制台
const process = require('process');
// 这些是所需依赖的 @opentelemetry API、SDK、方法、对象。
const { diag, DiagConsoleLogger, DiagLogLevel } = require('@opentelemetry/api');
const { registerInstrumentations } = require('@opentelemetry/instrumentation');
const { Resource } = require('@opentelemetry/resources');
const { SemanticResourceAttributes } = require('@opentelemetry/semantic-conventions');
// 这里是本模块(@meeyi-opentelemetry/auto-instrumentations-voerka)。
const { getVoerkaAutoInstrumentations } = require('@meeyi-opentelemetry/auto-instrumentations-voerka');
// 这里是所需依赖的插件(控制台导出器)。
const { ConsoleSpanExporter } = require('@opentelemetry/sdk-trace-base');
// 这是一个内置的日志记录器,这里设定的是全部输出,可根据需要调整。
diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.ALL);
// 这是一个 ConsoleSpanExporter 用于输出跨度(span)到控制台
const traceExporter = new ConsoleSpanExporter();
// 这是一个 NodeTracerProvider 用于创建跟踪器(tracer)
const tracerProvider = new NodeTracerProvider({
resource: new Resource({
[SemanticResourceAttributes.SERVICE_NAME]: "voerka-service-usewith-nodetracesdk-example",
}),
});
// 将跨度(span)处理器(span processor)添加到跟踪器(tracer)提供器(provider)中
// 即:SpanProcessor(处理方式:导出到控制台) 添加到 TracerProvider
tracerProvider.addSpanProcessor(new SimpleSpanProcessor(traceExporter));
// 将跟踪器(tracer)提供器(provider)注册到 OpenTelemetry API 中
// 即:TracerProvider 注册到 OpenTelemetry API
tracerProvider.register();
// 将检测器(instrumentations)注册到 OpenTelemetry API 中
// 即:Instrumentations 注册到 OpenTelemetry API,并关联 TracerProvider
registerInstrumentations({
instrumentations: [
getVoerkaAutoInstrumentations({/*✨零配置✨*/}), // 这是本模块,零配置使用
],
tracerProvider, // 这里关联 TracerProvider
});
// 优雅地关闭 SDK,这里我们注册了两个信号处理器,分别在进程退出时关闭 SDK
process.on("SIGTERM", () => {
tracerProvider.shutdown()
.then(() => console.log('链路追踪已关闭'))
.catch((error) => console.log(`链路追踪关闭失败:${error.message}`))
.finally(() => process.exit(0));
});
案例2:追踪并导出到 Jaeger
需要先安装 Jaeger 导出器:
npm i --save @opentelemetry/exporter-jaeger
// 同案例1代码,只是 traceExporter 换成 JaegerExporter
// ...前略
const { JaegerExporter } = require('@opentelemetry/exporter-jaeger');
// 这是一个 JaegerExporter 用于输出跨度(span)到 Jaeger
const traceExporter = new JaegerExporter({
// 设定输出加标签,以便过滤
tags: [],
// 设定输出目标 Jaeger UDP 的地址和端口
host: "192.168.111.199",
port: 6832,
// 或者设定输出目标 Jaeger HTTP 的 URL
// endpoint: 'http://localhost:16686/api/traces',
// 设定输出的最大包大小
maxPacketSize: 65000,
});
// ...后略
案例3:追踪并导出到文本文件
需要先安装文件导出器:
npm i --save @meeyi-opentelemetry/exporter-file
// 同案例1代码,只是 traceExporter 换成 FileExporter
// ...前略
const { FileExporter } = require('@meeyi-opentelemetry/exporter-file');
// 这是一个 fileExporter 用于输出跨度(span)到 文件
const traceExporter = new FileExporter({
// 导出时间间隔(毫秒)
interval: 5000,
// 导出文件目录
directory: 'data/tracer.dump',
// 导出文件保留个数
backups: 3,
// 导出文件最大大小(Byte)
maxSize: 512000000, // 500MB
});
// ...后略