@ogcio/o11y-sdk-node
Version:
Opentelemetry standard instrumentation SDK for NodeJS based project
66 lines (62 loc) • 2.18 kB
text/typescript
import { OTLPLogExporter } from "@opentelemetry/exporter-logs-otlp-grpc";
import { OTLPMetricExporter } from "@opentelemetry/exporter-metrics-otlp-grpc";
import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-grpc";
import { CompressionAlgorithm } from "@opentelemetry/otlp-exporter-base";
import { metrics } from "@opentelemetry/sdk-node";
import { NodeSDKConfig } from "../index.js";
import { LogRecordProcessorMap, SpanProcessorMap } from "../utils.js";
import {
_logsProcessorConfig,
_spansProcessorConfig,
} from "./processor-config.js";
import { Exporters } from "./index.js";
import { getNodeSdkConfig } from "../config-manager.js";
import { PIIExporterDecorator } from "./pii-exporter-decorator.js";
async function defaultMetadata() {
const { Metadata } = await import("@grpc/grpc-js");
return new Metadata({
waitForReady: true,
});
}
export default async function buildGrpcExporters(
config: NodeSDKConfig,
): Promise<Exporters> {
return {
spans: [
new SpanProcessorMap[config.collectorMode ?? "batch"](
new PIIExporterDecorator(
new OTLPTraceExporter({
url: `${config.collectorUrl}`,
compression: CompressionAlgorithm.GZIP,
metadata: config.grpcMetadata ?? (await defaultMetadata()),
}),
getNodeSdkConfig(),
),
),
..._spansProcessorConfig(config),
],
metrics: new metrics.PeriodicExportingMetricReader({
exporter: new PIIExporterDecorator(
new OTLPMetricExporter({
url: `${config.collectorUrl}`,
compression: CompressionAlgorithm.GZIP,
metadata: config.grpcMetadata ?? (await defaultMetadata()),
}),
getNodeSdkConfig(),
),
}),
logs: [
..._logsProcessorConfig(config),
new LogRecordProcessorMap[config.collectorMode ?? "batch"](
new PIIExporterDecorator(
new OTLPLogExporter({
url: `${config.collectorUrl}`,
compression: CompressionAlgorithm.GZIP,
metadata: config.grpcMetadata ?? (await defaultMetadata()),
}),
getNodeSdkConfig(),
),
),
],
};
}