1.0.0 • Published 11 months ago
@meeyi-opentelemetry/exporter-file v1.0.0
OTEL链路追踪数据文件导出器 opentelemetry-exporter-file
OTEL 是 OpenTelemetry 的官方缩写。
OTEL链路追踪数据文件导出器(opentelemetry-exporter-file)旨在提供符合 OTEL 规范的链路追踪数据(Span,跨度数据)导出到文件的功能。适用于现场不便部署链路追踪后端服务(如Jaeger)的场景。在这种场景下,可以启用导出文件功能,然后将数据文件传输到一个有链路追踪后端服务的环境进行使用。
安装
npm i --save @meeyi-opentelemetry/exporter-file
使用
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');
// 这是本模块
const { FileExporter } = require('@meeyi-opentelemetry/exporter-file');
// 这是一个内置的日志记录器,这里设定的是全部输出,可根据需要调整。
diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.ALL);
// ✨这是一个 fileExporter 用于输出跨度(span)到 文件✨
const traceExporter = new FileExporter({
// 导出时间间隔(毫秒)
interval: 5000,
// 导出文件目录
directory: 'data/tracer.dump',
// 导出文件保留个数
backups: 3,
// 导出文件最大大小(Byte)
maxSize: 512000000, // 500MB
});
// 这是一个 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: [
/*这里注入所需的采集器*/
],
tracerProvider, // 这里关联 TracerProvider
});
// 优雅地关闭 SDK,这里我们注册了两个信号处理器,分别在进程退出时关闭 SDK
process.on("SIGTERM", () => {
tracerProvider.shutdown()
.then(() => console.log('链路追踪已关闭'))
.catch((error) => console.log(`链路追踪关闭失败:${error.message}`))
.finally(() => process.exit(0));
});
1.0.0
11 months ago