@aztec/telemetry-client 0.0.0-test.0 → 0.0.1-commit.023c3e5
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/dest/attributes.d.ts +33 -9
- package/dest/attributes.d.ts.map +1 -1
- package/dest/attributes.js +22 -8
- package/dest/bench.d.ts +6 -1
- package/dest/bench.d.ts.map +1 -1
- package/dest/bench.js +31 -14
- package/dest/config.d.ts +7 -2
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +29 -1
- package/dest/index.d.ts +2 -1
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +1 -0
- package/dest/l1_metrics.d.ts +17 -0
- package/dest/l1_metrics.d.ts.map +1 -0
- package/dest/l1_metrics.js +54 -0
- package/dest/lmdb_metrics.d.ts +5 -3
- package/dest/lmdb_metrics.d.ts.map +1 -1
- package/dest/lmdb_metrics.js +7 -15
- package/dest/metric-utils.d.ts +24 -0
- package/dest/metric-utils.d.ts.map +1 -0
- package/dest/metric-utils.js +59 -0
- package/dest/metrics.d.ts +247 -122
- package/dest/metrics.d.ts.map +1 -1
- package/dest/metrics.js +1239 -120
- package/dest/nodejs_metrics_monitor.d.ts +19 -0
- package/dest/nodejs_metrics_monitor.d.ts.map +1 -0
- package/dest/nodejs_metrics_monitor.js +115 -0
- package/dest/noop.d.ts +9 -4
- package/dest/noop.d.ts.map +1 -1
- package/dest/noop.js +34 -1
- package/dest/otel.d.ts +13 -7
- package/dest/otel.d.ts.map +1 -1
- package/dest/otel.js +142 -21
- package/dest/otel_filter_metric_exporter.d.ts +12 -4
- package/dest/otel_filter_metric_exporter.d.ts.map +1 -1
- package/dest/otel_filter_metric_exporter.js +38 -4
- package/dest/otel_logger_provider.d.ts +1 -1
- package/dest/otel_propagation.d.ts +1 -1
- package/dest/otel_resource.d.ts +1 -1
- package/dest/otel_resource.d.ts.map +1 -1
- package/dest/otel_resource.js +43 -2
- package/dest/prom_otel_adapter.d.ts +61 -12
- package/dest/prom_otel_adapter.d.ts.map +1 -1
- package/dest/prom_otel_adapter.js +157 -48
- package/dest/start.d.ts +3 -2
- package/dest/start.d.ts.map +1 -1
- package/dest/start.js +8 -7
- package/dest/telemetry.d.ts +63 -34
- package/dest/telemetry.d.ts.map +1 -1
- package/dest/telemetry.js +47 -24
- package/dest/vendor/attributes.d.ts +1 -1
- package/dest/vendor/otel-pino-stream.d.ts +1 -2
- package/dest/vendor/otel-pino-stream.d.ts.map +1 -1
- package/dest/vendor/otel-pino-stream.js +2 -2
- package/dest/with_tracer.d.ts +1 -1
- package/dest/with_tracer.d.ts.map +1 -1
- package/dest/wrappers/fetch.d.ts +2 -2
- package/dest/wrappers/fetch.d.ts.map +1 -1
- package/dest/wrappers/fetch.js +7 -5
- package/dest/wrappers/index.d.ts +1 -1
- package/dest/wrappers/json_rpc_server.d.ts +2 -2
- package/dest/wrappers/json_rpc_server.d.ts.map +1 -1
- package/dest/wrappers/l2_block_stream.d.ts +4 -3
- package/dest/wrappers/l2_block_stream.d.ts.map +1 -1
- package/dest/wrappers/l2_block_stream.js +385 -11
- package/package.json +21 -15
- package/src/attributes.ts +42 -11
- package/src/bench.ts +37 -15
- package/src/config.ts +54 -2
- package/src/index.ts +1 -0
- package/src/l1_metrics.ts +65 -0
- package/src/lmdb_metrics.ts +24 -24
- package/src/metric-utils.ts +75 -0
- package/src/metrics.ts +1313 -145
- package/src/nodejs_metrics_monitor.ts +135 -0
- package/src/noop.ts +65 -4
- package/src/otel.ts +155 -26
- package/src/otel_filter_metric_exporter.ts +47 -5
- package/src/otel_resource.ts +57 -2
- package/src/prom_otel_adapter.ts +195 -70
- package/src/start.ts +12 -8
- package/src/telemetry.ts +153 -76
- package/src/vendor/otel-pino-stream.ts +1 -4
- package/src/wrappers/fetch.ts +24 -31
- package/src/wrappers/json_rpc_server.ts +1 -1
- package/src/wrappers/l2_block_stream.ts +6 -2
- package/dest/event_loop_monitor.d.ts +0 -18
- package/dest/event_loop_monitor.d.ts.map +0 -1
- package/dest/event_loop_monitor.js +0 -93
- package/src/event_loop_monitor.ts +0 -119
package/dest/otel_resource.js
CHANGED
|
@@ -1,12 +1,53 @@
|
|
|
1
|
-
import { detectResourcesSync, envDetectorSync, osDetectorSync,
|
|
1
|
+
import { Resource, detectResourcesSync, envDetectorSync, osDetectorSync, serviceInstanceIdDetectorSync } from '@opentelemetry/resources';
|
|
2
|
+
import { ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';
|
|
3
|
+
import { readFileSync } from 'fs';
|
|
4
|
+
import { dirname, resolve } from 'path';
|
|
5
|
+
import { fileURLToPath } from 'url';
|
|
6
|
+
import { AZTEC_NODE_ROLE, AZTEC_REGISTRY_ADDRESS, AZTEC_ROLLUP_ADDRESS, AZTEC_ROLLUP_VERSION } from './attributes.js';
|
|
7
|
+
/** Reads the Aztec client version from the release manifest. */ function getAztecVersion() {
|
|
8
|
+
try {
|
|
9
|
+
const releasePleasePath = resolve(dirname(fileURLToPath(import.meta.url)), '../../../.release-please-manifest.json');
|
|
10
|
+
return JSON.parse(readFileSync(releasePleasePath, 'utf-8'))['.'];
|
|
11
|
+
} catch {
|
|
12
|
+
return undefined;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
2
15
|
export function getOtelResource() {
|
|
3
16
|
const resource = detectResourcesSync({
|
|
4
17
|
detectors: [
|
|
18
|
+
aztecNetworkDetectorSync,
|
|
5
19
|
osDetectorSync,
|
|
6
20
|
envDetectorSync,
|
|
7
|
-
|
|
21
|
+
// this detector is disabled because:
|
|
22
|
+
// 1. our software runs in a docker container, a lot of the attributes detected would be identical across different machines (e.g. all run node v22, executing the same script, running PID 1, etc)
|
|
23
|
+
// 2. it catures process.argv which could contain sensitive values in plain text (e.g. validator private keys)
|
|
24
|
+
// processDetectorSync,
|
|
8
25
|
serviceInstanceIdDetectorSync
|
|
9
26
|
]
|
|
10
27
|
});
|
|
11
28
|
return resource;
|
|
12
29
|
}
|
|
30
|
+
const aztecNetworkDetectorSync = {
|
|
31
|
+
detect () {
|
|
32
|
+
let role;
|
|
33
|
+
if (process.argv.includes('--sequencer')) {
|
|
34
|
+
role = 'sequencer';
|
|
35
|
+
} else if (process.argv.includes('--prover-node')) {
|
|
36
|
+
role = 'prover-node';
|
|
37
|
+
} else if (process.argv.includes('--node')) {
|
|
38
|
+
role = 'node';
|
|
39
|
+
} else if (process.argv.includes('--p2p-bootstrap')) {
|
|
40
|
+
role = 'bootnode';
|
|
41
|
+
}
|
|
42
|
+
const aztecAttributes = {
|
|
43
|
+
// this gets overwritten by OTEL_RESOURCE_ATTRIBUTES (if set)
|
|
44
|
+
[ATTR_SERVICE_NAME]: role ? `aztec-${role}` : undefined,
|
|
45
|
+
[ATTR_SERVICE_VERSION]: getAztecVersion(),
|
|
46
|
+
[AZTEC_NODE_ROLE]: role,
|
|
47
|
+
[AZTEC_ROLLUP_VERSION]: process.env.ROLLUP_VERSION ?? 'canonical',
|
|
48
|
+
[AZTEC_ROLLUP_ADDRESS]: process.env.ROLLUP_CONTRACT_ADDRESS,
|
|
49
|
+
[AZTEC_REGISTRY_ADDRESS]: process.env.REGISTRY_CONTRACT_ADDRESS
|
|
50
|
+
};
|
|
51
|
+
return new Resource(aztecAttributes);
|
|
52
|
+
}
|
|
53
|
+
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type Logger } from '@aztec/foundation/log';
|
|
1
|
+
import { type Logger, type LoggerBindings } from '@aztec/foundation/log';
|
|
2
2
|
import { Registry } from 'prom-client';
|
|
3
3
|
import type { Meter, TelemetryClient } from './telemetry.js';
|
|
4
4
|
/**
|
|
@@ -97,18 +97,67 @@ export declare class OtelGauge<Labels extends LabelsGeneric = NoLabels> implemen
|
|
|
97
97
|
* Resets the gauge to initial state
|
|
98
98
|
*/
|
|
99
99
|
reset(): void;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Implementation of a Histogram collector
|
|
103
|
+
*/
|
|
104
|
+
export declare class OtelHistogram<Labels extends LabelsGeneric = NoLabels> implements IHistogram<Labels> {
|
|
105
|
+
private logger;
|
|
106
|
+
private labelNames;
|
|
107
|
+
private histogram;
|
|
108
|
+
constructor(logger: Logger, meter: Meter, name: string, help: string, buckets?: number[], labelNames?: Array<keyof Labels>);
|
|
109
|
+
/**
|
|
110
|
+
* Starts a timer and returns a function that when called will record the time elapsed
|
|
111
|
+
* @param labels - Optional labels for the observation
|
|
112
|
+
*/
|
|
113
|
+
startTimer(labels?: Labels): () => void;
|
|
114
|
+
/**
|
|
115
|
+
* Observes a value
|
|
116
|
+
* @param value - Value to observe
|
|
117
|
+
*/
|
|
118
|
+
observe(value: number): void;
|
|
119
|
+
/**
|
|
120
|
+
* Observes a value with labels
|
|
121
|
+
* @param labels - Labels object
|
|
122
|
+
* @param value - Value to observe
|
|
123
|
+
*/
|
|
124
|
+
observe(labels: Labels, value: number): void;
|
|
125
|
+
reset(): void;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Implementation of an AvgMinMax collector
|
|
129
|
+
*/
|
|
130
|
+
export declare class OtelAvgMinMax<Labels extends LabelsGeneric = NoLabels> implements IAvgMinMax<Labels> {
|
|
131
|
+
private logger;
|
|
132
|
+
private labelNames;
|
|
133
|
+
private gauges;
|
|
134
|
+
private currentValues;
|
|
135
|
+
private labeledValues;
|
|
136
|
+
constructor(logger: Logger, meter: Meter, name: string, help: string, labelNames?: Array<keyof Labels>);
|
|
100
137
|
/**
|
|
101
|
-
*
|
|
102
|
-
* @param
|
|
103
|
-
* @throws Error if invalid labels are provided
|
|
138
|
+
* Sets the values for calculating avg, min, max
|
|
139
|
+
* @param values - Array of values
|
|
104
140
|
*/
|
|
105
|
-
|
|
141
|
+
set(values: number[]): void;
|
|
106
142
|
/**
|
|
107
|
-
*
|
|
108
|
-
* @param
|
|
109
|
-
* @
|
|
143
|
+
* Sets the values for calculating avg, min, max with labels
|
|
144
|
+
* @param labels - Labels object
|
|
145
|
+
* @param values - Array of values
|
|
110
146
|
*/
|
|
111
|
-
|
|
147
|
+
set(labels: Labels, values: number[]): void;
|
|
148
|
+
/**
|
|
149
|
+
* Resets all stored values
|
|
150
|
+
*/
|
|
151
|
+
reset(): void;
|
|
152
|
+
/**
|
|
153
|
+
* General function to observe an aggregation
|
|
154
|
+
* @param result - Observer result
|
|
155
|
+
* @param aggregateFn - Function that calculates the aggregation
|
|
156
|
+
*/
|
|
157
|
+
private observeAggregation;
|
|
158
|
+
private observeAvg;
|
|
159
|
+
private observeMin;
|
|
160
|
+
private observeMax;
|
|
112
161
|
}
|
|
113
162
|
/**
|
|
114
163
|
* Otel metrics Adapter
|
|
@@ -116,12 +165,12 @@ export declare class OtelGauge<Labels extends LabelsGeneric = NoLabels> implemen
|
|
|
116
165
|
* Maps the PromClient based MetricsRegister from gossipsub and discv5 services to the Otel MetricsRegister
|
|
117
166
|
*/
|
|
118
167
|
export declare class OtelMetricsAdapter extends Registry implements MetricsRegister {
|
|
119
|
-
private logger;
|
|
120
168
|
private readonly meter;
|
|
121
|
-
|
|
169
|
+
private logger;
|
|
170
|
+
constructor(telemetryClient: TelemetryClient, bindings?: LoggerBindings);
|
|
122
171
|
gauge<Labels extends LabelsGeneric = NoLabels>(configuration: GaugeConfig<Labels>): IGauge<Labels>;
|
|
123
172
|
histogram<Labels extends LabelsGeneric = NoLabels>(configuration: HistogramConfig<Labels>): IHistogram<Labels>;
|
|
124
173
|
avgMinMax<Labels extends LabelsGeneric = NoLabels>(configuration: AvgMinMaxConfig<Labels>): IAvgMinMax<Labels>;
|
|
125
174
|
}
|
|
126
175
|
export {};
|
|
127
|
-
//# sourceMappingURL=
|
|
176
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvbV9vdGVsX2FkYXB0ZXIuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9wcm9tX290ZWxfYWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQUUsS0FBSyxjQUFjLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFHdkYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUd2QyxPQUFPLEtBQUssRUFBYSxLQUFLLEVBQW1CLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpGOztHQUVHO0FBQ0gsS0FBSyxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQ3ZCLE1BQU0sTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDO0FBQ2hDLE1BQU0sTUFBTSxlQUFlLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUV4RCxvQkFBWSxhQUFhO0lBQ3ZCLE9BQU8sWUFBWTtJQUNuQixPQUFPLFlBQVk7Q0FDcEI7QUFFRCxLQUFLLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3RDLEtBQUssYUFBYSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDO0FBQ3JELEtBQUssU0FBUyxDQUFDLE1BQU0sU0FBUyxhQUFhLElBQUksT0FBTyxDQUFDLE1BQU0sTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzdFLFVBQVUsU0FBUyxDQUFDLE1BQU0sU0FBUyxhQUFhO0lBQzlDLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDaEM7QUFFRCxVQUFVLE1BQU0sQ0FBQyxNQUFNLFNBQVMsYUFBYSxHQUFHLFFBQVE7SUFDdEQsR0FBRyxFQUFFLFFBQVEsU0FBUyxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxNQUFNLEtBQUssSUFBSSxH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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prom_otel_adapter.d.ts","sourceRoot":"","sources":["../src/prom_otel_adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"prom_otel_adapter.d.ts","sourceRoot":"","sources":["../src/prom_otel_adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createLogger } from '@aztec/foundation/log';
|
|
2
|
+
import { Timer } from '@aztec/foundation/timer';
|
|
2
3
|
import { Registry } from 'prom-client';
|
|
3
4
|
export var MessageSource = /*#__PURE__*/ function(MessageSource) {
|
|
4
5
|
MessageSource["forward"] = "forward";
|
|
@@ -34,9 +35,11 @@ export var MessageSource = /*#__PURE__*/ function(MessageSource) {
|
|
|
34
35
|
this.labeledValues = new Map();
|
|
35
36
|
this.collectFns = [];
|
|
36
37
|
this._collect = ()=>{};
|
|
37
|
-
|
|
38
|
+
const metricDef = {
|
|
39
|
+
name,
|
|
38
40
|
description: help
|
|
39
|
-
}
|
|
41
|
+
};
|
|
42
|
+
this.gauge = meter.createObservableGauge(metricDef);
|
|
40
43
|
// Only observe in the callback when collect() is called
|
|
41
44
|
this.gauge.addCallback(this.handleObservation.bind(this));
|
|
42
45
|
}
|
|
@@ -59,7 +62,7 @@ export var MessageSource = /*#__PURE__*/ function(MessageSource) {
|
|
|
59
62
|
return;
|
|
60
63
|
}
|
|
61
64
|
for (const [labelStr, value] of this.labeledValues.entries()){
|
|
62
|
-
const labels =
|
|
65
|
+
const labels = parseLabelsSafely(labelStr, this.logger);
|
|
63
66
|
if (labels) {
|
|
64
67
|
result.observe(value, labels);
|
|
65
68
|
}
|
|
@@ -71,7 +74,7 @@ export var MessageSource = /*#__PURE__*/ function(MessageSource) {
|
|
|
71
74
|
return;
|
|
72
75
|
}
|
|
73
76
|
if (labelsOrValue) {
|
|
74
|
-
|
|
77
|
+
validateLabels(labelsOrValue, this.labelNames, 'Gauge');
|
|
75
78
|
const labelKey = JSON.stringify(labelsOrValue);
|
|
76
79
|
const currentValue = this.labeledValues.get(labelKey) ?? 0;
|
|
77
80
|
this.labeledValues.set(labelKey, currentValue + (value ?? 1));
|
|
@@ -84,7 +87,7 @@ export var MessageSource = /*#__PURE__*/ function(MessageSource) {
|
|
|
84
87
|
this.currentValue = labelsOrValue;
|
|
85
88
|
return;
|
|
86
89
|
}
|
|
87
|
-
|
|
90
|
+
validateLabels(labelsOrValue, this.labelNames, 'Gauge');
|
|
88
91
|
const labelKey = JSON.stringify(labelsOrValue);
|
|
89
92
|
this.labeledValues.set(labelKey, value);
|
|
90
93
|
}
|
|
@@ -93,7 +96,7 @@ export var MessageSource = /*#__PURE__*/ function(MessageSource) {
|
|
|
93
96
|
* @param labels - Optional labels object
|
|
94
97
|
*/ dec(labels) {
|
|
95
98
|
if (labels) {
|
|
96
|
-
|
|
99
|
+
validateLabels(labels, this.labelNames, 'Gauge');
|
|
97
100
|
const labelKey = JSON.stringify(labels);
|
|
98
101
|
const currentValue = this.labeledValues.get(labelKey) ?? 0;
|
|
99
102
|
this.labeledValues.set(labelKey, currentValue - 1);
|
|
@@ -107,77 +110,183 @@ export var MessageSource = /*#__PURE__*/ function(MessageSource) {
|
|
|
107
110
|
this.currentValue = 0;
|
|
108
111
|
this.labeledValues.clear();
|
|
109
112
|
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Implementation of a Histogram collector
|
|
116
|
+
*/ export class OtelHistogram {
|
|
117
|
+
logger;
|
|
118
|
+
labelNames;
|
|
119
|
+
histogram;
|
|
120
|
+
constructor(logger, meter, name, help, buckets = [], labelNames = []){
|
|
121
|
+
this.logger = logger;
|
|
122
|
+
this.labelNames = labelNames;
|
|
123
|
+
const metricDef = {
|
|
124
|
+
name,
|
|
125
|
+
description: help
|
|
126
|
+
};
|
|
127
|
+
this.histogram = meter.createHistogram(metricDef, {
|
|
128
|
+
advice: buckets.length ? {
|
|
129
|
+
explicitBucketBoundaries: buckets
|
|
130
|
+
} : undefined
|
|
131
|
+
});
|
|
132
|
+
}
|
|
110
133
|
/**
|
|
111
|
-
*
|
|
112
|
-
* @param labels -
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
throw new Error('Gauge was initialized without labels support');
|
|
134
|
+
* Starts a timer and returns a function that when called will record the time elapsed
|
|
135
|
+
* @param labels - Optional labels for the observation
|
|
136
|
+
*/ startTimer(labels) {
|
|
137
|
+
if (labels) {
|
|
138
|
+
validateLabels(labels, this.labelNames, 'Histogram');
|
|
117
139
|
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
140
|
+
const timer = new Timer();
|
|
141
|
+
return ()=>{
|
|
142
|
+
// Use timer.s() here to get the duration in seconds since this is only currently used by gossipsub_heartbeat_duration_seconds
|
|
143
|
+
const duration = timer.s();
|
|
144
|
+
if (labels) {
|
|
145
|
+
this.observe(labels, duration);
|
|
146
|
+
} else {
|
|
147
|
+
this.observe(duration);
|
|
121
148
|
}
|
|
122
|
-
}
|
|
149
|
+
};
|
|
123
150
|
}
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
return JSON.parse(labelStr);
|
|
131
|
-
} catch {
|
|
132
|
-
this.logger.error(`Failed to parse label string: ${labelStr}`);
|
|
133
|
-
return null;
|
|
151
|
+
observe(labelsOrValue, value) {
|
|
152
|
+
if (typeof labelsOrValue === 'number') {
|
|
153
|
+
this.histogram.record(labelsOrValue);
|
|
154
|
+
} else {
|
|
155
|
+
validateLabels(labelsOrValue, this.labelNames, 'Histogram');
|
|
156
|
+
this.histogram.record(value, labelsOrValue);
|
|
134
157
|
}
|
|
135
158
|
}
|
|
159
|
+
reset() {
|
|
160
|
+
// OpenTelemetry histograms cannot be reset, but we implement the interface
|
|
161
|
+
this.logger.silent('OpenTelemetry histograms cannot be fully reset');
|
|
162
|
+
}
|
|
136
163
|
}
|
|
137
164
|
/**
|
|
138
|
-
*
|
|
139
|
-
*/ class
|
|
165
|
+
* Implementation of an AvgMinMax collector
|
|
166
|
+
*/ export class OtelAvgMinMax {
|
|
140
167
|
logger;
|
|
141
|
-
|
|
168
|
+
labelNames;
|
|
169
|
+
gauges;
|
|
170
|
+
currentValues;
|
|
171
|
+
labeledValues;
|
|
172
|
+
constructor(logger, meter, name, help, labelNames = []){
|
|
142
173
|
this.logger = logger;
|
|
174
|
+
this.labelNames = labelNames;
|
|
175
|
+
this.currentValues = [];
|
|
176
|
+
this.labeledValues = new Map();
|
|
177
|
+
// Create three separate gauges for avg, min, and max
|
|
178
|
+
this.gauges = {
|
|
179
|
+
avg: meter.createObservableGauge({
|
|
180
|
+
name: `${name}_avg`,
|
|
181
|
+
description: `${help} (average)`
|
|
182
|
+
}),
|
|
183
|
+
min: meter.createObservableGauge({
|
|
184
|
+
name: `${name}_min`,
|
|
185
|
+
description: `${help} (minimum)`
|
|
186
|
+
}),
|
|
187
|
+
max: meter.createObservableGauge({
|
|
188
|
+
name: `${name}_max`,
|
|
189
|
+
description: `${help} (maximum)`
|
|
190
|
+
})
|
|
191
|
+
};
|
|
192
|
+
// Register callbacks for each gauge
|
|
193
|
+
this.gauges.avg.addCallback(this.observeAvg.bind(this));
|
|
194
|
+
this.gauges.min.addCallback(this.observeMin.bind(this));
|
|
195
|
+
this.gauges.max.addCallback(this.observeMax.bind(this));
|
|
143
196
|
}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
197
|
+
set(labelsOrValues, values) {
|
|
198
|
+
if (Array.isArray(labelsOrValues)) {
|
|
199
|
+
this.currentValues = labelsOrValues;
|
|
200
|
+
return;
|
|
201
|
+
} else {
|
|
202
|
+
validateLabels(labelsOrValues, this.labelNames, 'AvgMinMax');
|
|
203
|
+
const labelKey = JSON.stringify(labelsOrValues);
|
|
204
|
+
this.labeledValues.set(labelKey, values || []);
|
|
205
|
+
}
|
|
147
206
|
}
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
207
|
+
/**
|
|
208
|
+
* Resets all stored values
|
|
209
|
+
*/ reset() {
|
|
210
|
+
this.currentValues = [];
|
|
211
|
+
this.labeledValues.clear();
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* General function to observe an aggregation
|
|
215
|
+
* @param result - Observer result
|
|
216
|
+
* @param aggregateFn - Function that calculates the aggregation
|
|
217
|
+
*/ observeAggregation(result, aggregateFn) {
|
|
218
|
+
// Observe unlabeled values
|
|
219
|
+
if (this.currentValues.length > 0) {
|
|
220
|
+
result.observe(aggregateFn(this.currentValues));
|
|
221
|
+
}
|
|
222
|
+
// Observe labeled values
|
|
223
|
+
for (const [labelStr, values] of this.labeledValues.entries()){
|
|
224
|
+
if (values.length > 0) {
|
|
225
|
+
const labels = parseLabelsSafely(labelStr, this.logger);
|
|
226
|
+
if (labels) {
|
|
227
|
+
result.observe(aggregateFn(values), labels);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
observeAvg(result) {
|
|
233
|
+
this.observeAggregation(result, (arr)=>arr.reduce((sum, val)=>sum + val, 0) / arr.length);
|
|
234
|
+
}
|
|
235
|
+
observeMin(result) {
|
|
236
|
+
this.observeAggregation(result, (arr)=>Math.min.apply(null, arr));
|
|
237
|
+
}
|
|
238
|
+
observeMax(result) {
|
|
239
|
+
this.observeAggregation(result, (arr)=>Math.max.apply(null, arr));
|
|
151
240
|
}
|
|
152
241
|
}
|
|
153
242
|
/**
|
|
154
|
-
*
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
243
|
+
* Validates that provided labels match the expected schema
|
|
244
|
+
* @param labels - Labels object to validate
|
|
245
|
+
* @param labelNames - Array of allowed label names
|
|
246
|
+
* @param metricType - Type of metric for error message ('Gauge', 'Histogram', 'AvgMinMax')
|
|
247
|
+
* @throws Error if invalid labels are provided
|
|
248
|
+
*/ function validateLabels(labels, labelNames, metricType) {
|
|
249
|
+
if (labelNames.length === 0) {
|
|
250
|
+
throw new Error(`${metricType} was initialized without labels support`);
|
|
251
|
+
}
|
|
252
|
+
for (const key of Object.keys(labels)){
|
|
253
|
+
if (!labelNames.includes(key)) {
|
|
254
|
+
throw new Error(`Invalid label key: ${key}`);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Safely parses label string back to object
|
|
260
|
+
* @param labelStr - Stringified labels object
|
|
261
|
+
* @param logger - Logger instance for error reporting
|
|
262
|
+
* @returns Labels object or null if parsing fails
|
|
263
|
+
*/ function parseLabelsSafely(labelStr, logger) {
|
|
264
|
+
try {
|
|
265
|
+
return JSON.parse(labelStr);
|
|
266
|
+
} catch {
|
|
267
|
+
logger.error(`Failed to parse label string: ${labelStr}`);
|
|
268
|
+
return null;
|
|
269
|
+
}
|
|
162
270
|
}
|
|
163
271
|
/**
|
|
164
272
|
* Otel metrics Adapter
|
|
165
273
|
*
|
|
166
274
|
* Maps the PromClient based MetricsRegister from gossipsub and discv5 services to the Otel MetricsRegister
|
|
167
275
|
*/ export class OtelMetricsAdapter extends Registry {
|
|
168
|
-
logger;
|
|
169
276
|
meter;
|
|
170
|
-
|
|
171
|
-
|
|
277
|
+
logger;
|
|
278
|
+
constructor(telemetryClient, bindings){
|
|
279
|
+
super();
|
|
280
|
+
this.logger = createLogger('telemetry:otel-metrics-adapter', bindings);
|
|
172
281
|
this.meter = telemetryClient.getMeter('metrics-adapter');
|
|
173
282
|
}
|
|
174
283
|
gauge(configuration) {
|
|
175
284
|
return new OtelGauge(this.logger, this.meter, configuration.name, configuration.help, configuration.labelNames);
|
|
176
285
|
}
|
|
177
286
|
histogram(configuration) {
|
|
178
|
-
return new
|
|
287
|
+
return new OtelHistogram(this.logger, this.meter, configuration.name, configuration.help, configuration.buckets, configuration.labelNames);
|
|
179
288
|
}
|
|
180
289
|
avgMinMax(configuration) {
|
|
181
|
-
return new
|
|
290
|
+
return new OtelAvgMinMax(this.logger, this.meter, configuration.name, configuration.help, configuration.labelNames);
|
|
182
291
|
}
|
|
183
292
|
}
|
package/dest/start.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { type LoggerBindings } from '@aztec/foundation/log';
|
|
1
2
|
import type { TelemetryClientConfig } from './config.js';
|
|
2
3
|
import type { TelemetryClient } from './telemetry.js';
|
|
3
4
|
export * from './config.js';
|
|
4
|
-
export declare function initTelemetryClient(config: TelemetryClientConfig): TelemetryClient
|
|
5
|
+
export declare function initTelemetryClient(config: TelemetryClientConfig, bindings?: LoggerBindings): Promise<TelemetryClient>;
|
|
5
6
|
export declare function getTelemetryClient(): TelemetryClient;
|
|
6
|
-
//# sourceMappingURL=
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnQuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zdGFydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxjQUFjLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFFMUUsT0FBTyxLQUFLLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFekQsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEQsY0FBYyxhQUFhLENBQUM7QUFLNUIsd0JBQXNCLG1CQUFtQixDQUN2QyxNQUFNLEVBQUUscUJBQXFCLEVBQzdCLFFBQVEsQ0FBQyxFQUFFLGNBQWMsR0FDeEIsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQWtCMUI7QUFFRCx3QkFBZ0Isa0JBQWtCLElBQUksZUFBZSxDQUVwRCJ9
|
package/dest/start.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../src/start.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../src/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AAE1E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,cAAc,aAAa,CAAC;AAK5B,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,qBAAqB,EAC7B,QAAQ,CAAC,EAAE,cAAc,GACxB,OAAO,CAAC,eAAe,CAAC,CAkB1B;AAED,wBAAgB,kBAAkB,IAAI,eAAe,CAEpD"}
|
package/dest/start.js
CHANGED
|
@@ -1,22 +1,23 @@
|
|
|
1
1
|
import { createLogger } from '@aztec/foundation/log';
|
|
2
2
|
import { NoopTelemetryClient } from './noop.js';
|
|
3
|
-
import { OpenTelemetryClient } from './otel.js';
|
|
4
3
|
export * from './config.js';
|
|
5
|
-
let
|
|
4
|
+
let initialized = false;
|
|
6
5
|
let telemetry = new NoopTelemetryClient();
|
|
7
|
-
export function initTelemetryClient(config) {
|
|
8
|
-
const log = createLogger('telemetry:client');
|
|
9
|
-
if (
|
|
6
|
+
export async function initTelemetryClient(config, bindings) {
|
|
7
|
+
const log = createLogger('telemetry:client', bindings);
|
|
8
|
+
if (initialized) {
|
|
10
9
|
log.warn('Telemetry client has already been initialized once');
|
|
11
10
|
return telemetry;
|
|
12
11
|
}
|
|
13
|
-
if (config.metricsCollectorUrl) {
|
|
12
|
+
if (config.metricsCollectorUrl || config.publicMetricsCollectorUrl) {
|
|
14
13
|
log.info(`Using OpenTelemetry client with custom collector`);
|
|
14
|
+
// Lazy load OpenTelemetry to avoid loading heavy deps at startup
|
|
15
|
+
const { OpenTelemetryClient } = await import('./otel.js');
|
|
15
16
|
telemetry = OpenTelemetryClient.createAndStart(config, log);
|
|
16
17
|
} else {
|
|
17
18
|
log.info('Using NoopTelemetryClient');
|
|
18
19
|
}
|
|
19
|
-
|
|
20
|
+
initialized = true;
|
|
20
21
|
return telemetry;
|
|
21
22
|
}
|
|
22
23
|
export function getTelemetryClient() {
|