@prairielearn/opentelemetry 1.7.0 → 1.8.1
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/CHANGELOG.md +12 -0
- package/README.md +17 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +5 -0
- package/dist/init.js +12 -6
- package/dist/init.js.map +1 -1
- package/dist/metrics.d.ts +20 -0
- package/dist/metrics.js +55 -1
- package/dist/metrics.js.map +1 -1
- package/dist/tracing.test.js +1 -1
- package/dist/tracing.test.js.map +1 -1
- package/package.json +31 -26
- package/src/index.ts +3 -1
- package/src/init.ts +10 -4
- package/src/metrics.ts +74 -0
- package/src/tracing.test.ts +1 -1
- package/tsconfig.json +1 -1
package/CHANGELOG.md
CHANGED
package/README.md
CHANGED
|
@@ -102,3 +102,20 @@ await instrumentedWithMetrics(meter, 'operation.name', async () => {
|
|
|
102
102
|
}
|
|
103
103
|
});
|
|
104
104
|
```
|
|
105
|
+
|
|
106
|
+
To capture statistics about a constantly changing value (for instance, the size of a database connection pool), you can use `createObservableValueGauges`. This will "observe" your chosen value on a regular interval and collect the min/max/average of that value for each metrics collection interval.
|
|
107
|
+
|
|
108
|
+
```ts
|
|
109
|
+
import { metrics, createObservableValueGauges } from '@prairielearn/opentelemetry';
|
|
110
|
+
|
|
111
|
+
const meter = metrics.getMeter('meter-name');
|
|
112
|
+
createObservableValueGauges(
|
|
113
|
+
meter,
|
|
114
|
+
'db.pool.size',
|
|
115
|
+
{
|
|
116
|
+
// The interval that your value will be observed, in milliseconds.
|
|
117
|
+
interval: 1000,
|
|
118
|
+
},
|
|
119
|
+
() => pool.size
|
|
120
|
+
);
|
|
121
|
+
```
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { trace, metrics, context, SpanStatusCode, ValueType } from '@opentelemetry/api';
|
|
2
2
|
export { suppressTracing } from '@opentelemetry/core';
|
|
3
|
-
export { init, shutdown } from './init';
|
|
3
|
+
export { init, shutdown, disableInstrumentations } from './init';
|
|
4
4
|
export { instrumented } from './tracing';
|
|
5
|
-
export { instrumentedWithMetrics, getCounter, getUpDownCounter, getHistogram, getObservableCounter, getObservableUpDownCounter, getObservableGauge, } from './metrics';
|
|
5
|
+
export { instrumentedWithMetrics, getCounter, getUpDownCounter, getHistogram, getObservableCounter, getObservableUpDownCounter, getObservableGauge, createObservableValueGauges, createObservableValueGaugesOptions, } from './metrics';
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getObservableGauge = exports.getObservableUpDownCounter = exports.getObservableCounter = exports.getHistogram = exports.getUpDownCounter = exports.getCounter = exports.instrumentedWithMetrics = exports.instrumented = exports.shutdown = exports.init = exports.suppressTracing = exports.ValueType = exports.SpanStatusCode = exports.context = exports.metrics = exports.trace = void 0;
|
|
3
|
+
exports.createObservableValueGauges = exports.getObservableGauge = exports.getObservableUpDownCounter = exports.getObservableCounter = exports.getHistogram = exports.getUpDownCounter = exports.getCounter = exports.instrumentedWithMetrics = exports.instrumented = exports.disableInstrumentations = exports.shutdown = exports.init = exports.suppressTracing = exports.ValueType = exports.SpanStatusCode = exports.context = exports.metrics = exports.trace = void 0;
|
|
4
4
|
var api_1 = require("@opentelemetry/api");
|
|
5
5
|
Object.defineProperty(exports, "trace", { enumerable: true, get: function () { return api_1.trace; } });
|
|
6
6
|
Object.defineProperty(exports, "metrics", { enumerable: true, get: function () { return api_1.metrics; } });
|
|
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "suppressTracing", { enumerable: true, get: funct
|
|
|
12
12
|
var init_1 = require("./init");
|
|
13
13
|
Object.defineProperty(exports, "init", { enumerable: true, get: function () { return init_1.init; } });
|
|
14
14
|
Object.defineProperty(exports, "shutdown", { enumerable: true, get: function () { return init_1.shutdown; } });
|
|
15
|
+
Object.defineProperty(exports, "disableInstrumentations", { enumerable: true, get: function () { return init_1.disableInstrumentations; } });
|
|
15
16
|
var tracing_1 = require("./tracing");
|
|
16
17
|
Object.defineProperty(exports, "instrumented", { enumerable: true, get: function () { return tracing_1.instrumented; } });
|
|
17
18
|
var metrics_1 = require("./metrics");
|
|
@@ -22,4 +23,5 @@ Object.defineProperty(exports, "getHistogram", { enumerable: true, get: function
|
|
|
22
23
|
Object.defineProperty(exports, "getObservableCounter", { enumerable: true, get: function () { return metrics_1.getObservableCounter; } });
|
|
23
24
|
Object.defineProperty(exports, "getObservableUpDownCounter", { enumerable: true, get: function () { return metrics_1.getObservableUpDownCounter; } });
|
|
24
25
|
Object.defineProperty(exports, "getObservableGauge", { enumerable: true, get: function () { return metrics_1.getObservableGauge; } });
|
|
26
|
+
Object.defineProperty(exports, "createObservableValueGauges", { enumerable: true, get: function () { return metrics_1.createObservableValueGauges; } });
|
|
25
27
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,0CAAwF;AAA/E,4FAAA,KAAK,OAAA;AAAE,8FAAA,OAAO,OAAA;AAAE,8FAAA,OAAO,OAAA;AAAE,qGAAA,cAAc,OAAA;AAAE,gGAAA,SAAS,OAAA;AAC3D,4CAAsD;AAA7C,uGAAA,eAAe,OAAA;AAExB,+
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,0CAAwF;AAA/E,4FAAA,KAAK,OAAA;AAAE,8FAAA,OAAO,OAAA;AAAE,8FAAA,OAAO,OAAA;AAAE,qGAAA,cAAc,OAAA;AAAE,gGAAA,SAAS,OAAA;AAC3D,4CAAsD;AAA7C,uGAAA,eAAe,OAAA;AAExB,+BAAiE;AAAxD,4FAAA,IAAI,OAAA;AAAE,gGAAA,QAAQ,OAAA;AAAE,+GAAA,uBAAuB,OAAA;AAChD,qCAAyC;AAAhC,uGAAA,YAAY,OAAA;AACrB,qCAUmB;AATjB,kHAAA,uBAAuB,OAAA;AACvB,qGAAA,UAAU,OAAA;AACV,2GAAA,gBAAgB,OAAA;AAChB,uGAAA,YAAY,OAAA;AACZ,+GAAA,oBAAoB,OAAA;AACpB,qHAAA,0BAA0B,OAAA;AAC1B,6GAAA,kBAAkB,OAAA;AAClB,sHAAA,2BAA2B,OAAA"}
|
package/dist/init.d.ts
CHANGED
|
@@ -23,3 +23,8 @@ export declare function init(config: OpenTelemetryConfig): Promise<void>;
|
|
|
23
23
|
* when a `SIGTERM` signal is handled.
|
|
24
24
|
*/
|
|
25
25
|
export declare function shutdown(): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* Disables all OpenTelemetry instrumentations. This is useful for tests that
|
|
28
|
+
* need to access the unwrapped modules.
|
|
29
|
+
*/
|
|
30
|
+
export declare function disableInstrumentations(): void;
|
package/dist/init.js
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.shutdown = exports.init = void 0;
|
|
3
|
+
exports.disableInstrumentations = exports.shutdown = exports.init = void 0;
|
|
4
4
|
const grpc_js_1 = require("@grpc/grpc-js");
|
|
5
5
|
const sdk_trace_node_1 = require("@opentelemetry/sdk-trace-node");
|
|
6
6
|
const sdk_metrics_1 = require("@opentelemetry/sdk-metrics");
|
|
7
7
|
const sdk_trace_base_1 = require("@opentelemetry/sdk-trace-base");
|
|
8
8
|
const resources_1 = require("@opentelemetry/resources");
|
|
9
9
|
const semantic_conventions_1 = require("@opentelemetry/semantic-conventions");
|
|
10
|
-
const instrumentation_express_1 = require("@opentelemetry/instrumentation-express");
|
|
11
10
|
const api_1 = require("@opentelemetry/api");
|
|
12
11
|
const core_1 = require("@opentelemetry/core");
|
|
13
12
|
// Exporters go here.
|
|
@@ -18,13 +17,12 @@ const exporter_metrics_otlp_grpc_1 = require("@opentelemetry/exporter-metrics-ot
|
|
|
18
17
|
const instrumentation_aws_sdk_1 = require("@opentelemetry/instrumentation-aws-sdk");
|
|
19
18
|
const instrumentation_connect_1 = require("@opentelemetry/instrumentation-connect");
|
|
20
19
|
const instrumentation_dns_1 = require("@opentelemetry/instrumentation-dns");
|
|
21
|
-
const
|
|
20
|
+
const instrumentation_express_1 = require("@opentelemetry/instrumentation-express");
|
|
22
21
|
const instrumentation_http_1 = require("@opentelemetry/instrumentation-http");
|
|
23
22
|
const instrumentation_pg_1 = require("@opentelemetry/instrumentation-pg");
|
|
24
23
|
const instrumentation_redis_1 = require("@opentelemetry/instrumentation-redis");
|
|
25
24
|
// Resource detectors go here.
|
|
26
25
|
const resource_detector_aws_1 = require("@opentelemetry/resource-detector-aws");
|
|
27
|
-
const resources_2 = require("@opentelemetry/resources");
|
|
28
26
|
/**
|
|
29
27
|
* Extends `BatchSpanProcessor` to give it the ability to filter out spans
|
|
30
28
|
* before they're queued up to send. This enhances our sampling process so
|
|
@@ -68,7 +66,7 @@ const instrumentations = [
|
|
|
68
66
|
new instrumentation_aws_sdk_1.AwsInstrumentation(),
|
|
69
67
|
new instrumentation_connect_1.ConnectInstrumentation(),
|
|
70
68
|
new instrumentation_dns_1.DnsInstrumentation(),
|
|
71
|
-
new
|
|
69
|
+
new instrumentation_express_1.ExpressInstrumentation({
|
|
72
70
|
// We use a lot of middleware; it makes the traces way too noisy. If we
|
|
73
71
|
// want telemetry on a particular middleware, we should instrument it
|
|
74
72
|
// manually.
|
|
@@ -217,7 +215,7 @@ async function init(config) {
|
|
|
217
215
|
// then can we actually start requiring all of our code that loads our config
|
|
218
216
|
// and ultimately tells us how to configure OpenTelemetry.
|
|
219
217
|
let resource = await (0, resources_1.detectResources)({
|
|
220
|
-
detectors: [resource_detector_aws_1.awsEc2Detector,
|
|
218
|
+
detectors: [resource_detector_aws_1.awsEc2Detector, resources_1.processDetector, resources_1.envDetector],
|
|
221
219
|
});
|
|
222
220
|
if (config.serviceName) {
|
|
223
221
|
resource = resource.merge(new resources_1.Resource({ [semantic_conventions_1.SemanticResourceAttributes.SERVICE_NAME]: config.serviceName }));
|
|
@@ -255,4 +253,12 @@ async function shutdown() {
|
|
|
255
253
|
}
|
|
256
254
|
}
|
|
257
255
|
exports.shutdown = shutdown;
|
|
256
|
+
/**
|
|
257
|
+
* Disables all OpenTelemetry instrumentations. This is useful for tests that
|
|
258
|
+
* need to access the unwrapped modules.
|
|
259
|
+
*/
|
|
260
|
+
function disableInstrumentations() {
|
|
261
|
+
instrumentations.forEach((i) => i.disable());
|
|
262
|
+
}
|
|
263
|
+
exports.disableInstrumentations = disableInstrumentations;
|
|
258
264
|
//# sourceMappingURL=init.js.map
|
package/dist/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":";;;AAAA,2CAAsD;AAEtD,kEAAmE;AACnE,4DAMoC;AACpC,kEAYuC;AACvC,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
|
package/dist/metrics.d.ts
CHANGED
|
@@ -6,3 +6,23 @@ export declare function getObservableCounter(meter: Meter, name: string, options
|
|
|
6
6
|
export declare function getObservableUpDownCounter(meter: Meter, name: string, options?: MetricOptions): ObservableUpDownCounter<import("@opentelemetry/api").Attributes>;
|
|
7
7
|
export declare function getObservableGauge(meter: Meter, name: string, options?: MetricOptions): ObservableGauge<import("@opentelemetry/api").Attributes>;
|
|
8
8
|
export declare function instrumentedWithMetrics<T>(meter: Meter, name: string, fn: () => Promise<T> | T): Promise<T>;
|
|
9
|
+
export interface createObservableValueGaugesOptions extends MetricOptions {
|
|
10
|
+
interval: number;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Creates a set of gauges that track the min, max, and average of a value over
|
|
14
|
+
* time. The value is observed on a regular interval.
|
|
15
|
+
*
|
|
16
|
+
* The provided {@link name} is used as the base name for the three gauges. The
|
|
17
|
+
* names of the individual gauges are:
|
|
18
|
+
*
|
|
19
|
+
* - `${name}.min`
|
|
20
|
+
* - `${name}.max`
|
|
21
|
+
* - `${name}.avg`
|
|
22
|
+
*/
|
|
23
|
+
export declare function createObservableValueGauges(meter: Meter, name: string, options: createObservableValueGaugesOptions, observe: () => number): Promise<{
|
|
24
|
+
minGauge: ObservableGauge<import("@opentelemetry/api").Attributes>;
|
|
25
|
+
maxGauge: ObservableGauge<import("@opentelemetry/api").Attributes>;
|
|
26
|
+
averageGauge: ObservableGauge<import("@opentelemetry/api").Attributes>;
|
|
27
|
+
stop: () => void;
|
|
28
|
+
}>;
|
package/dist/metrics.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.instrumentedWithMetrics = exports.getObservableGauge = exports.getObservableUpDownCounter = exports.getObservableCounter = exports.getUpDownCounter = exports.getCounter = exports.getHistogram = void 0;
|
|
3
|
+
exports.createObservableValueGauges = exports.instrumentedWithMetrics = exports.getObservableGauge = exports.getObservableUpDownCounter = exports.getObservableCounter = exports.getUpDownCounter = exports.getCounter = exports.getHistogram = void 0;
|
|
4
4
|
const api_1 = require("@opentelemetry/api");
|
|
5
5
|
const histogramCache = new WeakMap();
|
|
6
6
|
const counterCache = new WeakMap();
|
|
@@ -64,4 +64,58 @@ async function instrumentedWithMetrics(meter, name, fn) {
|
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
66
|
exports.instrumentedWithMetrics = instrumentedWithMetrics;
|
|
67
|
+
/**
|
|
68
|
+
* Creates a set of gauges that track the min, max, and average of a value over
|
|
69
|
+
* time. The value is observed on a regular interval.
|
|
70
|
+
*
|
|
71
|
+
* The provided {@link name} is used as the base name for the three gauges. The
|
|
72
|
+
* names of the individual gauges are:
|
|
73
|
+
*
|
|
74
|
+
* - `${name}.min`
|
|
75
|
+
* - `${name}.max`
|
|
76
|
+
* - `${name}.avg`
|
|
77
|
+
*/
|
|
78
|
+
async function createObservableValueGauges(meter, name, options, observe) {
|
|
79
|
+
const { interval, ...metricOptions } = options;
|
|
80
|
+
let min = 0;
|
|
81
|
+
let max = 0;
|
|
82
|
+
let sum = 0;
|
|
83
|
+
let count = 0;
|
|
84
|
+
// Observe the value on a regular interval. Black-hole any errors.
|
|
85
|
+
const intervalId = setInterval(() => {
|
|
86
|
+
Promise.resolve(observe())
|
|
87
|
+
.then((value) => {
|
|
88
|
+
min = count === 0 ? value : Math.min(min, value);
|
|
89
|
+
max = Math.max(max, value);
|
|
90
|
+
sum += value;
|
|
91
|
+
count += 1;
|
|
92
|
+
})
|
|
93
|
+
.catch(() => { });
|
|
94
|
+
}, interval);
|
|
95
|
+
// Don't let this keep the process alive.
|
|
96
|
+
intervalId.unref();
|
|
97
|
+
const minGauge = getObservableGauge(meter, `${name}.min`, metricOptions);
|
|
98
|
+
const maxGauge = getObservableGauge(meter, `${name}.max`, metricOptions);
|
|
99
|
+
const averageGauge = getObservableGauge(meter, `${name}.avg`, {
|
|
100
|
+
...metricOptions,
|
|
101
|
+
// Average is always a double, even if the observed value is an int.
|
|
102
|
+
valueType: api_1.ValueType.DOUBLE,
|
|
103
|
+
});
|
|
104
|
+
minGauge.addCallback((observableResult) => {
|
|
105
|
+
observableResult.observe(min);
|
|
106
|
+
min = 0;
|
|
107
|
+
});
|
|
108
|
+
maxGauge.addCallback((observableResult) => {
|
|
109
|
+
observableResult.observe(max);
|
|
110
|
+
max = 0;
|
|
111
|
+
});
|
|
112
|
+
averageGauge.addCallback((observableResult) => {
|
|
113
|
+
const avg = sum / count;
|
|
114
|
+
observableResult.observe(avg);
|
|
115
|
+
sum = 0;
|
|
116
|
+
count = 0;
|
|
117
|
+
});
|
|
118
|
+
return { minGauge, maxGauge, averageGauge, stop: () => clearInterval(intervalId) };
|
|
119
|
+
}
|
|
120
|
+
exports.createObservableValueGauges = createObservableValueGauges;
|
|
67
121
|
//# sourceMappingURL=metrics.js.map
|
package/dist/metrics.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"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"}
|
package/dist/tracing.test.js
CHANGED
|
@@ -6,7 +6,7 @@ const index_1 = require("./index");
|
|
|
6
6
|
const context_async_hooks_1 = require("@opentelemetry/context-async-hooks");
|
|
7
7
|
describe('instrumented', () => {
|
|
8
8
|
let contextManager;
|
|
9
|
-
|
|
9
|
+
const exporter = new sdk_node_1.tracing.InMemorySpanExporter();
|
|
10
10
|
before(async () => {
|
|
11
11
|
await (0, index_1.init)({
|
|
12
12
|
openTelemetryEnabled: true,
|
package/dist/tracing.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracing.test.js","sourceRoot":"","sources":["../src/tracing.test.ts"],"names":[],"mappings":";;AAAA,sDAAkD;AAClD,+BAA8B;AAE9B,mCAA6E;AAC7E,4EAA8E;AAE9E,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,IAAI,cAAwC,CAAC;IAC7C,
|
|
1
|
+
{"version":3,"file":"tracing.test.js","sourceRoot":"","sources":["../src/tracing.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,43 +1,48 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prairielearn/opentelemetry",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.8.1",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "https://github.com/PrairieLearn/PrairieLearn.git",
|
|
8
|
+
"directory": "packages/opentelemetry"
|
|
9
|
+
},
|
|
5
10
|
"scripts": {
|
|
6
11
|
"build": "tsc",
|
|
7
12
|
"dev": "tsc --watch --preserveWatchOutput",
|
|
8
13
|
"test": "mocha --no-config --require ts-node/register src/**/*.test.ts"
|
|
9
14
|
},
|
|
10
15
|
"dependencies": {
|
|
11
|
-
"@grpc/grpc-js": "^1.8.
|
|
12
|
-
"@opentelemetry/api": "^1.4.
|
|
13
|
-
"@opentelemetry/core": "^1.
|
|
14
|
-
"@opentelemetry/exporter-jaeger": "^1.
|
|
15
|
-
"@opentelemetry/exporter-metrics-otlp-grpc": "^0.
|
|
16
|
-
"@opentelemetry/exporter-trace-otlp-grpc": "^0.
|
|
17
|
-
"@opentelemetry/instrumentation": "^0.
|
|
18
|
-
"@opentelemetry/instrumentation-aws-sdk": "^0.34.
|
|
19
|
-
"@opentelemetry/instrumentation-connect": "^0.31.
|
|
20
|
-
"@opentelemetry/instrumentation-dns": "^0.31.
|
|
21
|
-
"@opentelemetry/instrumentation-express": "^0.32.
|
|
22
|
-
"@opentelemetry/instrumentation-http": "^0.
|
|
23
|
-
"@opentelemetry/instrumentation-pg": "^0.
|
|
24
|
-
"@opentelemetry/instrumentation-redis": "^0.34.
|
|
25
|
-
"@opentelemetry/resource-detector-aws": "^1.2.
|
|
26
|
-
"@opentelemetry/resources": "^1.
|
|
27
|
-
"@opentelemetry/sdk-metrics": "^1.
|
|
28
|
-
"@opentelemetry/sdk-node": "^0.
|
|
29
|
-
"@opentelemetry/sdk-trace-base": "^1.
|
|
30
|
-
"@opentelemetry/sdk-trace-node": "^1.
|
|
31
|
-
"@opentelemetry/semantic-conventions": "^1.
|
|
16
|
+
"@grpc/grpc-js": "^1.8.14",
|
|
17
|
+
"@opentelemetry/api": "^1.4.1",
|
|
18
|
+
"@opentelemetry/core": "^1.13.0",
|
|
19
|
+
"@opentelemetry/exporter-jaeger": "^1.13.0",
|
|
20
|
+
"@opentelemetry/exporter-metrics-otlp-grpc": "^0.39.1",
|
|
21
|
+
"@opentelemetry/exporter-trace-otlp-grpc": "^0.39.1",
|
|
22
|
+
"@opentelemetry/instrumentation": "^0.39.1",
|
|
23
|
+
"@opentelemetry/instrumentation-aws-sdk": "^0.34.2",
|
|
24
|
+
"@opentelemetry/instrumentation-connect": "^0.31.3",
|
|
25
|
+
"@opentelemetry/instrumentation-dns": "^0.31.4",
|
|
26
|
+
"@opentelemetry/instrumentation-express": "^0.32.3",
|
|
27
|
+
"@opentelemetry/instrumentation-http": "^0.39.1",
|
|
28
|
+
"@opentelemetry/instrumentation-pg": "^0.35.2",
|
|
29
|
+
"@opentelemetry/instrumentation-redis": "^0.34.6",
|
|
30
|
+
"@opentelemetry/resource-detector-aws": "^1.2.4",
|
|
31
|
+
"@opentelemetry/resources": "^1.13.0",
|
|
32
|
+
"@opentelemetry/sdk-metrics": "^1.13.0",
|
|
33
|
+
"@opentelemetry/sdk-node": "^0.39.1",
|
|
34
|
+
"@opentelemetry/sdk-trace-base": "^1.13.0",
|
|
35
|
+
"@opentelemetry/sdk-trace-node": "^1.13.0",
|
|
36
|
+
"@opentelemetry/semantic-conventions": "^1.13.0"
|
|
32
37
|
},
|
|
33
38
|
"devDependencies": {
|
|
34
|
-
"@prairielearn/tsconfig": "
|
|
35
|
-
"@types/chai": "^4.3.
|
|
39
|
+
"@prairielearn/tsconfig": "^0.0.0",
|
|
40
|
+
"@types/chai": "^4.3.5",
|
|
36
41
|
"@types/mocha": "^10.0.1",
|
|
37
|
-
"@types/node": "^18.
|
|
42
|
+
"@types/node": "^18.16.16",
|
|
38
43
|
"chai": "^4.3.7",
|
|
39
44
|
"mocha": "^10.2.0",
|
|
40
45
|
"ts-node": "^10.9.1",
|
|
41
|
-
"typescript": "^
|
|
46
|
+
"typescript": "^5.1.3"
|
|
42
47
|
}
|
|
43
48
|
}
|
package/src/index.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { trace, metrics, context, SpanStatusCode, ValueType } from '@opentelemetry/api';
|
|
2
2
|
export { suppressTracing } from '@opentelemetry/core';
|
|
3
3
|
|
|
4
|
-
export { init, shutdown } from './init';
|
|
4
|
+
export { init, shutdown, disableInstrumentations } from './init';
|
|
5
5
|
export { instrumented } from './tracing';
|
|
6
6
|
export {
|
|
7
7
|
instrumentedWithMetrics,
|
|
@@ -11,4 +11,6 @@ export {
|
|
|
11
11
|
getObservableCounter,
|
|
12
12
|
getObservableUpDownCounter,
|
|
13
13
|
getObservableGauge,
|
|
14
|
+
createObservableValueGauges,
|
|
15
|
+
createObservableValueGaugesOptions,
|
|
14
16
|
} from './metrics';
|
package/src/init.ts
CHANGED
|
@@ -21,9 +21,8 @@ import {
|
|
|
21
21
|
Sampler,
|
|
22
22
|
ConsoleSpanExporter,
|
|
23
23
|
} from '@opentelemetry/sdk-trace-base';
|
|
24
|
-
import { detectResources, Resource } from '@opentelemetry/resources';
|
|
24
|
+
import { detectResources, processDetector, envDetector, Resource } from '@opentelemetry/resources';
|
|
25
25
|
import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions';
|
|
26
|
-
import { ExpressLayerType } from '@opentelemetry/instrumentation-express';
|
|
27
26
|
import { metrics } from '@opentelemetry/api';
|
|
28
27
|
import { hrTimeToMilliseconds } from '@opentelemetry/core';
|
|
29
28
|
|
|
@@ -36,14 +35,13 @@ import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-grpc';
|
|
|
36
35
|
import { AwsInstrumentation } from '@opentelemetry/instrumentation-aws-sdk';
|
|
37
36
|
import { ConnectInstrumentation } from '@opentelemetry/instrumentation-connect';
|
|
38
37
|
import { DnsInstrumentation } from '@opentelemetry/instrumentation-dns';
|
|
39
|
-
import { ExpressInstrumentation } from '@opentelemetry/instrumentation-express';
|
|
38
|
+
import { ExpressLayerType, ExpressInstrumentation } from '@opentelemetry/instrumentation-express';
|
|
40
39
|
import { HttpInstrumentation } from '@opentelemetry/instrumentation-http';
|
|
41
40
|
import { PgInstrumentation } from '@opentelemetry/instrumentation-pg';
|
|
42
41
|
import { RedisInstrumentation } from '@opentelemetry/instrumentation-redis';
|
|
43
42
|
|
|
44
43
|
// Resource detectors go here.
|
|
45
44
|
import { awsEc2Detector } from '@opentelemetry/resource-detector-aws';
|
|
46
|
-
import { processDetector, envDetector } from '@opentelemetry/resources';
|
|
47
45
|
|
|
48
46
|
/**
|
|
49
47
|
* Extends `BatchSpanProcessor` to give it the ability to filter out spans
|
|
@@ -315,3 +313,11 @@ export async function shutdown(): Promise<void> {
|
|
|
315
313
|
tracerProvider = null;
|
|
316
314
|
}
|
|
317
315
|
}
|
|
316
|
+
|
|
317
|
+
/**
|
|
318
|
+
* Disables all OpenTelemetry instrumentations. This is useful for tests that
|
|
319
|
+
* need to access the unwrapped modules.
|
|
320
|
+
*/
|
|
321
|
+
export function disableInstrumentations() {
|
|
322
|
+
instrumentations.forEach((i) => i.disable());
|
|
323
|
+
}
|
package/src/metrics.ts
CHANGED
|
@@ -91,3 +91,77 @@ export async function instrumentedWithMetrics<T>(
|
|
|
91
91
|
histogram.record(performance.now() - start);
|
|
92
92
|
}
|
|
93
93
|
}
|
|
94
|
+
|
|
95
|
+
export interface createObservableValueGaugesOptions extends MetricOptions {
|
|
96
|
+
interval: number;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Creates a set of gauges that track the min, max, and average of a value over
|
|
101
|
+
* time. The value is observed on a regular interval.
|
|
102
|
+
*
|
|
103
|
+
* The provided {@link name} is used as the base name for the three gauges. The
|
|
104
|
+
* names of the individual gauges are:
|
|
105
|
+
*
|
|
106
|
+
* - `${name}.min`
|
|
107
|
+
* - `${name}.max`
|
|
108
|
+
* - `${name}.avg`
|
|
109
|
+
*/
|
|
110
|
+
export async function createObservableValueGauges(
|
|
111
|
+
meter: Meter,
|
|
112
|
+
name: string,
|
|
113
|
+
options: createObservableValueGaugesOptions,
|
|
114
|
+
observe: () => number
|
|
115
|
+
) {
|
|
116
|
+
const { interval, ...metricOptions } = options;
|
|
117
|
+
|
|
118
|
+
let min = 0;
|
|
119
|
+
let max = 0;
|
|
120
|
+
let sum = 0;
|
|
121
|
+
let count = 0;
|
|
122
|
+
|
|
123
|
+
// Observe the value on a regular interval. Black-hole any errors.
|
|
124
|
+
const intervalId = setInterval(() => {
|
|
125
|
+
Promise.resolve(observe())
|
|
126
|
+
.then((value) => {
|
|
127
|
+
min = count === 0 ? value : Math.min(min, value);
|
|
128
|
+
max = Math.max(max, value);
|
|
129
|
+
sum += value;
|
|
130
|
+
count += 1;
|
|
131
|
+
})
|
|
132
|
+
.catch(() => {});
|
|
133
|
+
}, interval);
|
|
134
|
+
|
|
135
|
+
// Don't let this keep the process alive.
|
|
136
|
+
intervalId.unref();
|
|
137
|
+
|
|
138
|
+
const minGauge = getObservableGauge(meter, `${name}.min`, metricOptions);
|
|
139
|
+
const maxGauge = getObservableGauge(meter, `${name}.max`, metricOptions);
|
|
140
|
+
const averageGauge = getObservableGauge(meter, `${name}.avg`, {
|
|
141
|
+
...metricOptions,
|
|
142
|
+
// Average is always a double, even if the observed value is an int.
|
|
143
|
+
valueType: ValueType.DOUBLE,
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
minGauge.addCallback((observableResult) => {
|
|
147
|
+
observableResult.observe(min);
|
|
148
|
+
|
|
149
|
+
min = 0;
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
maxGauge.addCallback((observableResult) => {
|
|
153
|
+
observableResult.observe(max);
|
|
154
|
+
|
|
155
|
+
max = 0;
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
averageGauge.addCallback((observableResult) => {
|
|
159
|
+
const avg = sum / count;
|
|
160
|
+
observableResult.observe(avg);
|
|
161
|
+
|
|
162
|
+
sum = 0;
|
|
163
|
+
count = 0;
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
return { minGauge, maxGauge, averageGauge, stop: () => clearInterval(intervalId) };
|
|
167
|
+
}
|
package/src/tracing.test.ts
CHANGED
|
@@ -6,7 +6,7 @@ import { AsyncHooksContextManager } from '@opentelemetry/context-async-hooks';
|
|
|
6
6
|
|
|
7
7
|
describe('instrumented', () => {
|
|
8
8
|
let contextManager: AsyncHooksContextManager;
|
|
9
|
-
|
|
9
|
+
const exporter = new tracing.InMemorySpanExporter();
|
|
10
10
|
|
|
11
11
|
before(async () => {
|
|
12
12
|
await init({
|
package/tsconfig.json
CHANGED