@effect/opentelemetry 4.0.0-beta.66 → 4.0.0-beta.67
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/dist/Logger.d.ts +35 -6
- package/dist/Logger.d.ts.map +1 -1
- package/dist/Logger.js +35 -6
- package/dist/Logger.js.map +1 -1
- package/dist/Metrics.d.ts +23 -6
- package/dist/Metrics.d.ts.map +1 -1
- package/dist/Metrics.js +5 -4
- package/dist/Metrics.js.map +1 -1
- package/dist/NodeSdk.d.ts +41 -7
- package/dist/NodeSdk.d.ts.map +1 -1
- package/dist/NodeSdk.js +9 -3
- package/dist/NodeSdk.js.map +1 -1
- package/dist/Resource.d.ts +33 -6
- package/dist/Resource.d.ts.map +1 -1
- package/dist/Resource.js +15 -5
- package/dist/Resource.js.map +1 -1
- package/dist/Tracer.d.ts +58 -17
- package/dist/Tracer.d.ts.map +1 -1
- package/dist/Tracer.js +56 -15
- package/dist/Tracer.js.map +1 -1
- package/dist/WebSdk.d.ts +42 -6
- package/dist/WebSdk.d.ts.map +1 -1
- package/dist/WebSdk.js +6 -2
- package/dist/WebSdk.js.map +1 -1
- package/dist/index.d.ts +7 -7
- package/dist/index.js +7 -7
- package/package.json +14 -14
- package/src/Logger.ts +35 -6
- package/src/Metrics.ts +23 -6
- package/src/NodeSdk.ts +41 -7
- package/src/Resource.ts +33 -6
- package/src/Tracer.ts +58 -17
- package/src/WebSdk.ts +42 -6
- package/src/index.ts +7 -7
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effect/opentelemetry",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "4.0.0-beta.
|
|
4
|
+
"version": "4.0.0-beta.67",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"description": "OpenTelemetry integration for Effect",
|
|
7
7
|
"homepage": "https://effect.website",
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
"@opentelemetry/sdk-trace-node": "^2.0.0",
|
|
64
64
|
"@opentelemetry/sdk-trace-web": "^2.0.0",
|
|
65
65
|
"@opentelemetry/semantic-conventions": "^1.33.0",
|
|
66
|
-
"effect": "^4.0.0-beta.
|
|
66
|
+
"effect": "^4.0.0-beta.67"
|
|
67
67
|
},
|
|
68
68
|
"peerDependenciesMeta": {
|
|
69
69
|
"@opentelemetry/api": {
|
|
@@ -93,18 +93,18 @@
|
|
|
93
93
|
},
|
|
94
94
|
"devDependencies": {
|
|
95
95
|
"@opentelemetry/api": "^1.9.1",
|
|
96
|
-
"@opentelemetry/api-logs": "^0.
|
|
97
|
-
"@opentelemetry/context-async-hooks": "^2.
|
|
98
|
-
"@opentelemetry/exporter-metrics-otlp-http": "0.
|
|
99
|
-
"@opentelemetry/exporter-prometheus": "^0.
|
|
100
|
-
"@opentelemetry/exporter-trace-otlp-http": "^0.
|
|
101
|
-
"@opentelemetry/otlp-exporter-base": "^0.
|
|
102
|
-
"@opentelemetry/resources": "^2.
|
|
103
|
-
"@opentelemetry/sdk-logs": "^0.
|
|
104
|
-
"@opentelemetry/sdk-metrics": "^2.
|
|
105
|
-
"@opentelemetry/sdk-trace-base": "^2.
|
|
106
|
-
"@opentelemetry/sdk-trace-node": "^2.
|
|
107
|
-
"@opentelemetry/sdk-trace-web": "^2.
|
|
96
|
+
"@opentelemetry/api-logs": "^0.217.0",
|
|
97
|
+
"@opentelemetry/context-async-hooks": "^2.7.1",
|
|
98
|
+
"@opentelemetry/exporter-metrics-otlp-http": "0.217.0",
|
|
99
|
+
"@opentelemetry/exporter-prometheus": "^0.217.0",
|
|
100
|
+
"@opentelemetry/exporter-trace-otlp-http": "^0.217.0",
|
|
101
|
+
"@opentelemetry/otlp-exporter-base": "^0.217.0",
|
|
102
|
+
"@opentelemetry/resources": "^2.7.1",
|
|
103
|
+
"@opentelemetry/sdk-logs": "^0.217.0",
|
|
104
|
+
"@opentelemetry/sdk-metrics": "^2.7.1",
|
|
105
|
+
"@opentelemetry/sdk-trace-base": "^2.7.1",
|
|
106
|
+
"@opentelemetry/sdk-trace-node": "^2.7.1",
|
|
107
|
+
"@opentelemetry/sdk-trace-web": "^2.7.1",
|
|
108
108
|
"@opentelemetry/semantic-conventions": "^1.40.0"
|
|
109
109
|
},
|
|
110
110
|
"scripts": {
|
package/src/Logger.ts
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Connects Effect's logging system to the OpenTelemetry Logs SDK.
|
|
3
|
+
*
|
|
4
|
+
* This module provides a logger provider service, an Effect `Logger` that
|
|
5
|
+
* emits OpenTelemetry log records, and layers for installing that logger in an
|
|
6
|
+
* application. It is commonly used to send Effect logs to OTLP, console, or
|
|
7
|
+
* vendor-specific exporters through OpenTelemetry `LogRecordProcessor`s while
|
|
8
|
+
* keeping logs correlated with Effect fibers and spans. Emitted records include
|
|
9
|
+
* the current fiber id, span identifiers when a parent span is present, log
|
|
10
|
+
* annotations, log spans, severity text, and the matching OpenTelemetry
|
|
11
|
+
* severity number.
|
|
12
|
+
*
|
|
13
|
+
* Log export depends on the configured OpenTelemetry processors and exporters;
|
|
14
|
+
* this module creates the provider and logger, but does not choose an exporter.
|
|
15
|
+
* Use the `Resource` layer to attach service and deployment metadata to the
|
|
16
|
+
* provider rather than repeating that data on every log record. When using
|
|
17
|
+
* `layerLoggerProvider`, the provider is scoped and is force-flushed and shut
|
|
18
|
+
* down when the layer is released, with a configurable shutdown timeout. If you
|
|
19
|
+
* supply or manage an OpenTelemetry provider yourself, make sure it is flushed
|
|
20
|
+
* and shut down during application shutdown, especially when using batching
|
|
21
|
+
* processors that may otherwise drop buffered logs.
|
|
22
|
+
*
|
|
23
|
+
* @since 4.0.0
|
|
3
24
|
*/
|
|
4
25
|
import { SeverityNumber } from "@opentelemetry/api-logs"
|
|
5
26
|
import * as Otel from "@opentelemetry/sdk-logs"
|
|
@@ -19,8 +40,10 @@ import { nanosToHrTime, unknownToAttributeValue } from "./internal/attributes.ts
|
|
|
19
40
|
import { Resource } from "./Resource.ts"
|
|
20
41
|
|
|
21
42
|
/**
|
|
22
|
-
*
|
|
43
|
+
* Context service containing the OpenTelemetry `LoggerProvider` used to emit Effect log records.
|
|
44
|
+
*
|
|
23
45
|
* @category Services
|
|
46
|
+
* @since 4.0.0
|
|
24
47
|
*/
|
|
25
48
|
export class OtelLoggerProvider extends Context.Service<
|
|
26
49
|
OtelLoggerProvider,
|
|
@@ -35,8 +58,8 @@ export class OtelLoggerProvider extends Context.Service<
|
|
|
35
58
|
* (e.g. Info=20000), which falls outside the OTel spec — backends that
|
|
36
59
|
* validate the field map such values to `UNSPECIFIED`.
|
|
37
60
|
*
|
|
38
|
-
* @since 1.0.0
|
|
39
61
|
* @category Conversions
|
|
62
|
+
* @since 4.0.0
|
|
40
63
|
*/
|
|
41
64
|
export const logLevelToSeverityNumber = (level: LogLevel.LogLevel): SeverityNumber => {
|
|
42
65
|
switch (level) {
|
|
@@ -58,8 +81,10 @@ export const logLevelToSeverityNumber = (level: LogLevel.LogLevel): SeverityNumb
|
|
|
58
81
|
}
|
|
59
82
|
|
|
60
83
|
/**
|
|
61
|
-
*
|
|
84
|
+
* Creates an Effect logger that emits log records through the configured OpenTelemetry logger provider.
|
|
85
|
+
*
|
|
62
86
|
* @category Constructors
|
|
87
|
+
* @since 4.0.0
|
|
63
88
|
*/
|
|
64
89
|
export const make: Effect.Effect<
|
|
65
90
|
Logger.Logger<unknown, void>,
|
|
@@ -104,8 +129,10 @@ export const make: Effect.Effect<
|
|
|
104
129
|
})
|
|
105
130
|
|
|
106
131
|
/**
|
|
107
|
-
*
|
|
132
|
+
* Creates a layer that installs the OpenTelemetry-backed Effect logger, merging with existing loggers by default.
|
|
133
|
+
*
|
|
108
134
|
* @category Layers
|
|
135
|
+
* @since 4.0.0
|
|
109
136
|
*/
|
|
110
137
|
export const layer = (options: {
|
|
111
138
|
/**
|
|
@@ -124,8 +151,10 @@ export const layer = (options: {
|
|
|
124
151
|
})
|
|
125
152
|
|
|
126
153
|
/**
|
|
127
|
-
*
|
|
154
|
+
* Creates a scoped OpenTelemetry logger provider from one or more log record processors, using the current `Resource` and flushing and shutting down the provider when the layer is released.
|
|
155
|
+
*
|
|
128
156
|
* @category Layers
|
|
157
|
+
* @since 4.0.0
|
|
129
158
|
*/
|
|
130
159
|
export const layerLoggerProvider = (
|
|
131
160
|
processor: Otel.LogRecordProcessor | NonEmptyReadonlyArray<Otel.LogRecordProcessor>,
|
package/src/Metrics.ts
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Bridges Effect metrics into OpenTelemetry by exposing the current Effect
|
|
3
|
+
* metric snapshot as an OpenTelemetry `MetricProducer` and registering it with
|
|
4
|
+
* one or more SDK `MetricReader`s. Use this module when an application already
|
|
5
|
+
* records metrics with Effect and needs those counters, gauges, histograms,
|
|
6
|
+
* frequencies, or summaries exported through OTLP, Prometheus, or another
|
|
7
|
+
* OpenTelemetry-compatible reader/exporter.
|
|
8
|
+
*
|
|
9
|
+
* The `layer` constructor is the usual entry point, and is also used by the
|
|
10
|
+
* Node and Web SDK layers when `metricReader` configuration is supplied. Metric
|
|
11
|
+
* readers are acquired inside the layer scope and shut down when the scope is
|
|
12
|
+
* released, so periodic exporters need the runtime to stay alive long enough to
|
|
13
|
+
* collect and export data. The exporter or backend determines whether
|
|
14
|
+
* cumulative or delta aggregation is expected; this module defaults to
|
|
15
|
+
* cumulative temporality and can be configured with `temporality: "delta"` for
|
|
16
|
+
* backends that require interval-based values.
|
|
17
|
+
*
|
|
18
|
+
* @since 4.0.0
|
|
3
19
|
*/
|
|
4
20
|
import type { MetricProducer, MetricReader } from "@opentelemetry/sdk-metrics"
|
|
5
21
|
import type * as Arr from "effect/Array"
|
|
@@ -21,16 +37,16 @@ import { Resource } from "./Resource.ts"
|
|
|
21
37
|
* - `delta`: Reports changes since the last export. Each interval is
|
|
22
38
|
* independent with no dependency on previous measurements.
|
|
23
39
|
*
|
|
24
|
-
* @since 1.0.0
|
|
25
40
|
* @category Models
|
|
41
|
+
* @since 4.0.0
|
|
26
42
|
*/
|
|
27
43
|
export type TemporalityPreference = "cumulative" | "delta"
|
|
28
44
|
|
|
29
45
|
/**
|
|
30
46
|
* Creates an OpenTelemetry metric producer from Effect metrics.
|
|
31
47
|
*
|
|
32
|
-
* @since 1.0.0
|
|
33
48
|
* @category Constructors
|
|
49
|
+
* @since 4.0.0
|
|
34
50
|
*/
|
|
35
51
|
export const makeProducer = (temporality?: TemporalityPreference): Effect.Effect<MetricProducer, never, Resource> =>
|
|
36
52
|
Effect.gen(function*() {
|
|
@@ -42,8 +58,8 @@ export const makeProducer = (temporality?: TemporalityPreference): Effect.Effect
|
|
|
42
58
|
/**
|
|
43
59
|
* Registers a metric producer with one or more metric readers.
|
|
44
60
|
*
|
|
45
|
-
* @since 1.0.0
|
|
46
61
|
* @category Constructors
|
|
62
|
+
* @since 4.0.0
|
|
47
63
|
*/
|
|
48
64
|
export const registerProducer = (
|
|
49
65
|
self: MetricProducer,
|
|
@@ -74,7 +90,8 @@ export const registerProducer = (
|
|
|
74
90
|
/**
|
|
75
91
|
* Creates a Layer that registers a metric producer with metric readers.
|
|
76
92
|
*
|
|
77
|
-
*
|
|
93
|
+
* **Example** (Creating a metrics layer with temporality)
|
|
94
|
+
*
|
|
78
95
|
* ```ts
|
|
79
96
|
* import { Metrics } from "@effect/opentelemetry"
|
|
80
97
|
* import { PeriodicExportingMetricReader } from "@opentelemetry/sdk-metrics"
|
|
@@ -98,8 +115,8 @@ export const registerProducer = (
|
|
|
98
115
|
* )
|
|
99
116
|
* ```
|
|
100
117
|
*
|
|
101
|
-
* @since 1.0.0
|
|
102
118
|
* @category Layers
|
|
119
|
+
* @since 4.0.0
|
|
103
120
|
*/
|
|
104
121
|
export const layer = (
|
|
105
122
|
evaluate: LazyArg<MetricReader | Arr.NonEmptyReadonlyArray<MetricReader>>,
|
package/src/NodeSdk.ts
CHANGED
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Provides an Effect layer for configuring OpenTelemetry in Node.js
|
|
3
|
+
* processes. The module wires the Effect tracer, metrics producer, and logger
|
|
4
|
+
* into OpenTelemetry SDK providers when span processors, metric readers, or log
|
|
5
|
+
* record processors are supplied, and it builds the shared resource from
|
|
6
|
+
* `OTEL_SERVICE_NAME`, `OTEL_RESOURCE_ATTRIBUTES`, and optional explicit
|
|
7
|
+
* service metadata.
|
|
8
|
+
*
|
|
9
|
+
* Use this module in Node services, workers, CLIs, or server runtimes that need
|
|
10
|
+
* Effect spans, metrics, and logs exported through OpenTelemetry processors and
|
|
11
|
+
* exporters. Telemetry is enabled only for the configured signal types, so an
|
|
12
|
+
* application can install tracing alone, metrics alone, logging alone, or any
|
|
13
|
+
* combination of them from the same layer.
|
|
14
|
+
*
|
|
15
|
+
* The layer is scoped. Tracer and logger providers are force-flushed and shut
|
|
16
|
+
* down when the scope is released, metric readers are shut down with the same
|
|
17
|
+
* lifecycle, and all shutdown waits are bounded by `shutdownTimeout` with a
|
|
18
|
+
* default of three seconds. Keep the layer scope alive for the lifetime of the
|
|
19
|
+
* process and release it during graceful shutdown so batched exporters have a
|
|
20
|
+
* chance to export final telemetry. When combining this layer with Node
|
|
21
|
+
* auto-instrumentations, register instrumentation before importing modules that
|
|
22
|
+
* should be patched, because many Node instrumentations hook module loading.
|
|
23
|
+
*
|
|
24
|
+
* @since 4.0.0
|
|
3
25
|
*/
|
|
4
26
|
import type * as Otel from "@opentelemetry/api"
|
|
5
27
|
import type { LoggerProviderConfig, LogRecordProcessor } from "@opentelemetry/sdk-logs"
|
|
@@ -18,8 +40,10 @@ import * as Resource from "./Resource.ts"
|
|
|
18
40
|
import * as Tracer from "./Tracer.ts"
|
|
19
41
|
|
|
20
42
|
/**
|
|
21
|
-
*
|
|
43
|
+
* Configuration for the Node OpenTelemetry layer, including optional tracing, metrics, logging, resource, and shutdown settings.
|
|
44
|
+
*
|
|
22
45
|
* @category Models
|
|
46
|
+
* @since 4.0.0
|
|
23
47
|
*/
|
|
24
48
|
export interface Configuration {
|
|
25
49
|
readonly spanProcessor?: SpanProcessor | ReadonlyArray<SpanProcessor> | undefined
|
|
@@ -38,8 +62,10 @@ export interface Configuration {
|
|
|
38
62
|
}
|
|
39
63
|
|
|
40
64
|
/**
|
|
41
|
-
*
|
|
65
|
+
* Creates a scoped Node OpenTelemetry tracer provider from one or more span processors and shuts it down when the layer is released.
|
|
66
|
+
*
|
|
42
67
|
* @category Layers
|
|
68
|
+
* @since 4.0.0
|
|
43
69
|
*/
|
|
44
70
|
export const layerTracerProvider = (
|
|
45
71
|
processor: SpanProcessor | NonEmptyReadonlyArray<SpanProcessor>,
|
|
@@ -71,18 +97,24 @@ export const layerTracerProvider = (
|
|
|
71
97
|
)
|
|
72
98
|
|
|
73
99
|
/**
|
|
74
|
-
*
|
|
100
|
+
* Creates a Node OpenTelemetry layer from configuration, enabling tracing, metrics, and logging only when their processors or readers are supplied.
|
|
101
|
+
*
|
|
75
102
|
* @category Layers
|
|
103
|
+
* @since 4.0.0
|
|
76
104
|
*/
|
|
77
105
|
export const layer: {
|
|
78
106
|
/**
|
|
79
|
-
*
|
|
107
|
+
* Creates a Node OpenTelemetry layer from configuration, enabling tracing, metrics, and logging only when their processors or readers are supplied.
|
|
108
|
+
*
|
|
80
109
|
* @category Layers
|
|
110
|
+
* @since 4.0.0
|
|
81
111
|
*/
|
|
82
112
|
(evaluate: LazyArg<Configuration>): Layer.Layer<Resource.Resource>
|
|
83
113
|
/**
|
|
84
|
-
*
|
|
114
|
+
* Creates a Node OpenTelemetry layer from configuration, enabling tracing, metrics, and logging only when their processors or readers are supplied.
|
|
115
|
+
*
|
|
85
116
|
* @category Layers
|
|
117
|
+
* @since 4.0.0
|
|
86
118
|
*/
|
|
87
119
|
<R, E>(evaluate: Effect.Effect<Configuration, E, R>): Layer.Layer<Resource.Resource, E, R>
|
|
88
120
|
} = (
|
|
@@ -130,7 +162,9 @@ export const layer: {
|
|
|
130
162
|
)
|
|
131
163
|
|
|
132
164
|
/**
|
|
133
|
-
*
|
|
165
|
+
* Layer that provides an empty OpenTelemetry `Resource`.
|
|
166
|
+
*
|
|
134
167
|
* @category layer
|
|
168
|
+
* @since 2.0.0
|
|
135
169
|
*/
|
|
136
170
|
export const layerEmpty: Layer.Layer<Resource.Resource> = Resource.layerEmpty
|
package/src/Resource.ts
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Provides the OpenTelemetry resource used by the Effect OpenTelemetry layers.
|
|
3
|
+
*
|
|
4
|
+
* A resource describes the entity that produces telemetry, such as a service,
|
|
5
|
+
* process, deployment, or browser application. The tracing, metrics, logging,
|
|
6
|
+
* and SDK layers use this module's `Resource` service to configure providers
|
|
7
|
+
* and identify emitted telemetry with service-level metadata.
|
|
8
|
+
*
|
|
9
|
+
* Use `layer` when service metadata is known in code, `layerFromEnv` when
|
|
10
|
+
* deploying with `OTEL_SERVICE_NAME` and `OTEL_RESOURCE_ATTRIBUTES`, and
|
|
11
|
+
* `layerEmpty` when no resource attributes should be provided. Resource
|
|
12
|
+
* attributes are for stable process or service metadata, not per-span or
|
|
13
|
+
* per-log data. The explicit `layer` helper sets `service.name` and the
|
|
14
|
+
* `telemetry.sdk.*` attributes after merging custom attributes, so those keys
|
|
15
|
+
* are controlled by this integration. With `layerFromEnv`, `OTEL_SERVICE_NAME`
|
|
16
|
+
* overrides `service.name` from `OTEL_RESOURCE_ATTRIBUTES`, and additional
|
|
17
|
+
* attributes passed to the layer are merged last.
|
|
18
|
+
*
|
|
19
|
+
* @since 4.0.0
|
|
3
20
|
*/
|
|
4
21
|
import type * as OtelApi from "@opentelemetry/api"
|
|
5
22
|
import * as Resources from "@opentelemetry/resources"
|
|
@@ -11,8 +28,10 @@ import * as Effect from "effect/Effect"
|
|
|
11
28
|
import * as Layer from "effect/Layer"
|
|
12
29
|
|
|
13
30
|
/**
|
|
14
|
-
*
|
|
31
|
+
* Context service containing the OpenTelemetry `Resource` associated with emitted telemetry.
|
|
32
|
+
*
|
|
15
33
|
* @category Services
|
|
34
|
+
* @since 4.0.0
|
|
16
35
|
*/
|
|
17
36
|
export class Resource extends Context.Service<
|
|
18
37
|
Resource,
|
|
@@ -20,8 +39,10 @@ export class Resource extends Context.Service<
|
|
|
20
39
|
>()("@effect/opentelemetry/Resource") {}
|
|
21
40
|
|
|
22
41
|
/**
|
|
23
|
-
*
|
|
42
|
+
* Creates a `Resource` layer from service metadata and additional OpenTelemetry attributes.
|
|
43
|
+
*
|
|
24
44
|
* @category Layers
|
|
45
|
+
* @since 4.0.0
|
|
25
46
|
*/
|
|
26
47
|
export const layer = (config: {
|
|
27
48
|
readonly serviceName: string
|
|
@@ -34,8 +55,10 @@ export const layer = (config: {
|
|
|
34
55
|
)
|
|
35
56
|
|
|
36
57
|
/**
|
|
37
|
-
*
|
|
58
|
+
* Converts resource configuration into OpenTelemetry attributes, adding service name, optional service version, and telemetry SDK metadata.
|
|
59
|
+
*
|
|
38
60
|
* @category Configuration
|
|
61
|
+
* @since 4.0.0
|
|
39
62
|
*/
|
|
40
63
|
export const configToAttributes = (options: {
|
|
41
64
|
readonly serviceName: string
|
|
@@ -57,8 +80,10 @@ export const configToAttributes = (options: {
|
|
|
57
80
|
}
|
|
58
81
|
|
|
59
82
|
/**
|
|
60
|
-
*
|
|
83
|
+
* Creates a `Resource` layer from OpenTelemetry environment variables, optionally merging additional attributes.
|
|
84
|
+
*
|
|
61
85
|
* @category Layers
|
|
86
|
+
* @since 4.0.0
|
|
62
87
|
*/
|
|
63
88
|
export const layerFromEnv = (
|
|
64
89
|
additionalAttributes?:
|
|
@@ -94,8 +119,10 @@ export const layerFromEnv = (
|
|
|
94
119
|
)
|
|
95
120
|
|
|
96
121
|
/**
|
|
97
|
-
*
|
|
122
|
+
* Layer that provides an empty OpenTelemetry resource.
|
|
123
|
+
*
|
|
98
124
|
* @category Layers
|
|
125
|
+
* @since 4.0.0
|
|
99
126
|
*/
|
|
100
127
|
export const layerEmpty = Layer.succeed(
|
|
101
128
|
Resource,
|
package/src/Tracer.ts
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Bridges Effect tracing into OpenTelemetry by installing an Effect `Tracer`
|
|
3
|
+
* that creates OpenTelemetry spans, records attributes, events, links, errors,
|
|
4
|
+
* and status, and keeps OpenTelemetry context active while traced effects run.
|
|
5
|
+
* Use this module when an application already has an OpenTelemetry
|
|
6
|
+
* `TracerProvider`, or when the Node and Web SDK layers should expose Effect
|
|
7
|
+
* spans to OTLP, console, or other OpenTelemetry-compatible exporters.
|
|
8
|
+
*
|
|
9
|
+
* The layer constructors wire Effect's tracer service to either the global
|
|
10
|
+
* OpenTelemetry tracer provider or an explicitly provided `OtelTracer`. This
|
|
11
|
+
* module does not create exporters or span processors by itself, so spans are
|
|
12
|
+
* exported only when the provider has been configured by the application or by
|
|
13
|
+
* the Node/Web SDK layers. Parentage is taken from Effect spans first and can
|
|
14
|
+
* also attach to the active OpenTelemetry context, while `makeExternalSpan` and
|
|
15
|
+
* `withSpanContext` are the entry points for continuing an incoming remote
|
|
16
|
+
* trace. Preserve `traceFlags` and `traceState` when building external spans;
|
|
17
|
+
* otherwise sampling defaults to sampled and trace state cannot be propagated.
|
|
18
|
+
*
|
|
19
|
+
* @since 4.0.0
|
|
3
20
|
*/
|
|
4
21
|
import * as Otel from "@opentelemetry/api"
|
|
5
22
|
import * as OtelSemConv from "@opentelemetry/semantic-conventions"
|
|
@@ -21,8 +38,10 @@ import { Resource } from "./Resource.ts"
|
|
|
21
38
|
// =============================================================================
|
|
22
39
|
|
|
23
40
|
/**
|
|
24
|
-
*
|
|
41
|
+
* Context service containing the OpenTelemetry `Tracer` used to create spans for Effect tracing.
|
|
42
|
+
*
|
|
25
43
|
* @category Services
|
|
44
|
+
* @since 4.0.0
|
|
26
45
|
*/
|
|
27
46
|
export class OtelTracer extends Context.Service<
|
|
28
47
|
OtelTracer,
|
|
@@ -30,8 +49,10 @@ export class OtelTracer extends Context.Service<
|
|
|
30
49
|
>()("@effect/opentelemetry/Tracer") {}
|
|
31
50
|
|
|
32
51
|
/**
|
|
33
|
-
*
|
|
52
|
+
* Context service containing the OpenTelemetry `TracerProvider` used to obtain tracers.
|
|
53
|
+
*
|
|
34
54
|
* @category Services
|
|
55
|
+
* @since 4.0.0
|
|
35
56
|
*/
|
|
36
57
|
export class OtelTracerProvider extends Context.Service<
|
|
37
58
|
OtelTracerProvider,
|
|
@@ -39,8 +60,10 @@ export class OtelTracerProvider extends Context.Service<
|
|
|
39
60
|
>()("@effect/opentelemetry/Tracer/OtelTracerProvider") {}
|
|
40
61
|
|
|
41
62
|
/**
|
|
42
|
-
*
|
|
63
|
+
* Context service containing OpenTelemetry trace flags used when constructing external span contexts.
|
|
64
|
+
*
|
|
43
65
|
* @category Services
|
|
66
|
+
* @since 4.0.0
|
|
44
67
|
*/
|
|
45
68
|
export class OtelTraceFlags extends Context.Service<
|
|
46
69
|
OtelTraceFlags,
|
|
@@ -48,8 +71,10 @@ export class OtelTraceFlags extends Context.Service<
|
|
|
48
71
|
>()("@effect/opentelemetry/Tracer/OtelTraceFlags") {}
|
|
49
72
|
|
|
50
73
|
/**
|
|
51
|
-
*
|
|
74
|
+
* Context service containing OpenTelemetry trace state used when constructing external span contexts.
|
|
75
|
+
*
|
|
52
76
|
* @category Services
|
|
77
|
+
* @since 4.0.0
|
|
53
78
|
*/
|
|
54
79
|
export class OtelTraceState extends Context.Service<
|
|
55
80
|
OtelTraceState,
|
|
@@ -61,8 +86,10 @@ export class OtelTraceState extends Context.Service<
|
|
|
61
86
|
// =============================================================================
|
|
62
87
|
|
|
63
88
|
/**
|
|
64
|
-
*
|
|
89
|
+
* Creates an Effect `Tracer` implementation backed by the configured OpenTelemetry tracer.
|
|
90
|
+
*
|
|
65
91
|
* @category Constructors
|
|
92
|
+
* @since 4.0.0
|
|
66
93
|
*/
|
|
67
94
|
export const make: Effect.Effect<Tracer.Tracer, never, OtelTracer> = Effect.map(
|
|
68
95
|
Effect.service(OtelTracer),
|
|
@@ -92,8 +119,10 @@ export const make: Effect.Effect<Tracer.Tracer, never, OtelTracer> = Effect.map(
|
|
|
92
119
|
)
|
|
93
120
|
|
|
94
121
|
/**
|
|
95
|
-
*
|
|
122
|
+
* Creates an Effect external span from an OpenTelemetry span context, preserving trace flags and trace state when provided.
|
|
123
|
+
*
|
|
96
124
|
* @category Constructors
|
|
125
|
+
* @since 4.0.0
|
|
97
126
|
*/
|
|
98
127
|
export const makeExternalSpan = (options: {
|
|
99
128
|
readonly traceId: string
|
|
@@ -134,8 +163,10 @@ export const makeExternalSpan = (options: {
|
|
|
134
163
|
// =============================================================================
|
|
135
164
|
|
|
136
165
|
/**
|
|
137
|
-
*
|
|
166
|
+
* Layer that provides the current global OpenTelemetry tracer provider.
|
|
167
|
+
*
|
|
138
168
|
* @category Layers
|
|
169
|
+
* @since 4.0.0
|
|
139
170
|
*/
|
|
140
171
|
export const layerGlobalProvider: Layer.Layer<OtelTracerProvider> = Layer.sync(
|
|
141
172
|
OtelTracerProvider,
|
|
@@ -143,8 +174,10 @@ export const layerGlobalProvider: Layer.Layer<OtelTracerProvider> = Layer.sync(
|
|
|
143
174
|
)
|
|
144
175
|
|
|
145
176
|
/**
|
|
146
|
-
*
|
|
177
|
+
* Layer that creates an OpenTelemetry tracer from the provided tracer provider and resource metadata.
|
|
178
|
+
*
|
|
147
179
|
* @category Layers
|
|
180
|
+
* @since 4.0.0
|
|
148
181
|
*/
|
|
149
182
|
export const layerTracer: Layer.Layer<OtelTracer, never, OtelTracerProvider | Resource> = Layer.effect(
|
|
150
183
|
OtelTracer,
|
|
@@ -159,30 +192,38 @@ export const layerTracer: Layer.Layer<OtelTracer, never, OtelTracerProvider | Re
|
|
|
159
192
|
)
|
|
160
193
|
|
|
161
194
|
/**
|
|
162
|
-
*
|
|
195
|
+
* Layer that creates an OpenTelemetry tracer from the global tracer provider and the current resource.
|
|
196
|
+
*
|
|
163
197
|
* @category Layers
|
|
198
|
+
* @since 4.0.0
|
|
164
199
|
*/
|
|
165
200
|
export const layerGlobalTracer: Layer.Layer<OtelTracer, never, Resource> = layerTracer.pipe(
|
|
166
201
|
Layer.provide(layerGlobalProvider)
|
|
167
202
|
)
|
|
168
203
|
|
|
169
204
|
/**
|
|
170
|
-
*
|
|
205
|
+
* Layer that installs an Effect tracer backed by the global OpenTelemetry tracer provider.
|
|
206
|
+
*
|
|
171
207
|
* @category Layers
|
|
208
|
+
* @since 4.0.0
|
|
172
209
|
*/
|
|
173
210
|
export const layerGlobal: Layer.Layer<OtelTracer, never, Resource> = Layer.effect(Tracer.Tracer, make).pipe(
|
|
174
211
|
Layer.provideMerge(layerGlobalTracer)
|
|
175
212
|
)
|
|
176
213
|
|
|
177
214
|
/**
|
|
178
|
-
*
|
|
215
|
+
* Layer that installs the Effect tracer using an `OtelTracer` already provided in the environment.
|
|
216
|
+
*
|
|
179
217
|
* @category Layers
|
|
218
|
+
* @since 4.0.0
|
|
180
219
|
*/
|
|
181
220
|
export const layerWithoutOtelTracer: Layer.Layer<never, never, OtelTracer> = Layer.effect(Tracer.Tracer, make)
|
|
182
221
|
|
|
183
222
|
/**
|
|
184
|
-
*
|
|
223
|
+
* Layer that creates an OpenTelemetry tracer from a provider and resource, then installs it as the Effect tracer.
|
|
224
|
+
*
|
|
185
225
|
* @category Layers
|
|
226
|
+
* @since 4.0.0
|
|
186
227
|
*/
|
|
187
228
|
export const layer: Layer.Layer<OtelTracer, never, OtelTracerProvider | Resource> = layerWithoutOtelTracer.pipe(
|
|
188
229
|
Layer.provideMerge(layerTracer)
|
|
@@ -204,8 +245,8 @@ const bigint1e9 = BigInt(1_000_000_000)
|
|
|
204
245
|
* When using OTLP, the returned span is a wrapper that conforms to the
|
|
205
246
|
* OpenTelemetry `Span` interface.
|
|
206
247
|
*
|
|
207
|
-
* @since 1.0.0
|
|
208
248
|
* @category accessors
|
|
249
|
+
* @since 4.0.0
|
|
209
250
|
*/
|
|
210
251
|
export const currentOtelSpan: Effect.Effect<Otel.Span, Cause.NoSuchElementError> = Effect.clockWith((clock) =>
|
|
211
252
|
Effect.map(Effect.currentSpan, (span) =>
|
|
@@ -307,8 +348,8 @@ const convertOtelTimeInput = (input: Otel.TimeInput | undefined, clock: Clock.Cl
|
|
|
307
348
|
* This is handy when you set up OpenTelemetry outside of Effect and want to
|
|
308
349
|
* attach to a parent span.
|
|
309
350
|
*
|
|
310
|
-
* @since 1.0.0
|
|
311
351
|
* @category Propagation
|
|
352
|
+
* @since 4.0.0
|
|
312
353
|
*/
|
|
313
354
|
export const withSpanContext: {
|
|
314
355
|
/**
|
|
@@ -317,8 +358,8 @@ export const withSpanContext: {
|
|
|
317
358
|
* This is handy when you set up OpenTelemetry outside of Effect and want to
|
|
318
359
|
* attach to a parent span.
|
|
319
360
|
*
|
|
320
|
-
* @since 1.0.0
|
|
321
361
|
* @category Propagation
|
|
362
|
+
* @since 4.0.0
|
|
322
363
|
*/
|
|
323
364
|
(spanContext: Otel.SpanContext): <A, E, R>(
|
|
324
365
|
self: Effect.Effect<A, E, R>
|
|
@@ -329,8 +370,8 @@ export const withSpanContext: {
|
|
|
329
370
|
* This is handy when you set up OpenTelemetry outside of Effect and want to
|
|
330
371
|
* attach to a parent span.
|
|
331
372
|
*
|
|
332
|
-
* @since 1.0.0
|
|
333
373
|
* @category Propagation
|
|
374
|
+
* @since 4.0.0
|
|
334
375
|
*/
|
|
335
376
|
<A, E, R>(self: Effect.Effect<A, E, R>, spanContext: Otel.SpanContext): Effect.Effect<A, E, Exclude<R, Tracer.ParentSpan>>
|
|
336
377
|
} = dual(2, <A, E, R>(
|
package/src/WebSdk.ts
CHANGED
|
@@ -1,5 +1,31 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Provides an Effect layer for configuring OpenTelemetry in browser
|
|
3
|
+
* applications. The module builds a shared resource from explicit service
|
|
4
|
+
* metadata and wires Effect tracing, metrics, and logging into OpenTelemetry
|
|
5
|
+
* SDK providers when span processors, metric readers, or log record processors
|
|
6
|
+
* are supplied.
|
|
7
|
+
*
|
|
8
|
+
* Use this module in client-side applications that need Effect spans, metrics,
|
|
9
|
+
* and logs exported from browser runtimes, such as single-page apps,
|
|
10
|
+
* multi-page apps with hydrated Effect code, frontend workers, or UI flows
|
|
11
|
+
* that should be correlated with backend traces. Telemetry is enabled only for
|
|
12
|
+
* the configured signal types, so tracing, metrics, and logging can be
|
|
13
|
+
* installed independently from the same layer.
|
|
14
|
+
*
|
|
15
|
+
* Browser SDKs cannot rely on process environment resource configuration, so
|
|
16
|
+
* provide stable service metadata explicitly and use resource attributes for
|
|
17
|
+
* application, release, deployment, or page-shell identity rather than
|
|
18
|
+
* per-event data. This module does not create exporters; supply
|
|
19
|
+
* browser-compatible processors, readers, and exporters yourself, and make sure
|
|
20
|
+
* their endpoints are reachable from the browser with the required CORS and
|
|
21
|
+
* authentication behavior. The layer is scoped: tracer providers are
|
|
22
|
+
* force-flushed and shut down when the scope is released, while metric readers
|
|
23
|
+
* and logger providers follow their respective layer lifecycles. Keep the
|
|
24
|
+
* scope alive for the lifetime of the browser application and release it during
|
|
25
|
+
* application teardown when possible so batched exporters and periodic metric
|
|
26
|
+
* readers can deliver buffered telemetry before the page is unloaded.
|
|
27
|
+
*
|
|
28
|
+
* @since 4.0.0
|
|
3
29
|
*/
|
|
4
30
|
import type * as Otel from "@opentelemetry/api"
|
|
5
31
|
import type { LoggerProviderConfig, LogRecordProcessor } from "@opentelemetry/sdk-logs"
|
|
@@ -17,8 +43,10 @@ import * as Resource from "./Resource.ts"
|
|
|
17
43
|
import * as Tracer from "./Tracer.ts"
|
|
18
44
|
|
|
19
45
|
/**
|
|
20
|
-
*
|
|
46
|
+
* Configuration for the Web OpenTelemetry layer, including resource metadata and optional tracing, metrics, and logging settings.
|
|
47
|
+
*
|
|
21
48
|
* @category Models
|
|
49
|
+
* @since 4.0.0
|
|
22
50
|
*/
|
|
23
51
|
export interface Configuration {
|
|
24
52
|
readonly spanProcessor?: SpanProcessor | ReadonlyArray<SpanProcessor> | undefined
|
|
@@ -36,8 +64,10 @@ export interface Configuration {
|
|
|
36
64
|
}
|
|
37
65
|
|
|
38
66
|
/**
|
|
39
|
-
*
|
|
67
|
+
* Creates a scoped Web OpenTelemetry tracer provider from one or more span processors and shuts it down when the layer is released.
|
|
68
|
+
*
|
|
40
69
|
* @category Layers
|
|
70
|
+
* @since 4.0.0
|
|
41
71
|
*/
|
|
42
72
|
export const layerTracerProvider = (
|
|
43
73
|
processor: SpanProcessor | NonEmptyReadonlyArray<SpanProcessor>,
|
|
@@ -65,18 +95,24 @@ export const layerTracerProvider = (
|
|
|
65
95
|
)
|
|
66
96
|
|
|
67
97
|
/**
|
|
68
|
-
*
|
|
98
|
+
* Creates a Web OpenTelemetry layer from configuration, providing the resource and enabling tracing, metrics, and logging when configured.
|
|
99
|
+
*
|
|
69
100
|
* @category Layers
|
|
101
|
+
* @since 4.0.0
|
|
70
102
|
*/
|
|
71
103
|
export const layer: {
|
|
72
104
|
/**
|
|
73
|
-
*
|
|
105
|
+
* Creates a Web OpenTelemetry layer from configuration, providing the resource and enabling tracing, metrics, and logging when configured.
|
|
106
|
+
*
|
|
74
107
|
* @category Layers
|
|
108
|
+
* @since 4.0.0
|
|
75
109
|
*/
|
|
76
110
|
(evaluate: LazyArg<Configuration>): Layer.Layer<Resource.Resource>
|
|
77
111
|
/**
|
|
78
|
-
*
|
|
112
|
+
* Creates a Web OpenTelemetry layer from configuration, providing the resource and enabling tracing, metrics, and logging when configured.
|
|
113
|
+
*
|
|
79
114
|
* @category Layers
|
|
115
|
+
* @since 4.0.0
|
|
80
116
|
*/
|
|
81
117
|
<E, R>(evaluate: Effect.Effect<Configuration, E, R>): Layer.Layer<Resource.Resource, E, R>
|
|
82
118
|
} = (
|