[new] Simplify default OpenTelemetry providers code, expose SDK

This commit is contained in:
Peter Taoussanis 2024-10-10 13:31:17 +02:00
parent 5ac872566a
commit 19548d3fac
2 changed files with 29 additions and 28 deletions

View file

@ -141,20 +141,22 @@
Env variable: `TAOENSSO_TELEMERE_otel-tracing` Env variable: `TAOENSSO_TELEMERE_otel-tracing`
Classpath resource: `taoensso.telemere.otel-tracing` Classpath resource: `taoensso.telemere.otel-tracing`
See also: `otel-get-default-providers`, `*otel-tracer*`, See also: `otel-default-providers_`, `*otel-tracer*`,
`taoensso.telemere.open-telemere/handler:open-telemetry`. `taoensso.telemere.open-telemere/handler:open-telemetry`.
[1] Ref. <https://github.com/open-telemetry/opentelemetry-java>" [1] Ref. <https://github.com/open-telemetry/opentelemetry-java>"
impl/enabled:otel-tracing?)) impl/enabled:otel-tracing?))
#?(:clj #?(:clj
(defn otel-get-default-providers (def otel-default-providers_
"Experimental, subject to change. Feedback welcome! "Experimental, subject to change. Feedback welcome!
When OpenTelemetry Java API [1] is present, returns map with keys: When OpenTelemetry Java API [1] is present, value will be a delayed map
:logger-provider - default `io.opentelemetry.api.logs.LoggerProvider` with keys:
:tracer-provider - default `io.opentelemetry.api.trace.TracerProvider` :logger-provider - default `io.opentelemetry.api.logs.LoggerProvider`
:via - ∈ #{:sdk-extension-autoconfigure :global} :tracer-provider - default `io.opentelemetry.api.trace.TracerProvider`
:via - ∈ #{:sdk-extension-autoconfigure :global}
:auto-configured-sdk - `io.opentelemetry.sdk.OpenTelemetrySdk` or nil
Uses `AutoConfiguredOpenTelemetrySdk` when possible, or Uses `AutoConfiguredOpenTelemetrySdk` when possible, or
`GlobalOpenTelemetry` otherwise. `GlobalOpenTelemetry` otherwise.
@ -162,34 +164,33 @@
See the relevant OpenTelemetry Java docs for details. See the relevant OpenTelemetry Java docs for details.
[1] Ref. <https://github.com/open-telemetry/opentelemetry-java>" [1] Ref. <https://github.com/open-telemetry/opentelemetry-java>"
[]
(enc/compile-when impl/present:otel? (enc/compile-when impl/present:otel?
(or (delay
;; Via SDK autoconfiguration extension (when available) (or
(enc/compile-when ;; Via SDK autoconfiguration extension (when available)
io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk (enc/compile-when
(enc/catching :common io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk
(let [builder (io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk/builder) (enc/catching :common
sdk (.getOpenTelemetrySdk (.build builder))] (let [builder (io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk/builder)
{:logger-provider (.getLogsBridge sdk) sdk (.getOpenTelemetrySdk (.build builder))]
:tracer-provider (.getTracerProvider sdk) {:logger-provider (.getLogsBridge sdk)
:via :sdk-extension-autoconfigure}))) :tracer-provider (.getTracerProvider sdk)
:via :sdk-extension-autoconfigure
:auto-configured-sdk sdk})))
;; Via Global (generally not recommended) ;; Via Global (generally not recommended)
(let [g (io.opentelemetry.api.GlobalOpenTelemetry/get)] (let [g (io.opentelemetry.api.GlobalOpenTelemetry/get)]
{:logger-provider (.getLogsBridge g) {:logger-provider (.getLogsBridge g)
:tracer-provider (.getTracerProvider g) :tracer-provider (.getTracerProvider g)
:via :global}))))) :via :global}))))))
#?(:clj
(def ^:no-doc otel-default-providers_
(when impl/present:otel? (delay (otel-get-default-providers)))))
#?(:clj #?(:clj
(def ^:dynamic ^:no-doc *otel-tracer* (def ^:dynamic ^:no-doc *otel-tracer*
"OpenTelemetry `Tracer` to use for Telemere's tracing signal creators "OpenTelemetry `Tracer` to use for Telemere's tracing signal creators
(`trace!`, `span!`, etc.), ∈ #{nil io.opentelemetry.api.trace.Tracer Delay}. (`trace!`, `span!`, etc.), ∈ #{nil io.opentelemetry.api.trace.Tracer Delay}.
See also `otel-tracing?`, `otel-get-default-providers`."
Defaults to the provider in `otel-default-providers_`.
See also `otel-tracing?`."
(enc/compile-when impl/enabled:otel-tracing? (enc/compile-when impl/enabled:otel-tracing?
(delay (delay
(when-let [^io.opentelemetry.api.trace.TracerProvider p (when-let [^io.opentelemetry.api.trace.TracerProvider p

View file

@ -220,7 +220,7 @@
Options: Options:
`:logger-provider` - nil or `io.opentelemetry.api.logs.LoggerProvider`, `:logger-provider` - nil or `io.opentelemetry.api.logs.LoggerProvider`,
(see `telemere/get-default-providers` for default)." (see `telemere/otel-default-providers_` for default)."
;; Notes: ;; Notes:
;; - Multi-threaded handlers may see signals ~out of order ;; - Multi-threaded handlers may see signals ~out of order