@manifest-cyber/observability-ts 0.2.19 → 0.2.21
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 +15 -1
- package/dist/init.d.ts +11 -2
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +61 -19
- package/dist/init.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -297,11 +297,25 @@ extractMessageTraceContext(message.MessageAttributes);
|
|
|
297
297
|
| `MFST_METRICS_PORT` | Metrics server port (also used by `initObservability` when `metricsPort` is omitted) | `9090` |
|
|
298
298
|
| `OTEL_EXPORTER_OTLP_ENDPOINT` | OTLP endpoint | `'http://localhost:4317'` |
|
|
299
299
|
| `OTEL_TRACING_ENABLED` | Enable/disable tracing | `true` |
|
|
300
|
+
| `OTEL_METRICS_EXPORTER` | Metrics exporter used by `initObservability`: `prometheus` (scrape), `otlp-grpc`/`otlp-http` (push), or `none` | `prometheus` |
|
|
300
301
|
| `ENV` | Environment (dev/staging/prod) | `'development'` |
|
|
301
302
|
|
|
303
|
+
## Push-Based Metrics (short-lived processes)
|
|
304
|
+
|
|
305
|
+
By default, `initObservability` exposes metrics on a Prometheus scrape endpoint. That model
|
|
306
|
+
assumes a long-lived process; short-lived workloads (e.g. single-task jobs running as
|
|
307
|
+
KEDA-scaled Kubernetes Jobs) terminate before they are ever scraped. For those, set
|
|
308
|
+
`OTEL_METRICS_EXPORTER=otlp-grpc` (or `otlp-http`):
|
|
309
|
+
|
|
310
|
+
- Metrics are pushed to `OTEL_EXPORTER_OTLP_ENDPOINT` instead of being scraped, and the
|
|
311
|
+
Prometheus scrape server is not started.
|
|
312
|
+
- The process exit interceptor performs a final metrics export on `process.exit()`, so
|
|
313
|
+
buffered metrics are not lost when the process ends before the periodic export interval
|
|
314
|
+
(60s) fires.
|
|
315
|
+
|
|
302
316
|
## Process Exit Interceptor
|
|
303
317
|
|
|
304
|
-
When tracing is enabled, `process.exit()` is automatically intercepted to flush
|
|
318
|
+
When tracing is enabled (or metrics use a push exporter), `process.exit()` is automatically intercepted to flush telemetry before termination (default: enabled, 2s timeout). This prevents telemetry loss on abrupt exits.
|
|
305
319
|
|
|
306
320
|
```typescript
|
|
307
321
|
import { initObservability } from '@manifest-cyber/observability-ts';
|
package/dist/init.d.ts
CHANGED
|
@@ -34,12 +34,15 @@ export interface InitObservabilityConfig {
|
|
|
34
34
|
*/
|
|
35
35
|
autoInstrument?: AutoInstrumentKey[];
|
|
36
36
|
/**
|
|
37
|
-
* Intercept process.exit() to flush
|
|
37
|
+
* Intercept process.exit() to flush telemetry before termination. Flushes
|
|
38
|
+
* tracing data and, when metrics use a push exporter (OTLP), buffered
|
|
39
|
+
* metrics. Required for short-lived processes (e.g. single-task jobs) that
|
|
40
|
+
* would otherwise exit before the periodic metric reader ever exports.
|
|
38
41
|
* @default true
|
|
39
42
|
*/
|
|
40
43
|
interceptProcessExit?: boolean;
|
|
41
44
|
/**
|
|
42
|
-
* Timeout (ms) for flushing
|
|
45
|
+
* Timeout (ms) for flushing telemetry on process.exit().
|
|
43
46
|
* @default 2000
|
|
44
47
|
*/
|
|
45
48
|
exitFlushTimeoutMs?: number;
|
|
@@ -57,6 +60,12 @@ export interface InitObservabilityResult {
|
|
|
57
60
|
metricsPort: number;
|
|
58
61
|
/** Whether default metrics are currently registered (first call wins) */
|
|
59
62
|
defaultMetricsEnabled: boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Metrics exporter actually in use. Defaults to 'prometheus' (scrape);
|
|
65
|
+
* override with the OTEL_METRICS_EXPORTER environment variable
|
|
66
|
+
* (e.g. 'otlp-grpc' for push-based export from short-lived jobs).
|
|
67
|
+
*/
|
|
68
|
+
metricsExporterType: 'otlp-grpc' | 'otlp-http' | 'prometheus' | 'none';
|
|
60
69
|
}
|
|
61
70
|
/**
|
|
62
71
|
* Initialize observability for a service (metrics + tracing).
|
package/dist/init.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAuB,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACjF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAE9C,MAAM,WAAW,uBAAuB;IACtC,uFAAuF;IACvF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4EAA4E;IAC5E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,qEAAqE;IACrE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8EAA8E;IAC9E,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;;;;;;;;;;;;OAcG;IACH,cAAc,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACrC
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAuB,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACjF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAE9C,MAAM,WAAW,uBAAuB;IACtC,uFAAuF;IACvF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4EAA4E;IAC5E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,qEAAqE;IACrE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8EAA8E;IAC9E,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;;;;;;;;;;;;OAcG;IACH,cAAc,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACrC;;;;;;OAMG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,wBAAwB;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,sCAAsC;IACtC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,0BAA0B;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,qBAAqB,EAAE,OAAO,CAAC;IAC/B;;;;OAIG;IACH,mBAAmB,EAAE,WAAW,GAAG,WAAW,GAAG,YAAY,GAAG,MAAM,CAAC;CACxE;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAAC,uBAAuB,CAAC,CAsGlC"}
|
package/dist/init.js
CHANGED
|
@@ -30,12 +30,15 @@ const provider_1 = require("./metrics/provider");
|
|
|
30
30
|
async function initObservability(config) {
|
|
31
31
|
const { serviceName = process.env.SERVICE_NAME || 'unknown-service', metricsPort = parseInt(process.env.MFST_METRICS_PORT || '9090', 10), tracingEnabled = process.env.OTEL_TRACING_ENABLED !== 'false', samplingRatio = getSamplingRatio(), otlpEndpoint = process.env.OTEL_EXPORTER_OTLP_ENDPOINT || 'http://localhost:4317', enableDefaultMetrics = true, autoInstrument, interceptProcessExit = true, exitFlushTimeoutMs = 2000, logger, } = config;
|
|
32
32
|
let tracingInitialized = false;
|
|
33
|
-
// Initialize OpenTelemetry metrics provider with Prometheus exporter
|
|
34
|
-
//
|
|
35
|
-
//
|
|
33
|
+
// Initialize OpenTelemetry metrics provider with the Prometheus exporter by
|
|
34
|
+
// default; the OTEL_METRICS_EXPORTER environment variable takes priority and
|
|
35
|
+
// can select a push exporter ('otlp-grpc'/'otlp-http') instead - required
|
|
36
|
+
// for short-lived processes (e.g. single-task jobs) that are never scraped.
|
|
37
|
+
// Defaulting to 'prometheus' ensures the exporter is created on the first
|
|
38
|
+
// init, so startMetricsServer() reuses it instead of triggering a second
|
|
36
39
|
// initMetricsProvider() call — which would silently fail because
|
|
37
40
|
// @opentelemetry/api rejects duplicate setGlobalMeterProvider() calls.
|
|
38
|
-
await (0, provider_1.initMetricsProvider)({
|
|
41
|
+
const metricsResult = await (0, provider_1.initMetricsProvider)({
|
|
39
42
|
serviceName,
|
|
40
43
|
environment: process.env.ENV,
|
|
41
44
|
exporter: 'prometheus',
|
|
@@ -44,6 +47,8 @@ async function initObservability(config) {
|
|
|
44
47
|
enableRuntimeMetrics: enableDefaultMetrics,
|
|
45
48
|
autoInstrument,
|
|
46
49
|
});
|
|
50
|
+
const metricsPush = metricsResult.exporterType === 'otlp-grpc' ||
|
|
51
|
+
metricsResult.exporterType === 'otlp-http';
|
|
47
52
|
// Initialize tracing
|
|
48
53
|
if (tracingEnabled) {
|
|
49
54
|
await (0, setup_1.initTracing)({
|
|
@@ -59,21 +64,47 @@ async function initObservability(config) {
|
|
|
59
64
|
});
|
|
60
65
|
tracingInitialized = true;
|
|
61
66
|
}
|
|
62
|
-
//
|
|
63
|
-
|
|
67
|
+
// Register what the exit interceptor must flush for THIS init. Stored in a
|
|
68
|
+
// module-level slot (rather than closed over by the interceptor) so re-init
|
|
69
|
+
// always flushes the current providers, not stale ones.
|
|
70
|
+
currentTelemetryFlush = async () => {
|
|
71
|
+
const tasks = [];
|
|
72
|
+
if (tracingInitialized) {
|
|
73
|
+
tasks.push((0, setup_1.shutdownTracing)(logger).catch((error) => {
|
|
74
|
+
logger?.error('Error flushing tracing data', { error });
|
|
75
|
+
}));
|
|
76
|
+
}
|
|
77
|
+
if (metricsPush) {
|
|
78
|
+
// Shutting down the MeterProvider performs a final export of buffered
|
|
79
|
+
// metrics; without it, short-lived processes exit before the periodic
|
|
80
|
+
// reader ever fires.
|
|
81
|
+
tasks.push(metricsResult.shutdown().catch((error) => {
|
|
82
|
+
logger?.error('Error flushing metrics data', { error });
|
|
83
|
+
}));
|
|
84
|
+
}
|
|
85
|
+
await Promise.all(tasks);
|
|
86
|
+
};
|
|
87
|
+
// Install process.exit interceptor when there is telemetry to flush:
|
|
88
|
+
// tracing data, or buffered metrics in push mode
|
|
89
|
+
if ((tracingInitialized || metricsPush) && interceptProcessExit) {
|
|
64
90
|
installExitInterceptor(exitFlushTimeoutMs, logger);
|
|
65
91
|
}
|
|
66
|
-
// Start
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
92
|
+
// Start the Prometheus scrape server only when scraping is the export
|
|
93
|
+
// model; push-mode (OTLP) and disabled metrics have no server to scrape
|
|
94
|
+
// (startMetricsServer would fail looking for a Prometheus exporter)
|
|
95
|
+
if (metricsResult.exporterType === 'prometheus') {
|
|
96
|
+
await (0, server_1.startMetricsServer)({
|
|
97
|
+
serviceName,
|
|
98
|
+
port: metricsPort,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
71
101
|
return {
|
|
72
102
|
serviceName,
|
|
73
103
|
tracingInitialized,
|
|
74
104
|
metricsPort,
|
|
75
105
|
// Runtime metrics enabled via OpenTelemetry host-metrics/runtime-metrics packages
|
|
76
106
|
defaultMetricsEnabled: enableDefaultMetrics,
|
|
107
|
+
metricsExporterType: metricsResult.exporterType,
|
|
77
108
|
};
|
|
78
109
|
}
|
|
79
110
|
/**
|
|
@@ -100,11 +131,20 @@ function getSamplingRatio() {
|
|
|
100
131
|
}
|
|
101
132
|
// Symbol to mark process.exit as already intercepted
|
|
102
133
|
const EXIT_INTERCEPTOR_INSTALLED = Symbol('__exitInterceptorInstalled');
|
|
134
|
+
// Exit-interceptor state; (re)assigned by every initObservability() call so the
|
|
135
|
+
// interceptor - which is only ever installed once per process - always uses the
|
|
136
|
+
// flush function, timeout, and logger from the most recent initialization.
|
|
137
|
+
let currentTelemetryFlush;
|
|
138
|
+
let currentExitFlushTimeoutMs = 2000;
|
|
139
|
+
let currentExitLogger;
|
|
103
140
|
/**
|
|
104
|
-
* Intercepts process.exit() to flush tracing
|
|
141
|
+
* Intercepts process.exit() to flush telemetry (tracing and, in push mode,
|
|
142
|
+
* metrics) before termination.
|
|
105
143
|
* This function is idempotent - calling it multiple times is safe.
|
|
106
144
|
*/
|
|
107
145
|
function installExitInterceptor(timeoutMs, logger) {
|
|
146
|
+
currentExitFlushTimeoutMs = timeoutMs;
|
|
147
|
+
currentExitLogger = logger;
|
|
108
148
|
// Check if our interceptor is already installed using a symbol property
|
|
109
149
|
if (process.exit[EXIT_INTERCEPTOR_INSTALLED]) {
|
|
110
150
|
return;
|
|
@@ -118,20 +158,22 @@ function installExitInterceptor(timeoutMs, logger) {
|
|
|
118
158
|
return;
|
|
119
159
|
}
|
|
120
160
|
isExiting = true;
|
|
121
|
-
|
|
161
|
+
const exitLogger = currentExitLogger;
|
|
162
|
+
const exitTimeoutMs = currentExitFlushTimeoutMs;
|
|
163
|
+
exitLogger?.info('Process exiting, flushing telemetry...', { exitCode: code });
|
|
122
164
|
const forceExitTimer = setTimeout(() => {
|
|
123
|
-
|
|
165
|
+
exitLogger?.warn?.('Telemetry flush timed out, forcing exit', {
|
|
124
166
|
exitCode: code,
|
|
125
|
-
timeoutMs,
|
|
167
|
+
timeoutMs: exitTimeoutMs,
|
|
126
168
|
});
|
|
127
169
|
originalExit(code);
|
|
128
|
-
},
|
|
129
|
-
void (
|
|
170
|
+
}, exitTimeoutMs);
|
|
171
|
+
void (currentTelemetryFlush ? currentTelemetryFlush() : Promise.resolve())
|
|
130
172
|
.then(() => {
|
|
131
|
-
|
|
173
|
+
exitLogger?.info('Telemetry flushed successfully', { exitCode: code });
|
|
132
174
|
})
|
|
133
175
|
.catch((error) => {
|
|
134
|
-
|
|
176
|
+
exitLogger?.error('Error flushing telemetry', { error, exitCode: code });
|
|
135
177
|
})
|
|
136
178
|
.finally(() => {
|
|
137
179
|
clearTimeout(forceExitTimer);
|
package/dist/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":";AAAA;;;GAGG;;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@manifest-cyber/observability-ts",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.21",
|
|
4
4
|
"description": "Unified observability library for Manifest Cyber services - Metrics (Prometheus) and Tracing (OpenTelemetry)",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|