@bsb/observable-opentelemetry 9.1.2 → 9.6.12
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/LICENSE +664 -664
- package/README.md +2 -2
- package/lib/plugins/observable-opentelemetry/index.d.ts +34 -34
- package/lib/plugins/observable-opentelemetry/index.js +36 -30
- package/lib/schemas/observable-opentelemetry.json +142 -1
- package/lib/schemas/observable-opentelemetry.plugin.json +149 -2
- package/package.json +18 -18
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@ OpenTelemetry observable plugin for BSB with full OTLP export support for traces
|
|
|
5
5
|
## Key Features
|
|
6
6
|
|
|
7
7
|
- Full OpenTelemetry integration for traces, metrics, and logs
|
|
8
|
-
- OTLP export over HTTP
|
|
8
|
+
- OTLP export over HTTP
|
|
9
9
|
- Customizable resource attributes for service metadata
|
|
10
10
|
- Configurable sampling to control trace collection rates
|
|
11
11
|
- Efficient batch processing for data export
|
|
@@ -50,7 +50,7 @@ plugins:
|
|
|
50
50
|
| `serviceName` | Name of your service | - |
|
|
51
51
|
| `serviceVersion` | Version of your service | - |
|
|
52
52
|
| `endpoint` | OTLP collector endpoint URL | `http://localhost:4318` |
|
|
53
|
-
| `export.protocol` | Export protocol
|
|
53
|
+
| `export.protocol` | Export protocol setting; current exporter implementation uses `http` | `http` |
|
|
54
54
|
| `export.interval` | Export interval in milliseconds | `5000` |
|
|
55
55
|
| `export.maxBatchSize` | Maximum batch size for exports | `512` |
|
|
56
56
|
| `enabled` | Toggle traces, metrics, and logs individually | All enabled |
|
|
@@ -26,65 +26,65 @@
|
|
|
26
26
|
*/
|
|
27
27
|
import { BSBObservable, BSBObservableConstructor, BSBError } from "@bsb/base";
|
|
28
28
|
import { DTrace, LogMeta } from "@bsb/base";
|
|
29
|
-
import * as av from "
|
|
29
|
+
import * as av from "anyvali";
|
|
30
30
|
/**
|
|
31
31
|
* Configuration schema for OpenTelemetry plugin
|
|
32
32
|
*/
|
|
33
33
|
export declare const OpenTelemetryConfigSchema: av.ObjectSchema<{
|
|
34
|
-
serviceName: av.
|
|
34
|
+
serviceName: av.StringSchema;
|
|
35
35
|
serviceVersion: av.OptionalSchema<av.StringSchema>;
|
|
36
|
-
endpoint: av.
|
|
36
|
+
endpoint: av.StringSchema;
|
|
37
37
|
export: av.ObjectSchema<{
|
|
38
|
-
protocol: av.
|
|
39
|
-
interval: av.
|
|
40
|
-
maxBatchSize: av.
|
|
38
|
+
protocol: av.EnumSchema<string[]>;
|
|
39
|
+
interval: av.Int32Schema;
|
|
40
|
+
maxBatchSize: av.Int32Schema;
|
|
41
41
|
}>;
|
|
42
42
|
enabled: av.ObjectSchema<{
|
|
43
|
-
traces: av.
|
|
44
|
-
metrics: av.
|
|
45
|
-
logs: av.
|
|
43
|
+
traces: av.BoolSchema;
|
|
44
|
+
metrics: av.BoolSchema;
|
|
45
|
+
logs: av.BoolSchema;
|
|
46
46
|
}>;
|
|
47
|
-
resourceAttributes: av.
|
|
48
|
-
samplingRate: av.
|
|
47
|
+
resourceAttributes: av.RecordSchema<av.StringSchema>;
|
|
48
|
+
samplingRate: av.NumberSchema;
|
|
49
49
|
}>;
|
|
50
50
|
export type OpenTelemetryConfig = av.Infer<typeof OpenTelemetryConfigSchema>;
|
|
51
51
|
export declare const Config: import("@bsb/base").BSBPluginConfigClass<av.ObjectSchema<{
|
|
52
|
-
serviceName: av.
|
|
52
|
+
serviceName: av.StringSchema;
|
|
53
53
|
serviceVersion: av.OptionalSchema<av.StringSchema>;
|
|
54
|
-
endpoint: av.
|
|
54
|
+
endpoint: av.StringSchema;
|
|
55
55
|
export: av.ObjectSchema<{
|
|
56
|
-
protocol: av.
|
|
57
|
-
interval: av.
|
|
58
|
-
maxBatchSize: av.
|
|
56
|
+
protocol: av.EnumSchema<string[]>;
|
|
57
|
+
interval: av.Int32Schema;
|
|
58
|
+
maxBatchSize: av.Int32Schema;
|
|
59
59
|
}>;
|
|
60
60
|
enabled: av.ObjectSchema<{
|
|
61
|
-
traces: av.
|
|
62
|
-
metrics: av.
|
|
63
|
-
logs: av.
|
|
61
|
+
traces: av.BoolSchema;
|
|
62
|
+
metrics: av.BoolSchema;
|
|
63
|
+
logs: av.BoolSchema;
|
|
64
64
|
}>;
|
|
65
|
-
resourceAttributes: av.
|
|
66
|
-
samplingRate: av.
|
|
65
|
+
resourceAttributes: av.RecordSchema<av.StringSchema>;
|
|
66
|
+
samplingRate: av.NumberSchema;
|
|
67
67
|
}>>;
|
|
68
68
|
/**
|
|
69
69
|
* OpenTelemetry observable plugin with OTLP export
|
|
70
70
|
*/
|
|
71
71
|
export declare class Plugin extends BSBObservable<InstanceType<typeof Config>> {
|
|
72
72
|
static Config: import("@bsb/base").BSBPluginConfigClass<av.ObjectSchema<{
|
|
73
|
-
serviceName: av.
|
|
73
|
+
serviceName: av.StringSchema;
|
|
74
74
|
serviceVersion: av.OptionalSchema<av.StringSchema>;
|
|
75
|
-
endpoint: av.
|
|
75
|
+
endpoint: av.StringSchema;
|
|
76
76
|
export: av.ObjectSchema<{
|
|
77
|
-
protocol: av.
|
|
78
|
-
interval: av.
|
|
79
|
-
maxBatchSize: av.
|
|
77
|
+
protocol: av.EnumSchema<string[]>;
|
|
78
|
+
interval: av.Int32Schema;
|
|
79
|
+
maxBatchSize: av.Int32Schema;
|
|
80
80
|
}>;
|
|
81
81
|
enabled: av.ObjectSchema<{
|
|
82
|
-
traces: av.
|
|
83
|
-
metrics: av.
|
|
84
|
-
logs: av.
|
|
82
|
+
traces: av.BoolSchema;
|
|
83
|
+
metrics: av.BoolSchema;
|
|
84
|
+
logs: av.BoolSchema;
|
|
85
85
|
}>;
|
|
86
|
-
resourceAttributes: av.
|
|
87
|
-
samplingRate: av.
|
|
86
|
+
resourceAttributes: av.RecordSchema<av.StringSchema>;
|
|
87
|
+
samplingRate: av.NumberSchema;
|
|
88
88
|
}>>;
|
|
89
89
|
private logFormatter;
|
|
90
90
|
private sdk;
|
|
@@ -118,8 +118,8 @@ export declare class Plugin extends BSBObservable<InstanceType<typeof Config>> {
|
|
|
118
118
|
setGauge(timestamp: number, pluginName: string, name: string, value: number, labels?: Record<string, string>): void;
|
|
119
119
|
createHistogram(timestamp: number, pluginName: string, name: string, description: string, help: string, boundaries?: number[], labels?: string[]): void;
|
|
120
120
|
observeHistogram(timestamp: number, pluginName: string, name: string, value: number, labels?: Record<string, string>): void;
|
|
121
|
-
spanStart(trace: DTrace, pluginName: string, spanName: string, parentSpanId: string | null, attributes?: Record<string, string | number | boolean>): void;
|
|
122
|
-
spanEnd(trace: DTrace, pluginName: string, attributes?: Record<string, string | number | boolean>): void;
|
|
123
|
-
spanError(trace: DTrace, pluginName: string, error: Error, attributes?: Record<string, string | number | boolean>): void;
|
|
121
|
+
spanStart(timestamp: number, trace: DTrace, pluginName: string, spanName: string, parentSpanId: string | null, attributes?: Record<string, string | number | boolean>): void;
|
|
122
|
+
spanEnd(timestamp: number, trace: DTrace, pluginName: string, attributes?: Record<string, string | number | boolean>): void;
|
|
123
|
+
spanError(timestamp: number, trace: DTrace, pluginName: string, error: Error, attributes?: Record<string, string | number | boolean>): void;
|
|
124
124
|
dispose(): Promise<void>;
|
|
125
125
|
}
|
|
@@ -25,9 +25,9 @@
|
|
|
25
25
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
26
26
|
*/
|
|
27
27
|
import { BSBObservable, createConfigSchema, LogFormatter, BSBError } from "@bsb/base";
|
|
28
|
-
import * as av from "
|
|
28
|
+
import * as av from "anyvali";
|
|
29
29
|
import * as api from "@opentelemetry/api";
|
|
30
|
-
import {
|
|
30
|
+
import { resourceFromAttributes } from "@opentelemetry/resources";
|
|
31
31
|
import { ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION } from "@opentelemetry/semantic-conventions";
|
|
32
32
|
import { NodeSDK } from "@opentelemetry/sdk-node";
|
|
33
33
|
import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http";
|
|
@@ -39,26 +39,25 @@ import { BatchLogRecordProcessor, LoggerProvider } from "@opentelemetry/sdk-logs
|
|
|
39
39
|
* Configuration schema for OpenTelemetry plugin
|
|
40
40
|
*/
|
|
41
41
|
export const OpenTelemetryConfigSchema = av.object({
|
|
42
|
-
serviceName: av.
|
|
43
|
-
serviceVersion: av.optional(av.string()),
|
|
44
|
-
endpoint: av.
|
|
42
|
+
serviceName: av.string().default("bsb-service").describe("Service name reported through OpenTelemetry resource attributes"),
|
|
43
|
+
serviceVersion: av.optional(av.string()).describe("Optional service version reported through OpenTelemetry resource attributes"),
|
|
44
|
+
endpoint: av.string().format("url").default("http://localhost:4318").describe("OTLP collector endpoint base URL"),
|
|
45
45
|
export: av.object({
|
|
46
|
-
protocol: av.
|
|
47
|
-
interval: av.
|
|
48
|
-
maxBatchSize: av.
|
|
49
|
-
}
|
|
46
|
+
protocol: av.enum_(["http"]).default("http").describe("OTLP HTTP transport protocol setting"),
|
|
47
|
+
interval: av.int32().min(100).default(5000).describe("Metric export interval in milliseconds"),
|
|
48
|
+
maxBatchSize: av.int32().min(1).default(512).describe("Maximum number of telemetry items sent in one export batch"),
|
|
49
|
+
}).describe("OpenTelemetry export settings"),
|
|
50
50
|
enabled: av.object({
|
|
51
|
-
traces: av.
|
|
52
|
-
metrics: av.
|
|
53
|
-
logs: av.
|
|
54
|
-
}
|
|
55
|
-
resourceAttributes: av.
|
|
56
|
-
samplingRate: av.
|
|
57
|
-
}
|
|
51
|
+
traces: av.bool().default(true).describe("Whether trace export is enabled"),
|
|
52
|
+
metrics: av.bool().default(true).describe("Whether metric export is enabled"),
|
|
53
|
+
logs: av.bool().default(true).describe("Whether log export is enabled"),
|
|
54
|
+
}).describe("Telemetry signal enablement"),
|
|
55
|
+
resourceAttributes: av.record(av.string()).default({}).describe("Additional OpenTelemetry resource attributes attached to exported telemetry"),
|
|
56
|
+
samplingRate: av.number().min(0).max(1).default(1.0).describe("Trace sampling rate from 0.0 to 1.0"),
|
|
57
|
+
}).describe("OpenTelemetry observable plugin configuration");
|
|
58
58
|
export const Config = createConfigSchema({
|
|
59
59
|
name: 'observable-opentelemetry',
|
|
60
60
|
description: 'OpenTelemetry integration for logs, metrics, and traces via OTLP',
|
|
61
|
-
version: '9.0.0',
|
|
62
61
|
image: './observable-opentelemetry.png',
|
|
63
62
|
tags: ['opentelemetry', 'otlp', 'observability', 'logs', 'metrics', 'traces'],
|
|
64
63
|
documentation: ['./docs/plugin.md'],
|
|
@@ -124,7 +123,7 @@ export class Plugin extends BSBObservable {
|
|
|
124
123
|
}
|
|
125
124
|
async init() {
|
|
126
125
|
// Create resource with service information
|
|
127
|
-
const resource =
|
|
126
|
+
const resource = resourceFromAttributes({
|
|
128
127
|
[ATTR_SERVICE_NAME]: this.config.serviceName,
|
|
129
128
|
...(this.config.serviceVersion && { [ATTR_SERVICE_VERSION]: this.config.serviceVersion }),
|
|
130
129
|
...this.config.resourceAttributes,
|
|
@@ -151,17 +150,23 @@ export class Plugin extends BSBObservable {
|
|
|
151
150
|
}
|
|
152
151
|
// Setup metrics separately
|
|
153
152
|
if (this.config.enabled.metrics) {
|
|
154
|
-
const meterProvider = new MeterProvider({
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
153
|
+
const meterProvider = new MeterProvider({
|
|
154
|
+
resource,
|
|
155
|
+
readers: [
|
|
156
|
+
new PeriodicExportingMetricReader({
|
|
157
|
+
exporter: metricExporter,
|
|
158
|
+
exportIntervalMillis: this.config.export.interval,
|
|
159
|
+
}),
|
|
160
|
+
],
|
|
161
|
+
});
|
|
159
162
|
this.meter = meterProvider.getMeter(this.config.serviceName, this.config.serviceVersion);
|
|
160
163
|
}
|
|
161
164
|
// Setup logs separately
|
|
162
165
|
if (this.config.enabled.logs) {
|
|
163
|
-
this.loggerProvider = new LoggerProvider({
|
|
164
|
-
|
|
166
|
+
this.loggerProvider = new LoggerProvider({
|
|
167
|
+
resource,
|
|
168
|
+
processors: [new BatchLogRecordProcessor(logExporter)],
|
|
169
|
+
});
|
|
165
170
|
this.logger = this.loggerProvider.getLogger(this.config.serviceName, this.config.serviceVersion);
|
|
166
171
|
}
|
|
167
172
|
}
|
|
@@ -299,12 +304,13 @@ export class Plugin extends BSBObservable {
|
|
|
299
304
|
}
|
|
300
305
|
}
|
|
301
306
|
// Tracing methods
|
|
302
|
-
spanStart(trace, pluginName, spanName, parentSpanId, attributes) {
|
|
307
|
+
spanStart(timestamp, trace, pluginName, spanName, parentSpanId, attributes) {
|
|
303
308
|
if (!this.tracer || this.isDisposed) {
|
|
304
309
|
return;
|
|
305
310
|
}
|
|
306
311
|
const context = this.getTraceContext(trace);
|
|
307
312
|
const span = this.tracer.startSpan(spanName, {
|
|
313
|
+
startTime: timestamp,
|
|
308
314
|
attributes: {
|
|
309
315
|
"bsb.plugin": pluginName,
|
|
310
316
|
...(parentSpanId ? { "bsb.parent_span_id": parentSpanId } : {}),
|
|
@@ -314,7 +320,7 @@ export class Plugin extends BSBObservable {
|
|
|
314
320
|
const spanKey = `${trace.t}:${trace.s}`;
|
|
315
321
|
this.spans.set(spanKey, span);
|
|
316
322
|
}
|
|
317
|
-
spanEnd(trace, pluginName, attributes) {
|
|
323
|
+
spanEnd(timestamp, trace, pluginName, attributes) {
|
|
318
324
|
if (this.isDisposed) {
|
|
319
325
|
return;
|
|
320
326
|
}
|
|
@@ -324,18 +330,18 @@ export class Plugin extends BSBObservable {
|
|
|
324
330
|
if (attributes) {
|
|
325
331
|
span.setAttributes(attributes);
|
|
326
332
|
}
|
|
327
|
-
span.end();
|
|
333
|
+
span.end(timestamp);
|
|
328
334
|
this.spans.delete(spanKey);
|
|
329
335
|
}
|
|
330
336
|
}
|
|
331
|
-
spanError(trace, pluginName, error, attributes) {
|
|
337
|
+
spanError(timestamp, trace, pluginName, error, attributes) {
|
|
332
338
|
if (this.isDisposed) {
|
|
333
339
|
return;
|
|
334
340
|
}
|
|
335
341
|
const spanKey = `${trace.t}:${trace.s}`;
|
|
336
342
|
const span = this.spans.get(spanKey);
|
|
337
343
|
if (span) {
|
|
338
|
-
span.recordException(error);
|
|
344
|
+
span.recordException(error, timestamp);
|
|
339
345
|
span.setStatus({ code: api.SpanStatusCode.ERROR, message: error.message });
|
|
340
346
|
if (attributes) {
|
|
341
347
|
span.setAttributes(attributes);
|
|
@@ -1,7 +1,148 @@
|
|
|
1
1
|
{
|
|
2
2
|
"pluginName": "observable-opentelemetry",
|
|
3
|
-
"version": "9.0.0",
|
|
4
3
|
"events": {},
|
|
4
|
+
"version": "9.6.12",
|
|
5
|
+
"configSchema": {
|
|
6
|
+
"anyvaliVersion": "1.0",
|
|
7
|
+
"schemaVersion": "1.1",
|
|
8
|
+
"root": {
|
|
9
|
+
"kind": "object",
|
|
10
|
+
"properties": {
|
|
11
|
+
"serviceName": {
|
|
12
|
+
"kind": "string",
|
|
13
|
+
"default": "bsb-service",
|
|
14
|
+
"metadata": {
|
|
15
|
+
"description": "Service name reported through OpenTelemetry resource attributes"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"serviceVersion": {
|
|
19
|
+
"kind": "optional",
|
|
20
|
+
"inner": {
|
|
21
|
+
"kind": "string"
|
|
22
|
+
},
|
|
23
|
+
"metadata": {
|
|
24
|
+
"description": "Optional service version reported through OpenTelemetry resource attributes"
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"endpoint": {
|
|
28
|
+
"kind": "string",
|
|
29
|
+
"format": "url",
|
|
30
|
+
"default": "http://localhost:4318",
|
|
31
|
+
"metadata": {
|
|
32
|
+
"description": "OTLP collector endpoint base URL"
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"export": {
|
|
36
|
+
"kind": "object",
|
|
37
|
+
"properties": {
|
|
38
|
+
"protocol": {
|
|
39
|
+
"kind": "enum",
|
|
40
|
+
"values": [
|
|
41
|
+
"http"
|
|
42
|
+
],
|
|
43
|
+
"default": "http",
|
|
44
|
+
"metadata": {
|
|
45
|
+
"description": "OTLP HTTP transport protocol setting"
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
"interval": {
|
|
49
|
+
"kind": "int32",
|
|
50
|
+
"min": 100,
|
|
51
|
+
"default": 5000,
|
|
52
|
+
"metadata": {
|
|
53
|
+
"description": "Metric export interval in milliseconds"
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
"maxBatchSize": {
|
|
57
|
+
"kind": "int32",
|
|
58
|
+
"min": 1,
|
|
59
|
+
"default": 512,
|
|
60
|
+
"metadata": {
|
|
61
|
+
"description": "Maximum number of telemetry items sent in one export batch"
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
"required": [
|
|
66
|
+
"protocol",
|
|
67
|
+
"interval",
|
|
68
|
+
"maxBatchSize"
|
|
69
|
+
],
|
|
70
|
+
"unknownKeys": "strip",
|
|
71
|
+
"metadata": {
|
|
72
|
+
"description": "OpenTelemetry export settings"
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
"enabled": {
|
|
76
|
+
"kind": "object",
|
|
77
|
+
"properties": {
|
|
78
|
+
"traces": {
|
|
79
|
+
"kind": "bool",
|
|
80
|
+
"default": true,
|
|
81
|
+
"metadata": {
|
|
82
|
+
"description": "Whether trace export is enabled"
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
"metrics": {
|
|
86
|
+
"kind": "bool",
|
|
87
|
+
"default": true,
|
|
88
|
+
"metadata": {
|
|
89
|
+
"description": "Whether metric export is enabled"
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
"logs": {
|
|
93
|
+
"kind": "bool",
|
|
94
|
+
"default": true,
|
|
95
|
+
"metadata": {
|
|
96
|
+
"description": "Whether log export is enabled"
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
"required": [
|
|
101
|
+
"traces",
|
|
102
|
+
"metrics",
|
|
103
|
+
"logs"
|
|
104
|
+
],
|
|
105
|
+
"unknownKeys": "strip",
|
|
106
|
+
"metadata": {
|
|
107
|
+
"description": "Telemetry signal enablement"
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
"resourceAttributes": {
|
|
111
|
+
"kind": "record",
|
|
112
|
+
"valueSchema": {
|
|
113
|
+
"kind": "string"
|
|
114
|
+
},
|
|
115
|
+
"default": {},
|
|
116
|
+
"metadata": {
|
|
117
|
+
"description": "Additional OpenTelemetry resource attributes attached to exported telemetry"
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
"samplingRate": {
|
|
121
|
+
"kind": "number",
|
|
122
|
+
"min": 0,
|
|
123
|
+
"max": 1,
|
|
124
|
+
"default": 1,
|
|
125
|
+
"metadata": {
|
|
126
|
+
"description": "Trace sampling rate from 0.0 to 1.0"
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
},
|
|
130
|
+
"required": [
|
|
131
|
+
"serviceName",
|
|
132
|
+
"endpoint",
|
|
133
|
+
"export",
|
|
134
|
+
"enabled",
|
|
135
|
+
"resourceAttributes",
|
|
136
|
+
"samplingRate"
|
|
137
|
+
],
|
|
138
|
+
"unknownKeys": "strip",
|
|
139
|
+
"metadata": {
|
|
140
|
+
"description": "OpenTelemetry observable plugin configuration"
|
|
141
|
+
}
|
|
142
|
+
},
|
|
143
|
+
"definitions": {},
|
|
144
|
+
"extensions": {}
|
|
145
|
+
},
|
|
5
146
|
"pluginType": "observable",
|
|
6
147
|
"capabilities": {
|
|
7
148
|
"logging": {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "observable-opentelemetry",
|
|
3
3
|
"name": "observable-opentelemetry",
|
|
4
|
-
"version": "9.
|
|
4
|
+
"version": "9.6.12",
|
|
5
5
|
"description": "OpenTelemetry integration for logs, metrics, and traces via OTLP",
|
|
6
6
|
"category": "observable",
|
|
7
7
|
"tags": [
|
|
@@ -16,5 +16,152 @@
|
|
|
16
16
|
"./docs/plugin.md"
|
|
17
17
|
],
|
|
18
18
|
"dependencies": [],
|
|
19
|
-
"
|
|
19
|
+
"author": {
|
|
20
|
+
"name": "BetterCorp (PTY) Ltd",
|
|
21
|
+
"email": "ninja@bettercorp.dev",
|
|
22
|
+
"url": "https://bettercorp.dev/"
|
|
23
|
+
},
|
|
24
|
+
"license": "(AGPL-3.0-only OR Commercial)",
|
|
25
|
+
"image": "./observable-opentelemetry.png",
|
|
26
|
+
"configSchema": {
|
|
27
|
+
"anyvaliVersion": "1.0",
|
|
28
|
+
"schemaVersion": "1.1",
|
|
29
|
+
"root": {
|
|
30
|
+
"kind": "object",
|
|
31
|
+
"properties": {
|
|
32
|
+
"serviceName": {
|
|
33
|
+
"kind": "string",
|
|
34
|
+
"default": "bsb-service",
|
|
35
|
+
"metadata": {
|
|
36
|
+
"description": "Service name reported through OpenTelemetry resource attributes"
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
"serviceVersion": {
|
|
40
|
+
"kind": "optional",
|
|
41
|
+
"inner": {
|
|
42
|
+
"kind": "string"
|
|
43
|
+
},
|
|
44
|
+
"metadata": {
|
|
45
|
+
"description": "Optional service version reported through OpenTelemetry resource attributes"
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
"endpoint": {
|
|
49
|
+
"kind": "string",
|
|
50
|
+
"format": "url",
|
|
51
|
+
"default": "http://localhost:4318",
|
|
52
|
+
"metadata": {
|
|
53
|
+
"description": "OTLP collector endpoint base URL"
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
"export": {
|
|
57
|
+
"kind": "object",
|
|
58
|
+
"properties": {
|
|
59
|
+
"protocol": {
|
|
60
|
+
"kind": "enum",
|
|
61
|
+
"values": [
|
|
62
|
+
"http"
|
|
63
|
+
],
|
|
64
|
+
"default": "http",
|
|
65
|
+
"metadata": {
|
|
66
|
+
"description": "OTLP HTTP transport protocol setting"
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
"interval": {
|
|
70
|
+
"kind": "int32",
|
|
71
|
+
"min": 100,
|
|
72
|
+
"default": 5000,
|
|
73
|
+
"metadata": {
|
|
74
|
+
"description": "Metric export interval in milliseconds"
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
"maxBatchSize": {
|
|
78
|
+
"kind": "int32",
|
|
79
|
+
"min": 1,
|
|
80
|
+
"default": 512,
|
|
81
|
+
"metadata": {
|
|
82
|
+
"description": "Maximum number of telemetry items sent in one export batch"
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
"required": [
|
|
87
|
+
"protocol",
|
|
88
|
+
"interval",
|
|
89
|
+
"maxBatchSize"
|
|
90
|
+
],
|
|
91
|
+
"unknownKeys": "strip",
|
|
92
|
+
"metadata": {
|
|
93
|
+
"description": "OpenTelemetry export settings"
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
"enabled": {
|
|
97
|
+
"kind": "object",
|
|
98
|
+
"properties": {
|
|
99
|
+
"traces": {
|
|
100
|
+
"kind": "bool",
|
|
101
|
+
"default": true,
|
|
102
|
+
"metadata": {
|
|
103
|
+
"description": "Whether trace export is enabled"
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
"metrics": {
|
|
107
|
+
"kind": "bool",
|
|
108
|
+
"default": true,
|
|
109
|
+
"metadata": {
|
|
110
|
+
"description": "Whether metric export is enabled"
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
"logs": {
|
|
114
|
+
"kind": "bool",
|
|
115
|
+
"default": true,
|
|
116
|
+
"metadata": {
|
|
117
|
+
"description": "Whether log export is enabled"
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
"required": [
|
|
122
|
+
"traces",
|
|
123
|
+
"metrics",
|
|
124
|
+
"logs"
|
|
125
|
+
],
|
|
126
|
+
"unknownKeys": "strip",
|
|
127
|
+
"metadata": {
|
|
128
|
+
"description": "Telemetry signal enablement"
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
"resourceAttributes": {
|
|
132
|
+
"kind": "record",
|
|
133
|
+
"valueSchema": {
|
|
134
|
+
"kind": "string"
|
|
135
|
+
},
|
|
136
|
+
"default": {},
|
|
137
|
+
"metadata": {
|
|
138
|
+
"description": "Additional OpenTelemetry resource attributes attached to exported telemetry"
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
"samplingRate": {
|
|
142
|
+
"kind": "number",
|
|
143
|
+
"min": 0,
|
|
144
|
+
"max": 1,
|
|
145
|
+
"default": 1,
|
|
146
|
+
"metadata": {
|
|
147
|
+
"description": "Trace sampling rate from 0.0 to 1.0"
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
},
|
|
151
|
+
"required": [
|
|
152
|
+
"serviceName",
|
|
153
|
+
"endpoint",
|
|
154
|
+
"export",
|
|
155
|
+
"enabled",
|
|
156
|
+
"resourceAttributes",
|
|
157
|
+
"samplingRate"
|
|
158
|
+
],
|
|
159
|
+
"unknownKeys": "strip",
|
|
160
|
+
"metadata": {
|
|
161
|
+
"description": "OpenTelemetry observable plugin configuration"
|
|
162
|
+
}
|
|
163
|
+
},
|
|
164
|
+
"definitions": {},
|
|
165
|
+
"extensions": {}
|
|
166
|
+
}
|
|
20
167
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bsb/observable-opentelemetry",
|
|
3
|
-
"version": "9.
|
|
3
|
+
"version": "9.6.12",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "(AGPL-3.0-only OR Commercial)",
|
|
6
6
|
"author": {
|
|
@@ -39,30 +39,30 @@
|
|
|
39
39
|
"publish:client": "bsb client publish"
|
|
40
40
|
},
|
|
41
41
|
"peerDependencies": {
|
|
42
|
-
"@bsb/base": "^9.
|
|
42
|
+
"@bsb/base": "^9.6.12"
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@anyvali/js": "^0.2.0",
|
|
46
45
|
"@opentelemetry/api": "^1.9.0",
|
|
47
|
-
"@opentelemetry/api-logs": "^0.
|
|
48
|
-
"@opentelemetry/
|
|
49
|
-
"@opentelemetry/
|
|
50
|
-
"@opentelemetry/
|
|
51
|
-
"@opentelemetry/
|
|
52
|
-
"@opentelemetry/
|
|
53
|
-
"@opentelemetry/
|
|
54
|
-
"@opentelemetry/sdk-
|
|
55
|
-
"@opentelemetry/
|
|
56
|
-
"@opentelemetry/semantic-conventions": "^1.
|
|
46
|
+
"@opentelemetry/api-logs": "^0.219.0",
|
|
47
|
+
"@opentelemetry/exporter-logs-otlp-http": "^0.219.0",
|
|
48
|
+
"@opentelemetry/exporter-metrics-otlp-http": "^0.219.0",
|
|
49
|
+
"@opentelemetry/exporter-trace-otlp-http": "^0.219.0",
|
|
50
|
+
"@opentelemetry/resources": "^2.8.0",
|
|
51
|
+
"@opentelemetry/sdk-logs": "^0.219.0",
|
|
52
|
+
"@opentelemetry/sdk-metrics": "^2.8.0",
|
|
53
|
+
"@opentelemetry/sdk-node": "^0.219.0",
|
|
54
|
+
"@opentelemetry/sdk-trace-base": "^2.8.0",
|
|
55
|
+
"@opentelemetry/semantic-conventions": "^1.41.1",
|
|
56
|
+
"anyvali": "^1.0.6"
|
|
57
57
|
},
|
|
58
58
|
"devDependencies": {
|
|
59
|
-
"@
|
|
60
|
-
"
|
|
61
|
-
"mocha": "^11.
|
|
62
|
-
"
|
|
59
|
+
"@bsb/base": "^9.6.12",
|
|
60
|
+
"@types/node": "^25.6.0",
|
|
61
|
+
"mocha": "^11.7.6",
|
|
62
|
+
"typescript": "^6.0.3"
|
|
63
63
|
},
|
|
64
64
|
"engines": {
|
|
65
|
-
"node": ">=
|
|
65
|
+
"node": ">=24.0.0",
|
|
66
66
|
"npm": ">=11.0.0"
|
|
67
67
|
},
|
|
68
68
|
"homepage": "https://io.bsbcode.dev/packages/nodejs/@bsb/observable-opentelemetry"
|