@manifest-cyber/observability-ts 0.2.11 → 0.2.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +67 -0
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -5
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +39 -0
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +70 -1
- package/dist/init.js.map +1 -1
- package/dist/metrics/builders.d.ts +46 -155
- package/dist/metrics/builders.d.ts.map +1 -1
- package/dist/metrics/builders.js +207 -260
- package/dist/metrics/builders.js.map +1 -1
- package/dist/metrics/index.d.ts +5 -5
- package/dist/metrics/index.d.ts.map +1 -1
- package/dist/metrics/index.js +9 -7
- package/dist/metrics/index.js.map +1 -1
- package/dist/metrics/instrumentation.d.ts +9 -9
- package/dist/metrics/instrumentation.d.ts.map +1 -1
- package/dist/metrics/instrumentation.js.map +1 -1
- package/dist/metrics/provider.d.ts +98 -0
- package/dist/metrics/provider.d.ts.map +1 -0
- package/dist/metrics/provider.js +462 -0
- package/dist/metrics/provider.js.map +1 -0
- package/dist/metrics/server.d.ts +1 -1
- package/dist/metrics/server.d.ts.map +1 -1
- package/dist/metrics/server.js +52 -15
- package/dist/metrics/server.js.map +1 -1
- package/dist/tracing/setup.d.ts.map +1 -1
- package/dist/tracing/setup.js +77 -29
- package/dist/tracing/setup.js.map +1 -1
- package/package.json +34 -26
- package/dist/metrics/registry.d.ts +0 -36
- package/dist/metrics/registry.d.ts.map +0 -1
- package/dist/metrics/registry.js +0 -48
- package/dist/metrics/registry.js.map +0 -1
|
@@ -0,0 +1,462 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.initMetricsProvider = initMetricsProvider;
|
|
37
|
+
exports.getSharedMeterProvider = getSharedMeterProvider;
|
|
38
|
+
exports.getSharedResource = getSharedResource;
|
|
39
|
+
exports.getSharedPrometheusExporter = getSharedPrometheusExporter;
|
|
40
|
+
exports.getMeter = getMeter;
|
|
41
|
+
const api_1 = require("@opentelemetry/api");
|
|
42
|
+
const sdk_metrics_1 = require("@opentelemetry/sdk-metrics");
|
|
43
|
+
const resources_1 = require("@opentelemetry/resources");
|
|
44
|
+
const semantic_conventions_1 = require("@opentelemetry/semantic-conventions");
|
|
45
|
+
/** All valid auto-instrumentation keys for validation */
|
|
46
|
+
const VALID_AUTO_INSTRUMENT_KEYS = [
|
|
47
|
+
'http',
|
|
48
|
+
'express',
|
|
49
|
+
'fetch',
|
|
50
|
+
'grpc',
|
|
51
|
+
'mongo',
|
|
52
|
+
'mongoose',
|
|
53
|
+
'mysql',
|
|
54
|
+
'pg',
|
|
55
|
+
'redis',
|
|
56
|
+
'aws-sdk',
|
|
57
|
+
];
|
|
58
|
+
let sharedMeterProvider;
|
|
59
|
+
let sharedResource;
|
|
60
|
+
let sharedPrometheusExporter;
|
|
61
|
+
async function initMetricsProvider(options = {}) {
|
|
62
|
+
const logger = options.logger;
|
|
63
|
+
const enabled = options.enabled ?? process.env.OTEL_METRICS_ENABLED !== 'false';
|
|
64
|
+
if (!enabled) {
|
|
65
|
+
logger?.info?.('[metrics] Metrics disabled');
|
|
66
|
+
return {
|
|
67
|
+
exporterType: 'none',
|
|
68
|
+
shutdown: async () => undefined,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
// Cleanup any existing provider before creating a new one
|
|
72
|
+
if (sharedMeterProvider) {
|
|
73
|
+
logger?.debug?.('[metrics] Shutting down existing MeterProvider before reinitializing');
|
|
74
|
+
await sharedMeterProvider.shutdown().catch(() => undefined);
|
|
75
|
+
}
|
|
76
|
+
sharedMeterProvider = undefined;
|
|
77
|
+
sharedResource = undefined;
|
|
78
|
+
sharedPrometheusExporter = undefined;
|
|
79
|
+
const exporterType = resolveExporter(options, logger);
|
|
80
|
+
const resource = (0, resources_1.resourceFromAttributes)({
|
|
81
|
+
[semantic_conventions_1.ATTR_SERVICE_NAME]: options.serviceName || process.env.SERVICE_NAME || 'unknown-service',
|
|
82
|
+
'deployment.environment': options.environment || process.env.ENV || 'development',
|
|
83
|
+
...options.resourceAttributes,
|
|
84
|
+
});
|
|
85
|
+
let prometheusUrl;
|
|
86
|
+
let prometheusExporter;
|
|
87
|
+
const readers = [];
|
|
88
|
+
if (exporterType === 'prometheus') {
|
|
89
|
+
const prom = await createPrometheusExporter(options, logger);
|
|
90
|
+
if (prom) {
|
|
91
|
+
// PrometheusExporter implements MetricReader but types don't align perfectly
|
|
92
|
+
readers.push(prom.reader);
|
|
93
|
+
prometheusUrl = prom.url;
|
|
94
|
+
prometheusExporter = prom.reader;
|
|
95
|
+
sharedPrometheusExporter = prom.reader;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
else if (exporterType === 'otlp-grpc' || exporterType === 'otlp-http') {
|
|
99
|
+
const periodicReader = await createOtlpReader(exporterType, options, logger);
|
|
100
|
+
if (periodicReader) {
|
|
101
|
+
readers.push(periodicReader);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
const meterProviderOptions = { resource, readers };
|
|
105
|
+
const meterProvider = new sdk_metrics_1.MeterProvider(meterProviderOptions);
|
|
106
|
+
api_1.metrics.setGlobalMeterProvider(meterProvider);
|
|
107
|
+
sharedMeterProvider = meterProvider;
|
|
108
|
+
sharedResource = resource;
|
|
109
|
+
if (options.enableRuntimeMetrics ?? true) {
|
|
110
|
+
await maybeEnableRuntimeMetrics(meterProvider, logger);
|
|
111
|
+
}
|
|
112
|
+
await maybeEnableAutoInstrumentation(meterProvider, options, logger);
|
|
113
|
+
return {
|
|
114
|
+
meterProvider,
|
|
115
|
+
exporterType,
|
|
116
|
+
prometheusUrl,
|
|
117
|
+
prometheusExporter,
|
|
118
|
+
shutdown: async () => {
|
|
119
|
+
await meterProvider.shutdown().catch(() => undefined);
|
|
120
|
+
// Clear shared singletons to prevent stale references
|
|
121
|
+
sharedMeterProvider = undefined;
|
|
122
|
+
sharedResource = undefined;
|
|
123
|
+
sharedPrometheusExporter = undefined;
|
|
124
|
+
},
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
function resolveExporter(options, logger) {
|
|
128
|
+
const validExporters = ['otlp-grpc', 'otlp-http', 'prometheus', 'none'];
|
|
129
|
+
const fromEnv = process.env.OTEL_METRICS_EXPORTER;
|
|
130
|
+
if (fromEnv) {
|
|
131
|
+
if (validExporters.includes(fromEnv)) {
|
|
132
|
+
return fromEnv;
|
|
133
|
+
}
|
|
134
|
+
const message = `[metrics] Invalid OTEL_METRICS_EXPORTER value: '${fromEnv}'. ` +
|
|
135
|
+
`Valid values: ${validExporters.join(', ')}. Falling back to default.`;
|
|
136
|
+
(logger?.warn ?? console.warn)(message);
|
|
137
|
+
}
|
|
138
|
+
if (options.exporter) {
|
|
139
|
+
if (validExporters.includes(options.exporter)) {
|
|
140
|
+
return options.exporter;
|
|
141
|
+
}
|
|
142
|
+
const message = `[metrics] Invalid exporter option: '${options.exporter}'. ` +
|
|
143
|
+
`Valid values: ${validExporters.join(', ')}. Falling back to default.`;
|
|
144
|
+
(logger?.warn ?? console.warn)(message);
|
|
145
|
+
}
|
|
146
|
+
return 'otlp-grpc';
|
|
147
|
+
}
|
|
148
|
+
async function createOtlpReader(exporterType, options, logger) {
|
|
149
|
+
try {
|
|
150
|
+
const { PeriodicExportingMetricReader } = await Promise.resolve().then(() => __importStar(require('@opentelemetry/sdk-metrics')));
|
|
151
|
+
const otlpEndpoint = options.otlpEndpoint ||
|
|
152
|
+
process.env.OTEL_EXPORTER_OTLP_ENDPOINT ||
|
|
153
|
+
(exporterType === 'otlp-grpc'
|
|
154
|
+
? 'http://localhost:4317'
|
|
155
|
+
: 'http://localhost:4318/v1/metrics');
|
|
156
|
+
const exporter = exporterType === 'otlp-grpc'
|
|
157
|
+
? await createOtlpGrpcExporter(otlpEndpoint, logger)
|
|
158
|
+
: await createOtlpHttpExporter(otlpEndpoint, logger);
|
|
159
|
+
if (!exporter)
|
|
160
|
+
return undefined;
|
|
161
|
+
return new PeriodicExportingMetricReader({
|
|
162
|
+
exporter,
|
|
163
|
+
exportIntervalMillis: options.exportIntervalMillis ?? 60000,
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
catch (error) {
|
|
167
|
+
logger?.error?.('[metrics] Failed to create OTLP metric reader', error);
|
|
168
|
+
return undefined;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
async function createOtlpGrpcExporter(endpoint, logger) {
|
|
172
|
+
try {
|
|
173
|
+
const { OTLPMetricExporter } = await Promise.resolve().then(() => __importStar(require('@opentelemetry/exporter-metrics-otlp-grpc')));
|
|
174
|
+
return new OTLPMetricExporter({ url: endpoint });
|
|
175
|
+
}
|
|
176
|
+
catch (error) {
|
|
177
|
+
logger?.error?.('[metrics] Failed to load OTLP gRPC metrics exporter', error);
|
|
178
|
+
return undefined;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
async function createOtlpHttpExporter(endpoint, logger) {
|
|
182
|
+
try {
|
|
183
|
+
const { OTLPMetricExporter } = await Promise.resolve().then(() => __importStar(require('@opentelemetry/exporter-metrics-otlp-http')));
|
|
184
|
+
return new OTLPMetricExporter({ url: endpoint });
|
|
185
|
+
}
|
|
186
|
+
catch (error) {
|
|
187
|
+
logger?.error?.('[metrics] Failed to load OTLP HTTP metrics exporter', error);
|
|
188
|
+
return undefined;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
async function createPrometheusExporter(options, logger) {
|
|
192
|
+
try {
|
|
193
|
+
const { PrometheusExporter } = await Promise.resolve().then(() => __importStar(require('@opentelemetry/exporter-prometheus')));
|
|
194
|
+
const port = options.prometheusPort ?? parseInt(process.env.OTEL_PROMETHEUS_PORT || '9464', 10);
|
|
195
|
+
const endpoint = options.prometheusEndpoint || process.env.OTEL_PROMETHEUS_ENDPOINT || '/metrics';
|
|
196
|
+
const disableServer = options.prometheusDisableServer ??
|
|
197
|
+
process.env.OTEL_PROMETHEUS_DISABLE_SERVER === 'true';
|
|
198
|
+
const exporter = new PrometheusExporter({
|
|
199
|
+
port,
|
|
200
|
+
endpoint,
|
|
201
|
+
preventServerStart: disableServer,
|
|
202
|
+
});
|
|
203
|
+
let url;
|
|
204
|
+
if (!disableServer) {
|
|
205
|
+
await exporter.startServer();
|
|
206
|
+
// Log with localhost instead of 0.0.0.0 for client-accessible URL
|
|
207
|
+
const clientUrl = `http://localhost:${port}${endpoint}`;
|
|
208
|
+
url = `http://0.0.0.0:${port}${endpoint}`;
|
|
209
|
+
logger?.info?.(`[metrics] Prometheus exporter listening at ${clientUrl}`);
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
logger?.info?.('[metrics] Prometheus exporter created without server; attach handler to existing server');
|
|
213
|
+
}
|
|
214
|
+
return { reader: exporter, url };
|
|
215
|
+
}
|
|
216
|
+
catch (error) {
|
|
217
|
+
logger?.error?.('[metrics] Failed to start Prometheus exporter', error);
|
|
218
|
+
return undefined;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
function getSharedMeterProvider() {
|
|
222
|
+
return sharedMeterProvider;
|
|
223
|
+
}
|
|
224
|
+
function getSharedResource() {
|
|
225
|
+
return sharedResource;
|
|
226
|
+
}
|
|
227
|
+
function getSharedPrometheusExporter() {
|
|
228
|
+
return sharedPrometheusExporter;
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Get a Meter instance from the shared MeterProvider.
|
|
232
|
+
*
|
|
233
|
+
* @throws Error if metrics provider has not been initialized
|
|
234
|
+
* @param name Optional meter name (default: 'default')
|
|
235
|
+
*/
|
|
236
|
+
function getMeter(name = 'default') {
|
|
237
|
+
if (!sharedMeterProvider) {
|
|
238
|
+
throw new Error('Metrics provider not initialized - call initMetricsProvider() before getMeter()');
|
|
239
|
+
}
|
|
240
|
+
return sharedMeterProvider.getMeter(name);
|
|
241
|
+
}
|
|
242
|
+
async function maybeEnableRuntimeMetrics(meterProvider, logger) {
|
|
243
|
+
const enabledMetrics = [];
|
|
244
|
+
// Try to enable host metrics (CPU, memory, network, etc.)
|
|
245
|
+
try {
|
|
246
|
+
const { HostMetrics } = await Promise.resolve().then(() => __importStar(require('@opentelemetry/host-metrics')));
|
|
247
|
+
const hostMetrics = new HostMetrics({ meterProvider });
|
|
248
|
+
hostMetrics.start();
|
|
249
|
+
enabledMetrics.push('host');
|
|
250
|
+
}
|
|
251
|
+
catch (_err) {
|
|
252
|
+
logger?.debug?.('[metrics] @opentelemetry/host-metrics not installed; skipping host metrics');
|
|
253
|
+
}
|
|
254
|
+
// Try to enable runtime metrics (event loop, GC, heap, etc.)
|
|
255
|
+
try {
|
|
256
|
+
const { RuntimeNodeInstrumentation } = await Promise.resolve().then(() => __importStar(require('@opentelemetry/instrumentation-runtime-node')));
|
|
257
|
+
const runtimeMetrics = new RuntimeNodeInstrumentation();
|
|
258
|
+
runtimeMetrics.setMeterProvider(meterProvider);
|
|
259
|
+
enabledMetrics.push('runtime');
|
|
260
|
+
}
|
|
261
|
+
catch (_err) {
|
|
262
|
+
logger?.debug?.('[metrics] @opentelemetry/instrumentation-runtime-node not installed; skipping runtime metrics');
|
|
263
|
+
}
|
|
264
|
+
if (enabledMetrics.length > 0) {
|
|
265
|
+
logger?.info?.(`[metrics] Enabled metrics: ${enabledMetrics.join(', ')}`);
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
logger?.debug?.('[metrics] No runtime/host metrics packages installed. Install @opentelemetry/host-metrics and/or @opentelemetry/instrumentation-runtime-node for automatic metrics.');
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Enable auto-instrumentation based on the provided selection.
|
|
273
|
+
*
|
|
274
|
+
* **IMPORTANT**: OpenTelemetry instrumentations primarily emit spans (traces), not metrics.
|
|
275
|
+
* Only a MeterProvider is registered here. For span instrumentation to work, a TracerProvider
|
|
276
|
+
* must be configured and registered separately (e.g., using initTracing from this package).
|
|
277
|
+
* Without a TracerProvider, span-producing instrumentations will be no-ops.
|
|
278
|
+
*/
|
|
279
|
+
async function maybeEnableAutoInstrumentation(meterProvider, options, logger) {
|
|
280
|
+
const selection = resolveAutoInstrumentSelection(options, logger);
|
|
281
|
+
if (!selection.length) {
|
|
282
|
+
logger?.debug?.('[metrics] No auto-instrumentation requested');
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
285
|
+
logger?.debug?.(`[metrics] Attempting auto-instrumentation for: ${selection.join(', ')}`);
|
|
286
|
+
try {
|
|
287
|
+
const { registerInstrumentations } = await Promise.resolve().then(() => __importStar(require('@opentelemetry/instrumentation')));
|
|
288
|
+
const instrumentations = [];
|
|
289
|
+
for (const key of selection) {
|
|
290
|
+
const instrumentation = await loadInstrumentation(key, logger);
|
|
291
|
+
if (instrumentation) {
|
|
292
|
+
instrumentations.push(instrumentation);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
if (instrumentations.length === 0) {
|
|
296
|
+
logger?.warn?.('[metrics] No instrumentation packages found. Install the required packages:\n' +
|
|
297
|
+
selection.map((k) => ` - ${getPackageNameForKey(k)}`).join('\n'));
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
300
|
+
// Register instrumentations with MeterProvider only.
|
|
301
|
+
// Note: Most instrumentations emit spans, which require a TracerProvider to be registered separately.
|
|
302
|
+
registerInstrumentations({
|
|
303
|
+
meterProvider,
|
|
304
|
+
instrumentations,
|
|
305
|
+
});
|
|
306
|
+
logger?.info?.(`[metrics] Auto-instrumentation enabled for: ${instrumentations
|
|
307
|
+
.map((i) => i.constructor?.name || 'unknown')
|
|
308
|
+
.join(', ')}`);
|
|
309
|
+
}
|
|
310
|
+
catch (_err) {
|
|
311
|
+
logger?.warn?.('[metrics] @opentelemetry/instrumentation not installed; skipping auto-instrumentation');
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Get the npm package name for an instrumentation key (for helpful error messages)
|
|
316
|
+
*/
|
|
317
|
+
function getPackageNameForKey(key) {
|
|
318
|
+
const packageMap = {
|
|
319
|
+
http: '@opentelemetry/instrumentation-http',
|
|
320
|
+
express: '@opentelemetry/instrumentation-express',
|
|
321
|
+
fetch: '@opentelemetry/instrumentation-undici or @opentelemetry/instrumentation-fetch',
|
|
322
|
+
grpc: '@opentelemetry/instrumentation-grpc',
|
|
323
|
+
mongo: '@opentelemetry/instrumentation-mongodb',
|
|
324
|
+
mongoose: '@opentelemetry/instrumentation-mongoose',
|
|
325
|
+
mysql: '@opentelemetry/instrumentation-mysql',
|
|
326
|
+
pg: '@opentelemetry/instrumentation-pg',
|
|
327
|
+
redis: '@opentelemetry/instrumentation-redis',
|
|
328
|
+
'aws-sdk': '@opentelemetry/instrumentation-aws-sdk',
|
|
329
|
+
};
|
|
330
|
+
return packageMap[key] || `@opentelemetry/instrumentation-${key}`;
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Resolve which auto-instrumentations to enable.
|
|
334
|
+
*
|
|
335
|
+
* Priority:
|
|
336
|
+
* 1. Environment variable OTEL_METRICS_AUTO_INSTRUMENT (comma-separated)
|
|
337
|
+
* 2. Explicit options.autoInstrument config
|
|
338
|
+
* 3. Empty array (no defaults - explicit opt-in only)
|
|
339
|
+
*/
|
|
340
|
+
function resolveAutoInstrumentSelection(options, logger) {
|
|
341
|
+
// Priority 1: Environment variable
|
|
342
|
+
const fromEnv = process.env.OTEL_METRICS_AUTO_INSTRUMENT;
|
|
343
|
+
if (fromEnv) {
|
|
344
|
+
const keys = fromEnv
|
|
345
|
+
.split(',')
|
|
346
|
+
.map((s) => s.trim())
|
|
347
|
+
.filter(Boolean)
|
|
348
|
+
.filter((key) => {
|
|
349
|
+
const valid = VALID_AUTO_INSTRUMENT_KEYS.includes(key);
|
|
350
|
+
if (!valid) {
|
|
351
|
+
logger?.warn?.(`[metrics] Unknown auto-instrument key from env: '${key}'`);
|
|
352
|
+
}
|
|
353
|
+
return valid;
|
|
354
|
+
});
|
|
355
|
+
return keys;
|
|
356
|
+
}
|
|
357
|
+
// Priority 2: Explicit config
|
|
358
|
+
if (options.autoInstrument) {
|
|
359
|
+
// Handle array format: ['http', 'express', 'mongo']
|
|
360
|
+
if (Array.isArray(options.autoInstrument)) {
|
|
361
|
+
return options.autoInstrument.filter((key) => {
|
|
362
|
+
const valid = VALID_AUTO_INSTRUMENT_KEYS.includes(key);
|
|
363
|
+
if (!valid) {
|
|
364
|
+
logger?.warn?.(`[metrics] Unknown auto-instrument key: '${key}'`);
|
|
365
|
+
}
|
|
366
|
+
return valid;
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
// Handle object format: { http: true, express: true }
|
|
370
|
+
return Object.entries(options.autoInstrument)
|
|
371
|
+
.filter(([key, enabled]) => {
|
|
372
|
+
if (!VALID_AUTO_INSTRUMENT_KEYS.includes(key)) {
|
|
373
|
+
logger?.warn?.(`[metrics] Unknown auto-instrument key: '${key}'`);
|
|
374
|
+
return false;
|
|
375
|
+
}
|
|
376
|
+
return enabled;
|
|
377
|
+
})
|
|
378
|
+
.map(([key]) => key);
|
|
379
|
+
}
|
|
380
|
+
// Priority 3: No defaults - explicit opt-in only
|
|
381
|
+
return [];
|
|
382
|
+
}
|
|
383
|
+
async function loadInstrumentation(key, logger) {
|
|
384
|
+
try {
|
|
385
|
+
switch (key) {
|
|
386
|
+
case 'http': {
|
|
387
|
+
const { HttpInstrumentation } = await Promise.resolve().then(() => __importStar(require('@opentelemetry/instrumentation-http')));
|
|
388
|
+
return new HttpInstrumentation();
|
|
389
|
+
}
|
|
390
|
+
case 'express': {
|
|
391
|
+
const { ExpressInstrumentation } = await Promise.resolve().then(() => __importStar(require('@opentelemetry/instrumentation-express')));
|
|
392
|
+
return new ExpressInstrumentation();
|
|
393
|
+
}
|
|
394
|
+
case 'fetch': {
|
|
395
|
+
// Attempt to instrument fetch/undici with dynamic imports and fallback logic.
|
|
396
|
+
// String interpolation for undiciPkg and fetchPkg avoids TypeScript checking
|
|
397
|
+
// of potentially uninstalled packages (peer dependencies), allowing the code
|
|
398
|
+
// to compile even when @opentelemetry/instrumentation-undici or
|
|
399
|
+
// @opentelemetry/instrumentation-fetch are not present. The try/catch structure
|
|
400
|
+
// first attempts UndiciInstrumentation (for Node.js native fetch via undici),
|
|
401
|
+
// then falls back to FetchInstrumentation (browser-based), and finally logs
|
|
402
|
+
// via logger when neither package is available.
|
|
403
|
+
try {
|
|
404
|
+
const undiciPkg = `@opentelemetry/instrumentation-${'undici'}`;
|
|
405
|
+
const { UndiciInstrumentation } = await Promise.resolve(`${undiciPkg}`).then(s => __importStar(require(s)));
|
|
406
|
+
return new UndiciInstrumentation();
|
|
407
|
+
}
|
|
408
|
+
catch {
|
|
409
|
+
// Fall back to fetch instrumentation (browser-based)
|
|
410
|
+
try {
|
|
411
|
+
const fetchPkg = `@opentelemetry/instrumentation-${'fetch'}`;
|
|
412
|
+
const { FetchInstrumentation } = await Promise.resolve(`${fetchPkg}`).then(s => __importStar(require(s)));
|
|
413
|
+
return new FetchInstrumentation();
|
|
414
|
+
}
|
|
415
|
+
catch {
|
|
416
|
+
logger?.debug?.('[metrics] Neither undici nor fetch instrumentation installed');
|
|
417
|
+
return undefined;
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
case 'grpc': {
|
|
422
|
+
const { GrpcInstrumentation } = await Promise.resolve().then(() => __importStar(require('@opentelemetry/instrumentation-grpc')));
|
|
423
|
+
return new GrpcInstrumentation();
|
|
424
|
+
}
|
|
425
|
+
case 'mongo': {
|
|
426
|
+
const { MongoDBInstrumentation } = await Promise.resolve().then(() => __importStar(require('@opentelemetry/instrumentation-mongodb')));
|
|
427
|
+
return new MongoDBInstrumentation();
|
|
428
|
+
}
|
|
429
|
+
case 'mongoose': {
|
|
430
|
+
const { MongooseInstrumentation } = await Promise.resolve().then(() => __importStar(require('@opentelemetry/instrumentation-mongoose')));
|
|
431
|
+
return new MongooseInstrumentation();
|
|
432
|
+
}
|
|
433
|
+
case 'mysql': {
|
|
434
|
+
const { MySQLInstrumentation } = await Promise.resolve().then(() => __importStar(require('@opentelemetry/instrumentation-mysql')));
|
|
435
|
+
return new MySQLInstrumentation();
|
|
436
|
+
}
|
|
437
|
+
case 'pg': {
|
|
438
|
+
const { PgInstrumentation } = await Promise.resolve().then(() => __importStar(require('@opentelemetry/instrumentation-pg')));
|
|
439
|
+
return new PgInstrumentation();
|
|
440
|
+
}
|
|
441
|
+
case 'redis': {
|
|
442
|
+
const { RedisInstrumentation } = await Promise.resolve().then(() => __importStar(require('@opentelemetry/instrumentation-redis')));
|
|
443
|
+
return new RedisInstrumentation();
|
|
444
|
+
}
|
|
445
|
+
case 'aws-sdk': {
|
|
446
|
+
const { AwsInstrumentation } = await Promise.resolve().then(() => __importStar(require('@opentelemetry/instrumentation-aws-sdk')));
|
|
447
|
+
return new AwsInstrumentation({
|
|
448
|
+
suppressInternalInstrumentation: true,
|
|
449
|
+
});
|
|
450
|
+
}
|
|
451
|
+
default:
|
|
452
|
+
logger?.warn?.(`[metrics] Unknown instrumentation key: '${key}'`);
|
|
453
|
+
return undefined;
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
catch (_error) {
|
|
457
|
+
// Package not installed - this is expected, not an error
|
|
458
|
+
logger?.debug?.(`[metrics] Instrumentation '${key}' not available (package not installed)`);
|
|
459
|
+
return undefined;
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
//# sourceMappingURL=provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/metrics/provider.ts"],"names":[],"mappings":"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"}
|
package/dist/metrics/server.d.ts
CHANGED
|
@@ -68,5 +68,5 @@ export interface MetricsServerOptions {
|
|
|
68
68
|
* });
|
|
69
69
|
* ```
|
|
70
70
|
*/
|
|
71
|
-
export declare function startMetricsServer(options?: MetricsServerOptions): Express
|
|
71
|
+
export declare function startMetricsServer(options?: MetricsServerOptions): Promise<Express>;
|
|
72
72
|
//# sourceMappingURL=server.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/metrics/server.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/metrics/server.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,OAAO,EAAqB,MAAM,SAAS,CAAC;AAW9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGvC,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,oBAAoB,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAClD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,OAAO,CAAC,CA6GlB"}
|
package/dist/metrics/server.js
CHANGED
|
@@ -5,9 +5,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.startMetricsServer = startMetricsServer;
|
|
7
7
|
const express_1 = __importDefault(require("express"));
|
|
8
|
-
const
|
|
8
|
+
const exporter_prometheus_1 = require("@opentelemetry/exporter-prometheus");
|
|
9
|
+
const provider_1 = require("./provider");
|
|
9
10
|
const builders_1 = require("./builders");
|
|
10
|
-
const startTime = Date.now();
|
|
11
11
|
/**
|
|
12
12
|
* Start a metrics server with /metrics and /health endpoints
|
|
13
13
|
*
|
|
@@ -55,28 +55,60 @@ const startTime = Date.now();
|
|
|
55
55
|
* });
|
|
56
56
|
* ```
|
|
57
57
|
*/
|
|
58
|
-
function startMetricsServer(options = {}) {
|
|
58
|
+
async function startMetricsServer(options = {}) {
|
|
59
59
|
// Validate inputs
|
|
60
60
|
if (options.port !== undefined && (options.port < 1 || options.port > 65535)) {
|
|
61
61
|
throw new Error('Port must be between 1 and 65535');
|
|
62
62
|
}
|
|
63
|
+
if (options.serviceName !== undefined && options.serviceName.trim() === '') {
|
|
64
|
+
throw new Error('Service name is required');
|
|
65
|
+
}
|
|
63
66
|
const { port = parseInt(process.env.MFST_METRICS_PORT || '9090', 10), serviceName = process.env[builders_1.ENV_KEY_SERVICE_NAME] || 'unknown-service', logger, additionalHealthData, } = options;
|
|
64
67
|
// Validate parsed port
|
|
65
68
|
if (isNaN(port) || port < 1 || port > 65535) {
|
|
66
69
|
throw new Error(`Invalid port: ${port}. Port must be between 1 and 65535`);
|
|
67
70
|
}
|
|
71
|
+
const startTime = Date.now();
|
|
68
72
|
const app = (0, express_1.default)();
|
|
69
|
-
|
|
70
|
-
|
|
73
|
+
let meterProvider = (0, provider_1.getSharedMeterProvider)();
|
|
74
|
+
let exporter = (0, provider_1.getSharedPrometheusExporter)();
|
|
75
|
+
// If no meter provider exists, or if provider exists but no prometheus exporter,
|
|
76
|
+
// initialize a new provider with prometheus exporter
|
|
77
|
+
if (!meterProvider || !exporter) {
|
|
78
|
+
const result = await (0, provider_1.initMetricsProvider)({
|
|
79
|
+
serviceName,
|
|
80
|
+
environment: process.env.ENV,
|
|
81
|
+
exporter: 'prometheus',
|
|
82
|
+
prometheusDisableServer: true,
|
|
83
|
+
logger,
|
|
84
|
+
});
|
|
85
|
+
meterProvider = result.meterProvider;
|
|
86
|
+
exporter = result.prometheusExporter;
|
|
87
|
+
}
|
|
88
|
+
if (!meterProvider) {
|
|
89
|
+
throw new Error('Metrics provider not initialized');
|
|
90
|
+
}
|
|
91
|
+
if (!exporter) {
|
|
92
|
+
throw new Error('Failed to create Prometheus exporter');
|
|
93
|
+
}
|
|
94
|
+
// Create a single serializer instance for reuse
|
|
95
|
+
const serializer = new exporter_prometheus_1.PrometheusSerializer();
|
|
96
|
+
// Prometheus metrics endpoint - use the exporter's collect method
|
|
71
97
|
app.get('/metrics', async (_req, res) => {
|
|
72
98
|
try {
|
|
73
|
-
|
|
74
|
-
const
|
|
75
|
-
|
|
99
|
+
// Collect and serialize metrics
|
|
100
|
+
const { resourceMetrics, errors } = await exporter.collect();
|
|
101
|
+
if (errors.length > 0) {
|
|
102
|
+
logger?.warn?.('Metrics collection had errors:', errors);
|
|
103
|
+
}
|
|
104
|
+
// Use the PrometheusSerializer to format metrics
|
|
105
|
+
const metricsString = serializer.serialize(resourceMetrics);
|
|
106
|
+
res.set('Content-Type', 'text/plain; charset=utf-8');
|
|
107
|
+
res.send(metricsString);
|
|
76
108
|
}
|
|
77
109
|
catch (err) {
|
|
78
110
|
const errorMessage = err instanceof Error ? err.message : String(err);
|
|
79
|
-
logger?.error('Error generating metrics:', errorMessage);
|
|
111
|
+
logger?.error?.('Error generating metrics:', errorMessage);
|
|
80
112
|
res.status(500).json({ error: 'Internal server error', message: errorMessage });
|
|
81
113
|
}
|
|
82
114
|
});
|
|
@@ -94,7 +126,7 @@ function startMetricsServer(options = {}) {
|
|
|
94
126
|
}
|
|
95
127
|
catch (err) {
|
|
96
128
|
const errorMessage = err instanceof Error ? err.message : String(err);
|
|
97
|
-
logger?.error('Error generating health data:', errorMessage);
|
|
129
|
+
logger?.error?.('Error generating health data:', errorMessage);
|
|
98
130
|
res.status(500).json({
|
|
99
131
|
status: 'unhealthy',
|
|
100
132
|
error: errorMessage,
|
|
@@ -102,11 +134,16 @@ function startMetricsServer(options = {}) {
|
|
|
102
134
|
});
|
|
103
135
|
}
|
|
104
136
|
});
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
137
|
+
return new Promise((resolve, reject) => {
|
|
138
|
+
const server = app.listen(port, () => {
|
|
139
|
+
logger?.info(`Metrics server listening on port ${port}`);
|
|
140
|
+
logger?.info(`Metrics endpoint: http://localhost:${port}/metrics`);
|
|
141
|
+
logger?.info(`Health endpoint: http://localhost:${port}/health`);
|
|
142
|
+
resolve(app);
|
|
143
|
+
});
|
|
144
|
+
server.once('error', (err) => {
|
|
145
|
+
reject(err);
|
|
146
|
+
});
|
|
109
147
|
});
|
|
110
|
-
return app;
|
|
111
148
|
}
|
|
112
149
|
//# sourceMappingURL=server.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/metrics/server.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/metrics/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/tracing/setup.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/tracing/setup.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,OAAO,KAAK,EAAE,aAAa,EAAkB,MAAM,EAAE,MAAM,SAAS,CAAC;AAerE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAsB,WAAW,CAC/B,MAAM,GAAE,aAAkB,EAC1B,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAuFf;AAiGD;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,GAAG,CAEvC;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBpE"}
|