Skip to content

Commit 410f1ef

Browse files
joinedclaude
andcommitted
Disable OTLP metrics export
Removes metric exporter, reader, and instruments while keeping noop stubs so call sites continue to compile. Traces and logs remain active. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent fb6a58a commit 410f1ef

3 files changed

Lines changed: 4 additions & 47 deletions

File tree

bun.lock

Lines changed: 0 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,9 @@
1717
"@opentelemetry/api": "^1.9.0",
1818
"@opentelemetry/api-logs": "^0.213.0",
1919
"@opentelemetry/exporter-logs-otlp-http": "^0.213.0",
20-
"@opentelemetry/exporter-metrics-otlp-http": "^0.213.0",
2120
"@opentelemetry/exporter-trace-otlp-http": "^0.213.0",
2221
"@opentelemetry/resources": "^2.6.0",
2322
"@opentelemetry/sdk-logs": "^0.213.0",
24-
"@opentelemetry/sdk-metrics": "^2.6.0",
2523
"@opentelemetry/sdk-node": "^0.213.0",
2624
"@opentelemetry/semantic-conventions": "^1.40.0",
2725
"@scalar/fastify-api-reference": "^1.48.7",

src/observability.ts

Lines changed: 4 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import type { Span } from "@opentelemetry/api";
22
import {
3-
metrics,
43
propagation,
54
ROOT_CONTEXT,
65
SpanKind,
@@ -9,11 +8,9 @@ import {
98
} from "@opentelemetry/api";
109
import { logs, SeverityNumber } from "@opentelemetry/api-logs";
1110
import { OTLPLogExporter } from "@opentelemetry/exporter-logs-otlp-http";
12-
import { OTLPMetricExporter } from "@opentelemetry/exporter-metrics-otlp-http";
1311
import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http";
1412
import { resourceFromAttributes } from "@opentelemetry/resources";
1513
import { BatchLogRecordProcessor } from "@opentelemetry/sdk-logs";
16-
import { PeriodicExportingMetricReader } from "@opentelemetry/sdk-metrics";
1714
import { NodeSDK } from "@opentelemetry/sdk-node";
1815
import {
1916
ATTR_SERVICE_NAME,
@@ -45,9 +42,9 @@ const noopHistogram: HistogramLike = {
4542
record: () => {},
4643
};
4744

48-
let httpRequestsTotal: CounterLike = noopCounter;
49-
let httpRequestDurationMs: HistogramLike = noopHistogram;
50-
let cacheLookupsTotal: CounterLike = noopCounter;
45+
const httpRequestsTotal: CounterLike = noopCounter;
46+
const httpRequestDurationMs: HistogramLike = noopHistogram;
47+
const cacheLookupsTotal: CounterLike = noopCounter;
5148

5249
const requestStarts = new WeakMap<FastifyRequest, bigint>();
5350
const requestSpans = new WeakMap<FastifyRequest, Span>();
@@ -143,16 +140,12 @@ function toMilliseconds(start: bigint): number {
143140
return Number(process.hrtime.bigint() - start) / 1_000_000;
144141
}
145142

146-
function buildSignalUrl(
147-
endpoint: string,
148-
signal: "traces" | "metrics" | "logs",
149-
): string {
143+
function buildSignalUrl(endpoint: string, signal: "traces" | "logs"): string {
150144
const normalized = endpoint.endsWith("/")
151145
? endpoint.slice(0, -1)
152146
: endpoint;
153147
const withoutSignalPath = normalized
154148
.replace(/\/v1\/traces$/, "")
155-
.replace(/\/v1\/metrics$/, "")
156149
.replace(/\/v1\/logs$/, "");
157150
return `${withoutSignalPath}/v1/${signal}`;
158151
}
@@ -182,26 +175,6 @@ function parseOtlpHeaders(raw?: string): Record<string, string> {
182175
return headers;
183176
}
184177

185-
function initializeMetricInstruments(): void {
186-
const meter = metrics.getMeter("esptransit-server", SERVICE_VERSION);
187-
188-
httpRequestsTotal = meter.createCounter("esptransit_http_requests_total", {
189-
description: "Total HTTP requests handled by the ESPTransit server.",
190-
});
191-
192-
httpRequestDurationMs = meter.createHistogram(
193-
"esptransit_http_request_duration_ms",
194-
{
195-
description: "HTTP request duration in milliseconds.",
196-
unit: "ms",
197-
},
198-
);
199-
200-
cacheLookupsTotal = meter.createCounter("esptransit_cache_lookups_total", {
201-
description: "Cache lookup outcomes per route.",
202-
});
203-
}
204-
205178
export function startObservability(
206179
config: ObservabilityConfig,
207180
): ObservabilityHandle {
@@ -234,22 +207,12 @@ export function startObservability(
234207
headers,
235208
timeoutMillis: config.exportTimeoutMs,
236209
});
237-
const metricExporter = new OTLPMetricExporter({
238-
url: buildSignalUrl(endpoint, "metrics"),
239-
headers,
240-
timeoutMillis: config.exportTimeoutMs,
241-
});
242210
const logExporter = new OTLPLogExporter({
243211
url: buildSignalUrl(endpoint, "logs"),
244212
headers,
245213
timeoutMillis: config.exportTimeoutMs,
246214
});
247215
const logRecordProcessor = new BatchLogRecordProcessor(logExporter);
248-
const metricReader = new PeriodicExportingMetricReader({
249-
exporter: metricExporter,
250-
exportIntervalMillis: config.exportIntervalMs,
251-
exportTimeoutMillis: config.exportTimeoutMs,
252-
});
253216

254217
const resourceAttributes: Record<string, string> = {
255218
[ATTR_SERVICE_NAME]: config.serviceName,
@@ -264,13 +227,11 @@ export function startObservability(
264227
const sdk = new NodeSDK({
265228
resource: resourceFromAttributes(resourceAttributes),
266229
traceExporter,
267-
metricReaders: [metricReader],
268230
logRecordProcessors: [logRecordProcessor],
269231
});
270232

271233
try {
272234
sdk.start();
273-
initializeMetricInstruments();
274235
logInfo(`[otel] enabled endpoint=${endpoint} logs=enabled`);
275236
return {
276237
enabled: true,

0 commit comments

Comments
 (0)