1.0.1 • Published 11 months ago

@meeyi-opentelemetry/auto-instrumentations-voerka v1.0.1

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

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

// ...后略