1.0.0 • Published 11 months ago

@meeyi-opentelemetry/exporter-file v1.0.0

Weekly downloads
-
License
ISC
Repository
-
Last release
11 months ago

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));
});