@prairielearn/opentelemetry 1.10.6 → 1.11.0
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/dist/index.d.ts +1 -1
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +3 -3
- package/dist/init.js +37 -31
- package/dist/init.js.map +1 -1
- package/dist/metrics.d.ts +2 -2
- package/dist/metrics.js +1 -1
- package/dist/metrics.js.map +1 -1
- package/dist/tracing.test.js +5 -1
- package/dist/tracing.test.js.map +1 -1
- package/package.json +20 -21
- package/src/index.ts +1 -0
- package/src/init.ts +48 -36
- package/src/metrics.ts +1 -1
- package/src/tracing.test.ts +5 -1
- package/tsconfig.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @prairielearn/opentelemetry
|
|
2
2
|
|
|
3
|
+
## 1.11.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- bd4cff1: Allow trace exporting to be disabled; export more types
|
|
8
|
+
|
|
9
|
+
## 1.10.7
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- 3395c25: Upgrade all JavaScript dependencies
|
|
14
|
+
|
|
3
15
|
## 1.10.6
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { trace, metrics, context, SpanStatusCode, ValueType, TraceFlags, Meter, Counter, Histogram, UpDownCounter, ObservableCounter, ObservableUpDownCounter, ObservableGauge, } from '@opentelemetry/api';
|
|
1
|
+
export { trace, metrics, context, SpanStatusCode, ValueType, TraceFlags, Meter, Counter, Histogram, UpDownCounter, ObservableCounter, ObservableUpDownCounter, ObservableGauge, ObservableResult, } from '@opentelemetry/api';
|
|
2
2
|
export { suppressTracing } from '@opentelemetry/core';
|
|
3
3
|
export { init, shutdown, disableInstrumentations } from './init';
|
|
4
4
|
export { instrumented } from './tracing';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,0CAe4B;AAd1B,4FAAA,KAAK,OAAA;AACL,8FAAA,OAAO,OAAA;AACP,8FAAA,OAAO,OAAA;AACP,qGAAA,cAAc,OAAA;AACd,gGAAA,SAAS,OAAA;AACT,iGAAA,UAAU,OAAA;AAUZ,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
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { PushMetricExporter } from '@opentelemetry/sdk-metrics';
|
|
2
|
-
import { SpanExporter } from '@opentelemetry/sdk-trace-base';
|
|
2
|
+
import { SpanExporter, SpanProcessor } from '@opentelemetry/sdk-trace-base';
|
|
3
3
|
export interface OpenTelemetryConfigEnabled {
|
|
4
4
|
openTelemetryEnabled: true;
|
|
5
|
-
openTelemetryExporter
|
|
5
|
+
openTelemetryExporter?: 'console' | 'honeycomb' | 'jaeger' | SpanExporter;
|
|
6
6
|
openTelemetryMetricExporter?: 'console' | 'honeycomb' | PushMetricExporter;
|
|
7
7
|
openTelemetryMetricExportIntervalMillis?: number;
|
|
8
8
|
openTelemetrySamplerType: 'always-on' | 'always-off' | 'trace-id-ratio';
|
|
9
9
|
openTelemetrySampleRate?: number;
|
|
10
|
-
openTelemetrySpanProcessor?: 'batch' | 'simple';
|
|
10
|
+
openTelemetrySpanProcessor?: 'batch' | 'simple' | SpanProcessor;
|
|
11
11
|
honeycombApiKey?: string;
|
|
12
12
|
honeycombDataset?: string;
|
|
13
13
|
serviceName?: string;
|
package/dist/init.js
CHANGED
|
@@ -11,7 +11,6 @@ const api_1 = require("@opentelemetry/api");
|
|
|
11
11
|
const core_1 = require("@opentelemetry/core");
|
|
12
12
|
// Exporters go here.
|
|
13
13
|
const exporter_trace_otlp_grpc_1 = require("@opentelemetry/exporter-trace-otlp-grpc");
|
|
14
|
-
const exporter_jaeger_1 = require("@opentelemetry/exporter-jaeger");
|
|
15
14
|
const exporter_metrics_otlp_grpc_1 = require("@opentelemetry/exporter-metrics-otlp-grpc");
|
|
16
15
|
// Instrumentations go here.
|
|
17
16
|
const instrumentation_aws_sdk_1 = require("@opentelemetry/instrumentation-aws-sdk");
|
|
@@ -108,6 +107,8 @@ function getHoneycombMetadata(config, datasetSuffix = '') {
|
|
|
108
107
|
return metadata;
|
|
109
108
|
}
|
|
110
109
|
function getTraceExporter(config) {
|
|
110
|
+
if (!config.openTelemetryExporter)
|
|
111
|
+
return null;
|
|
111
112
|
if (typeof config.openTelemetryExporter === 'object') {
|
|
112
113
|
return config.openTelemetryExporter;
|
|
113
114
|
}
|
|
@@ -122,13 +123,8 @@ function getTraceExporter(config) {
|
|
|
122
123
|
});
|
|
123
124
|
break;
|
|
124
125
|
case 'jaeger':
|
|
125
|
-
return new
|
|
126
|
-
|
|
127
|
-
// with packet sizes when Jaeger is running in Docker. We'll instead
|
|
128
|
-
// configure it to use the HTTP sender, which shouldn't face those
|
|
129
|
-
// same issues. We'll still allow the endpoint to be overridden via
|
|
130
|
-
// environment variable if needed.
|
|
131
|
-
endpoint: process.env.OTEL_EXPORTER_JAEGER_ENDPOINT ?? 'http://localhost:14268/api/traces',
|
|
126
|
+
return new exporter_trace_otlp_grpc_1.OTLPTraceExporter({
|
|
127
|
+
url: process.env.OTEL_EXPORTER_JAEGER_ENDPOINT ?? 'grpc://localhost:4317/',
|
|
132
128
|
});
|
|
133
129
|
default:
|
|
134
130
|
throw new Error(`Unknown OpenTelemetry exporter: ${config.openTelemetryExporter}`);
|
|
@@ -159,6 +155,25 @@ function getMetricExporter(config) {
|
|
|
159
155
|
throw new Error(`Unknown OpenTelemetry metric exporter: ${config.openTelemetryMetricExporter}`);
|
|
160
156
|
}
|
|
161
157
|
}
|
|
158
|
+
function getSpanProcessor(config) {
|
|
159
|
+
if (typeof config.openTelemetrySpanProcessor === 'object') {
|
|
160
|
+
return config.openTelemetrySpanProcessor;
|
|
161
|
+
}
|
|
162
|
+
const traceExporter = getTraceExporter(config);
|
|
163
|
+
if (!traceExporter)
|
|
164
|
+
return null;
|
|
165
|
+
switch (config.openTelemetrySpanProcessor ?? 'batch') {
|
|
166
|
+
case 'batch': {
|
|
167
|
+
return new FilterBatchSpanProcessor(traceExporter, filter);
|
|
168
|
+
}
|
|
169
|
+
case 'simple': {
|
|
170
|
+
return new sdk_trace_base_1.SimpleSpanProcessor(traceExporter);
|
|
171
|
+
}
|
|
172
|
+
default: {
|
|
173
|
+
throw new Error(`Unknown OpenTelemetry span processor: ${config.openTelemetrySpanProcessor}`);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
162
177
|
/**
|
|
163
178
|
* Should be called once we've loaded our config; this will allow us to set up
|
|
164
179
|
* the correct metadata for the Honeycomb exporter. We don't actually have that
|
|
@@ -175,8 +190,8 @@ async function init(config) {
|
|
|
175
190
|
// https://github.com/open-telemetry/opentelemetry-js-contrib/pull/972
|
|
176
191
|
return;
|
|
177
192
|
}
|
|
178
|
-
const traceExporter = getTraceExporter(config);
|
|
179
193
|
const metricExporter = getMetricExporter(config);
|
|
194
|
+
const spanProcessor = getSpanProcessor(config);
|
|
180
195
|
let sampler;
|
|
181
196
|
switch (config.openTelemetrySamplerType ?? 'always-on') {
|
|
182
197
|
case 'always-on': {
|
|
@@ -196,26 +211,12 @@ async function init(config) {
|
|
|
196
211
|
default:
|
|
197
212
|
throw new Error(`Unknown OpenTelemetry sampler type: ${config.openTelemetrySamplerType}`);
|
|
198
213
|
}
|
|
199
|
-
let spanProcessor;
|
|
200
|
-
switch (config.openTelemetrySpanProcessor ?? 'batch') {
|
|
201
|
-
case 'batch': {
|
|
202
|
-
spanProcessor = new FilterBatchSpanProcessor(traceExporter, filter);
|
|
203
|
-
break;
|
|
204
|
-
}
|
|
205
|
-
case 'simple': {
|
|
206
|
-
spanProcessor = new sdk_trace_base_1.SimpleSpanProcessor(traceExporter);
|
|
207
|
-
break;
|
|
208
|
-
}
|
|
209
|
-
default: {
|
|
210
|
-
throw new Error(`Unknown OpenTelemetry span processor: ${config.openTelemetrySpanProcessor}`);
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
214
|
// Much of this functionality is copied from `@opentelemetry/sdk-node`, but
|
|
214
215
|
// we can't use the SDK directly because of the fact that we load our config
|
|
215
216
|
// asynchronously. We need to initialize our instrumentations first; only
|
|
216
217
|
// then can we actually start requiring all of our code that loads our config
|
|
217
218
|
// and ultimately tells us how to configure OpenTelemetry.
|
|
218
|
-
let resource =
|
|
219
|
+
let resource = (0, resources_1.detectResourcesSync)({
|
|
219
220
|
detectors: [resource_detector_aws_1.awsEc2Detector, resources_1.processDetector, resources_1.envDetector],
|
|
220
221
|
});
|
|
221
222
|
if (config.serviceName) {
|
|
@@ -226,20 +227,25 @@ async function init(config) {
|
|
|
226
227
|
sampler,
|
|
227
228
|
resource,
|
|
228
229
|
});
|
|
229
|
-
|
|
230
|
+
if (spanProcessor) {
|
|
231
|
+
nodeTracerProvider.addSpanProcessor(spanProcessor);
|
|
232
|
+
}
|
|
230
233
|
nodeTracerProvider.register();
|
|
231
234
|
instrumentations.forEach((i) => i.setTracerProvider(nodeTracerProvider));
|
|
232
235
|
// Save the provider so we can shut it down later.
|
|
233
236
|
tracerProvider = nodeTracerProvider;
|
|
234
237
|
// Set up metrics instrumentation if it's enabled.
|
|
235
238
|
if (metricExporter) {
|
|
236
|
-
const meterProvider = new sdk_metrics_1.MeterProvider({
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
239
|
+
const meterProvider = new sdk_metrics_1.MeterProvider({
|
|
240
|
+
resource,
|
|
241
|
+
readers: [
|
|
242
|
+
new sdk_metrics_1.PeriodicExportingMetricReader({
|
|
243
|
+
exporter: metricExporter,
|
|
244
|
+
exportIntervalMillis: config.openTelemetryMetricExportIntervalMillis ?? 30000,
|
|
245
|
+
}),
|
|
246
|
+
],
|
|
241
247
|
});
|
|
242
|
-
|
|
248
|
+
api_1.metrics.setGlobalMeterProvider(meterProvider);
|
|
243
249
|
}
|
|
244
250
|
}
|
|
245
251
|
exports.init = init;
|
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
|
@@ -20,9 +20,9 @@ export interface createObservableValueGaugesOptions extends MetricOptions {
|
|
|
20
20
|
* - `${name}.max`
|
|
21
21
|
* - `${name}.avg`
|
|
22
22
|
*/
|
|
23
|
-
export declare function createObservableValueGauges(meter: Meter, name: string, options: createObservableValueGaugesOptions, observe: () => number):
|
|
23
|
+
export declare function createObservableValueGauges(meter: Meter, name: string, options: createObservableValueGaugesOptions, observe: () => number): {
|
|
24
24
|
minGauge: ObservableGauge<import("@opentelemetry/api").Attributes>;
|
|
25
25
|
maxGauge: ObservableGauge<import("@opentelemetry/api").Attributes>;
|
|
26
26
|
averageGauge: ObservableGauge<import("@opentelemetry/api").Attributes>;
|
|
27
27
|
stop: () => void;
|
|
28
|
-
}
|
|
28
|
+
};
|
package/dist/metrics.js
CHANGED
|
@@ -75,7 +75,7 @@ exports.instrumentedWithMetrics = instrumentedWithMetrics;
|
|
|
75
75
|
* - `${name}.max`
|
|
76
76
|
* - `${name}.avg`
|
|
77
77
|
*/
|
|
78
|
-
|
|
78
|
+
function createObservableValueGauges(meter, name, options, observe) {
|
|
79
79
|
const { interval, ...metricOptions } = options;
|
|
80
80
|
let min = 0;
|
|
81
81
|
let max = 0;
|
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
|
@@ -7,12 +7,13 @@ 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
|
+
const spanProcessor = new sdk_node_1.tracing.SimpleSpanProcessor(exporter);
|
|
10
11
|
before(async () => {
|
|
11
12
|
await (0, index_1.init)({
|
|
12
13
|
openTelemetryEnabled: true,
|
|
13
14
|
openTelemetryExporter: exporter,
|
|
14
15
|
openTelemetrySamplerType: 'always-on',
|
|
15
|
-
openTelemetrySpanProcessor:
|
|
16
|
+
openTelemetrySpanProcessor: spanProcessor,
|
|
16
17
|
});
|
|
17
18
|
});
|
|
18
19
|
beforeEach(async () => {
|
|
@@ -20,6 +21,7 @@ describe('instrumented', () => {
|
|
|
20
21
|
index_1.context.setGlobalContextManager(contextManager.enable());
|
|
21
22
|
});
|
|
22
23
|
afterEach(async () => {
|
|
24
|
+
await spanProcessor.forceFlush();
|
|
23
25
|
exporter.reset();
|
|
24
26
|
index_1.context.disable();
|
|
25
27
|
});
|
|
@@ -29,6 +31,7 @@ describe('instrumented', () => {
|
|
|
29
31
|
});
|
|
30
32
|
it('records a span on success', async () => {
|
|
31
33
|
await (0, index_1.instrumented)('test-success', () => 'foo');
|
|
34
|
+
await spanProcessor.forceFlush();
|
|
32
35
|
const spans = exporter.getFinishedSpans();
|
|
33
36
|
chai_1.assert.lengthOf(spans, 1);
|
|
34
37
|
chai_1.assert.equal(spans[0].name, 'test-success');
|
|
@@ -47,6 +50,7 @@ describe('instrumented', () => {
|
|
|
47
50
|
// Ensure the error was propagated back to the caller.
|
|
48
51
|
chai_1.assert.equal(maybeError?.message, 'foo');
|
|
49
52
|
// Ensure the correct span was recorded.
|
|
53
|
+
await spanProcessor.forceFlush();
|
|
50
54
|
const spans = exporter.getFinishedSpans();
|
|
51
55
|
chai_1.assert.lengthOf(spans, 1);
|
|
52
56
|
chai_1.assert.equal(spans[0].name, 'test-failure');
|
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,MAAM,QAAQ,GAAG,IAAI,kBAAO,CAAC,oBAAoB,EAAE,CAAC;
|
|
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,MAAM,QAAQ,GAAG,IAAI,kBAAO,CAAC,oBAAoB,EAAE,CAAC;IACpD,MAAM,aAAa,GAAG,IAAI,kBAAO,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAEhE,MAAM,CAAC,KAAK,IAAI,EAAE;QAChB,MAAM,IAAA,YAAI,EAAC;YACT,oBAAoB,EAAE,IAAI;YAC1B,qBAAqB,EAAE,QAAQ;YAC/B,wBAAwB,EAAE,WAAW;YACrC,0BAA0B,EAAE,aAAa;SAC1C,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,cAAc,GAAG,IAAI,8CAAwB,EAAE,CAAC;QAChD,eAAO,CAAC,uBAAuB,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,aAAa,CAAC,UAAU,EAAE,CAAC;QACjC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACjB,eAAO,CAAC,OAAO,EAAE,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,MAAM,GAAG,GAAG,MAAM,IAAA,oBAAY,EAAC,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;QACpD,aAAM,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;QACzC,MAAM,IAAA,oBAAY,EAAC,cAAc,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;QAEhD,MAAM,aAAa,CAAC,UAAU,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,QAAQ,CAAC,gBAAgB,EAAE,CAAC;QAC1C,aAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC1B,aAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QAC5C,aAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,sBAAc,CAAC,EAAE,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;QACzC,IAAI,UAAU,GAAiB,IAAI,CAAC;QAEpC,IAAI,CAAC;YACH,MAAM,IAAA,oBAAY,EAAC,cAAc,EAAE,GAAG,EAAE;gBACtC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,UAAU,GAAG,GAAG,CAAC;QACnB,CAAC;QAED,sDAAsD;QACtD,aAAM,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAEzC,wCAAwC;QACxC,MAAM,aAAa,CAAC,UAAU,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,QAAQ,CAAC,gBAAgB,EAAE,CAAC;QAC1C,aAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC1B,aAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QAC5C,aAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,sBAAc,CAAC,KAAK,CAAC,CAAC;QACzD,aAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC7C,aAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;QACzC,MAAM,MAAM,GAAG,aAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAClD,MAAM,aAAa,GAAG,aAAK,CAAC,OAAO,CAAC,eAAO,CAAC,MAAM,EAAE,EAAE,UAAU,CAAC,CAAC;QAElE,MAAM,IAAA,oBAAY,EAAC,MAAM,EAAE,KAAK,IAAI,EAAE;YACpC,MAAM,YAAY,GAAG,eAAO,CAAC,MAAM,EAAE,CAAC;YACtC,aAAM,CAAC,cAAc,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prairielearn/opentelemetry",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.11.0",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -13,38 +13,37 @@
|
|
|
13
13
|
"test": "mocha --no-config --require tsx src/**/*.test.ts"
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@grpc/grpc-js": "^1.
|
|
17
|
-
"@opentelemetry/api": "^1.
|
|
18
|
-
"@opentelemetry/core": "^1.
|
|
19
|
-
"@opentelemetry/exporter-
|
|
20
|
-
"@opentelemetry/exporter-
|
|
21
|
-
"@opentelemetry/
|
|
22
|
-
"@opentelemetry/instrumentation": "^0.
|
|
23
|
-
"@opentelemetry/instrumentation-aws-sdk": "^0.38.0",
|
|
16
|
+
"@grpc/grpc-js": "^1.10.1",
|
|
17
|
+
"@opentelemetry/api": "^1.8.0",
|
|
18
|
+
"@opentelemetry/core": "^1.22.0",
|
|
19
|
+
"@opentelemetry/exporter-metrics-otlp-grpc": "^0.49.1",
|
|
20
|
+
"@opentelemetry/exporter-trace-otlp-grpc": "^0.49.1",
|
|
21
|
+
"@opentelemetry/instrumentation": "^0.49.1",
|
|
22
|
+
"@opentelemetry/instrumentation-aws-sdk": "^0.38.1",
|
|
24
23
|
"@opentelemetry/instrumentation-connect": "^0.33.0",
|
|
25
24
|
"@opentelemetry/instrumentation-dns": "^0.33.0",
|
|
26
25
|
"@opentelemetry/instrumentation-express": "^0.35.0",
|
|
27
|
-
"@opentelemetry/instrumentation-http": "^0.
|
|
26
|
+
"@opentelemetry/instrumentation-http": "^0.49.1",
|
|
28
27
|
"@opentelemetry/instrumentation-pg": "^0.38.0",
|
|
29
28
|
"@opentelemetry/instrumentation-redis": "^0.36.0",
|
|
30
29
|
"@opentelemetry/resource-detector-aws": "^1.3.6",
|
|
31
|
-
"@opentelemetry/resources": "^1.
|
|
32
|
-
"@opentelemetry/sdk-metrics": "^1.
|
|
33
|
-
"@opentelemetry/sdk-node": "^0.
|
|
34
|
-
"@opentelemetry/sdk-trace-base": "^1.
|
|
35
|
-
"@opentelemetry/sdk-trace-node": "^1.
|
|
36
|
-
"@opentelemetry/semantic-conventions": "^1.
|
|
30
|
+
"@opentelemetry/resources": "^1.22.0",
|
|
31
|
+
"@opentelemetry/sdk-metrics": "^1.22.0",
|
|
32
|
+
"@opentelemetry/sdk-node": "^0.49.1",
|
|
33
|
+
"@opentelemetry/sdk-trace-base": "^1.22.0",
|
|
34
|
+
"@opentelemetry/sdk-trace-node": "^1.22.0",
|
|
35
|
+
"@opentelemetry/semantic-conventions": "^1.22.0"
|
|
37
36
|
},
|
|
38
37
|
"devDependencies": {
|
|
39
|
-
"@opentelemetry/context-async-hooks": "^1.
|
|
38
|
+
"@opentelemetry/context-async-hooks": "^1.22.0",
|
|
40
39
|
"@prairielearn/tsconfig": "^0.0.0",
|
|
41
|
-
"@types/chai": "^4.3.
|
|
40
|
+
"@types/chai": "^4.3.12",
|
|
42
41
|
"@types/mocha": "^10.0.6",
|
|
43
|
-
"@types/node": "^20.11.
|
|
42
|
+
"@types/node": "^20.11.24",
|
|
44
43
|
"chai": "^4.4.1",
|
|
45
44
|
"chai-as-promised": "^7.1.1",
|
|
46
|
-
"mocha": "^10.
|
|
47
|
-
"tsx": "^4.7.
|
|
45
|
+
"mocha": "^10.3.0",
|
|
46
|
+
"tsx": "^4.7.1",
|
|
48
47
|
"typescript": "^5.3.3"
|
|
49
48
|
}
|
|
50
49
|
}
|
package/src/index.ts
CHANGED
package/src/init.ts
CHANGED
|
@@ -21,14 +21,18 @@ import {
|
|
|
21
21
|
Sampler,
|
|
22
22
|
ConsoleSpanExporter,
|
|
23
23
|
} from '@opentelemetry/sdk-trace-base';
|
|
24
|
-
import {
|
|
24
|
+
import {
|
|
25
|
+
detectResourcesSync,
|
|
26
|
+
processDetector,
|
|
27
|
+
envDetector,
|
|
28
|
+
Resource,
|
|
29
|
+
} from '@opentelemetry/resources';
|
|
25
30
|
import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions';
|
|
26
31
|
import { metrics } from '@opentelemetry/api';
|
|
27
32
|
import { hrTimeToMilliseconds } from '@opentelemetry/core';
|
|
28
33
|
|
|
29
34
|
// Exporters go here.
|
|
30
35
|
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-grpc';
|
|
31
|
-
import { JaegerExporter } from '@opentelemetry/exporter-jaeger';
|
|
32
36
|
import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-grpc';
|
|
33
37
|
|
|
34
38
|
// Instrumentations go here.
|
|
@@ -127,12 +131,12 @@ let tracerProvider: NodeTracerProvider | null;
|
|
|
127
131
|
|
|
128
132
|
export interface OpenTelemetryConfigEnabled {
|
|
129
133
|
openTelemetryEnabled: true;
|
|
130
|
-
openTelemetryExporter
|
|
134
|
+
openTelemetryExporter?: 'console' | 'honeycomb' | 'jaeger' | SpanExporter;
|
|
131
135
|
openTelemetryMetricExporter?: 'console' | 'honeycomb' | PushMetricExporter;
|
|
132
136
|
openTelemetryMetricExportIntervalMillis?: number;
|
|
133
137
|
openTelemetrySamplerType: 'always-on' | 'always-off' | 'trace-id-ratio';
|
|
134
138
|
openTelemetrySampleRate?: number;
|
|
135
|
-
openTelemetrySpanProcessor?: 'batch' | 'simple';
|
|
139
|
+
openTelemetrySpanProcessor?: 'batch' | 'simple' | SpanProcessor;
|
|
136
140
|
honeycombApiKey?: string;
|
|
137
141
|
honeycombDataset?: string;
|
|
138
142
|
serviceName?: string;
|
|
@@ -156,7 +160,9 @@ function getHoneycombMetadata(config: OpenTelemetryConfigEnabled, datasetSuffix
|
|
|
156
160
|
return metadata;
|
|
157
161
|
}
|
|
158
162
|
|
|
159
|
-
function getTraceExporter(config: OpenTelemetryConfigEnabled): SpanExporter {
|
|
163
|
+
function getTraceExporter(config: OpenTelemetryConfigEnabled): SpanExporter | null {
|
|
164
|
+
if (!config.openTelemetryExporter) return null;
|
|
165
|
+
|
|
160
166
|
if (typeof config.openTelemetryExporter === 'object') {
|
|
161
167
|
return config.openTelemetryExporter;
|
|
162
168
|
}
|
|
@@ -172,13 +178,8 @@ function getTraceExporter(config: OpenTelemetryConfigEnabled): SpanExporter {
|
|
|
172
178
|
});
|
|
173
179
|
break;
|
|
174
180
|
case 'jaeger':
|
|
175
|
-
return new
|
|
176
|
-
|
|
177
|
-
// with packet sizes when Jaeger is running in Docker. We'll instead
|
|
178
|
-
// configure it to use the HTTP sender, which shouldn't face those
|
|
179
|
-
// same issues. We'll still allow the endpoint to be overridden via
|
|
180
|
-
// environment variable if needed.
|
|
181
|
-
endpoint: process.env.OTEL_EXPORTER_JAEGER_ENDPOINT ?? 'http://localhost:14268/api/traces',
|
|
181
|
+
return new OTLPTraceExporter({
|
|
182
|
+
url: process.env.OTEL_EXPORTER_JAEGER_ENDPOINT ?? 'grpc://localhost:4317/',
|
|
182
183
|
});
|
|
183
184
|
default:
|
|
184
185
|
throw new Error(`Unknown OpenTelemetry exporter: ${config.openTelemetryExporter}`);
|
|
@@ -214,6 +215,27 @@ function getMetricExporter(config: OpenTelemetryConfigEnabled): PushMetricExport
|
|
|
214
215
|
}
|
|
215
216
|
}
|
|
216
217
|
|
|
218
|
+
function getSpanProcessor(config: OpenTelemetryConfigEnabled): SpanProcessor | null {
|
|
219
|
+
if (typeof config.openTelemetrySpanProcessor === 'object') {
|
|
220
|
+
return config.openTelemetrySpanProcessor;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
const traceExporter = getTraceExporter(config);
|
|
224
|
+
if (!traceExporter) return null;
|
|
225
|
+
|
|
226
|
+
switch (config.openTelemetrySpanProcessor ?? 'batch') {
|
|
227
|
+
case 'batch': {
|
|
228
|
+
return new FilterBatchSpanProcessor(traceExporter, filter);
|
|
229
|
+
}
|
|
230
|
+
case 'simple': {
|
|
231
|
+
return new SimpleSpanProcessor(traceExporter);
|
|
232
|
+
}
|
|
233
|
+
default: {
|
|
234
|
+
throw new Error(`Unknown OpenTelemetry span processor: ${config.openTelemetrySpanProcessor}`);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
|
|
217
239
|
/**
|
|
218
240
|
* Should be called once we've loaded our config; this will allow us to set up
|
|
219
241
|
* the correct metadata for the Honeycomb exporter. We don't actually have that
|
|
@@ -231,8 +253,8 @@ export async function init(config: OpenTelemetryConfig) {
|
|
|
231
253
|
return;
|
|
232
254
|
}
|
|
233
255
|
|
|
234
|
-
const traceExporter = getTraceExporter(config);
|
|
235
256
|
const metricExporter = getMetricExporter(config);
|
|
257
|
+
const spanProcessor = getSpanProcessor(config);
|
|
236
258
|
|
|
237
259
|
let sampler: Sampler;
|
|
238
260
|
switch (config.openTelemetrySamplerType ?? 'always-on') {
|
|
@@ -254,28 +276,13 @@ export async function init(config: OpenTelemetryConfig) {
|
|
|
254
276
|
throw new Error(`Unknown OpenTelemetry sampler type: ${config.openTelemetrySamplerType}`);
|
|
255
277
|
}
|
|
256
278
|
|
|
257
|
-
let spanProcessor: SpanProcessor;
|
|
258
|
-
switch (config.openTelemetrySpanProcessor ?? 'batch') {
|
|
259
|
-
case 'batch': {
|
|
260
|
-
spanProcessor = new FilterBatchSpanProcessor(traceExporter, filter);
|
|
261
|
-
break;
|
|
262
|
-
}
|
|
263
|
-
case 'simple': {
|
|
264
|
-
spanProcessor = new SimpleSpanProcessor(traceExporter);
|
|
265
|
-
break;
|
|
266
|
-
}
|
|
267
|
-
default: {
|
|
268
|
-
throw new Error(`Unknown OpenTelemetry span processor: ${config.openTelemetrySpanProcessor}`);
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
|
|
272
279
|
// Much of this functionality is copied from `@opentelemetry/sdk-node`, but
|
|
273
280
|
// we can't use the SDK directly because of the fact that we load our config
|
|
274
281
|
// asynchronously. We need to initialize our instrumentations first; only
|
|
275
282
|
// then can we actually start requiring all of our code that loads our config
|
|
276
283
|
// and ultimately tells us how to configure OpenTelemetry.
|
|
277
284
|
|
|
278
|
-
let resource =
|
|
285
|
+
let resource = detectResourcesSync({
|
|
279
286
|
detectors: [awsEc2Detector, processDetector, envDetector],
|
|
280
287
|
});
|
|
281
288
|
|
|
@@ -290,7 +297,9 @@ export async function init(config: OpenTelemetryConfig) {
|
|
|
290
297
|
sampler,
|
|
291
298
|
resource,
|
|
292
299
|
});
|
|
293
|
-
|
|
300
|
+
if (spanProcessor) {
|
|
301
|
+
nodeTracerProvider.addSpanProcessor(spanProcessor);
|
|
302
|
+
}
|
|
294
303
|
nodeTracerProvider.register();
|
|
295
304
|
instrumentations.forEach((i) => i.setTracerProvider(nodeTracerProvider));
|
|
296
305
|
|
|
@@ -299,13 +308,16 @@ export async function init(config: OpenTelemetryConfig) {
|
|
|
299
308
|
|
|
300
309
|
// Set up metrics instrumentation if it's enabled.
|
|
301
310
|
if (metricExporter) {
|
|
302
|
-
const meterProvider = new MeterProvider({
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
311
|
+
const meterProvider = new MeterProvider({
|
|
312
|
+
resource,
|
|
313
|
+
readers: [
|
|
314
|
+
new PeriodicExportingMetricReader({
|
|
315
|
+
exporter: metricExporter,
|
|
316
|
+
exportIntervalMillis: config.openTelemetryMetricExportIntervalMillis ?? 30_000,
|
|
317
|
+
}),
|
|
318
|
+
],
|
|
307
319
|
});
|
|
308
|
-
|
|
320
|
+
metrics.setGlobalMeterProvider(meterProvider);
|
|
309
321
|
}
|
|
310
322
|
}
|
|
311
323
|
|
package/src/metrics.ts
CHANGED
|
@@ -107,7 +107,7 @@ export interface createObservableValueGaugesOptions extends MetricOptions {
|
|
|
107
107
|
* - `${name}.max`
|
|
108
108
|
* - `${name}.avg`
|
|
109
109
|
*/
|
|
110
|
-
export
|
|
110
|
+
export function createObservableValueGauges(
|
|
111
111
|
meter: Meter,
|
|
112
112
|
name: string,
|
|
113
113
|
options: createObservableValueGaugesOptions,
|
package/src/tracing.test.ts
CHANGED
|
@@ -7,13 +7,14 @@ import { AsyncHooksContextManager } from '@opentelemetry/context-async-hooks';
|
|
|
7
7
|
describe('instrumented', () => {
|
|
8
8
|
let contextManager: AsyncHooksContextManager;
|
|
9
9
|
const exporter = new tracing.InMemorySpanExporter();
|
|
10
|
+
const spanProcessor = new tracing.SimpleSpanProcessor(exporter);
|
|
10
11
|
|
|
11
12
|
before(async () => {
|
|
12
13
|
await init({
|
|
13
14
|
openTelemetryEnabled: true,
|
|
14
15
|
openTelemetryExporter: exporter,
|
|
15
16
|
openTelemetrySamplerType: 'always-on',
|
|
16
|
-
openTelemetrySpanProcessor:
|
|
17
|
+
openTelemetrySpanProcessor: spanProcessor,
|
|
17
18
|
});
|
|
18
19
|
});
|
|
19
20
|
|
|
@@ -23,6 +24,7 @@ describe('instrumented', () => {
|
|
|
23
24
|
});
|
|
24
25
|
|
|
25
26
|
afterEach(async () => {
|
|
27
|
+
await spanProcessor.forceFlush();
|
|
26
28
|
exporter.reset();
|
|
27
29
|
context.disable();
|
|
28
30
|
});
|
|
@@ -35,6 +37,7 @@ describe('instrumented', () => {
|
|
|
35
37
|
it('records a span on success', async () => {
|
|
36
38
|
await instrumented('test-success', () => 'foo');
|
|
37
39
|
|
|
40
|
+
await spanProcessor.forceFlush();
|
|
38
41
|
const spans = exporter.getFinishedSpans();
|
|
39
42
|
assert.lengthOf(spans, 1);
|
|
40
43
|
assert.equal(spans[0].name, 'test-success');
|
|
@@ -56,6 +59,7 @@ describe('instrumented', () => {
|
|
|
56
59
|
assert.equal(maybeError?.message, 'foo');
|
|
57
60
|
|
|
58
61
|
// Ensure the correct span was recorded.
|
|
62
|
+
await spanProcessor.forceFlush();
|
|
59
63
|
const spans = exporter.getFinishedSpans();
|
|
60
64
|
assert.lengthOf(spans, 1);
|
|
61
65
|
assert.equal(spans[0].name, 'test-failure');
|
package/tsconfig.json
CHANGED