Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support logs bridge API #8

Open
devurandom opened this issue Jun 19, 2023 · 1 comment
Open

Support logs bridge API #8

devurandom opened this issue Jun 19, 2023 · 1 comment

Comments

@devurandom
Copy link

devurandom commented Jun 19, 2023

It would be nice if clj-otel would support the recently stabilized logs and logs bridge APIs.

I am particularly interested in a clojury wrapper for:

(let [^java.time.Instant
      instant         _
      ^io.opentelemetry.api.logs.Severity
      severity        _
      ^io.opentelemetry.api.common.Attributes
      attributes      _
      ^java.lang.String
      message         _
      ^java.lang.String
      ns-str          _
      ^io.opentelemetry.api.logs.LoggerProvider
      logger-provider _
      ^io.opentelemetry.api.logs.Logger
      logger          (.get logger-provider ns-str)]
  (.emit
    (doto (.logRecordBuilder logger)
      (.setTimestamp instant)
      (.setSeverity severity)
      (.setSeverityText (.toString severity))
      (.setAllAttributes attributes)
      (.setBody message))))

(Explicit type annotations to prevent misunderstandings.)

See taoensso/timbre#374 for an example of what I am trying to do with this.

devurandom added a commit to devurandom/timbre that referenced this issue Jun 19, 2023
Requires io.opentelemetry/opentelemetry-api.

With Java Agent:

Activate an appender configured by the OpenTelemetry Java Agent:
```clj
(let [logger-provider (.getLogsBridge (GlobalOpenTelemetry/get))
      appender (taoensso.timbre.appenders.community.otlp/otlp-appender logger-provider)]
  (taoensso.timbre/merge-config! {:appenders {:otlp appender}}))
```

Note: When relying on the OpenTelemetry Java Agent 1.x, you need
to explicitly enable the logs exporter with `OTEL_LOGS_EXPORTER=otlp`.
This will become the default with the release of Java Agent 2.0, cf.
* https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/CHANGELOG.md#version-1270-2023-06-14
* open-telemetry/opentelemetry-java-instrumentation#8647

Without Java Agent:

If you want autoconfiguration without the Java Agent, you also need
io.opentelemetry/opentelemetry-sdk-extension-autoconfigure and
io.opentelemetry/opentelemetry-exporter-otlp on the classpath.

Create an autoconfigured appender and activate it:
```clj
(let [logger-provider (.getSdkLoggerProvider
                        (.getOpenTelemetrySdk
                          (.build
                            (AutoConfiguredOpenTelemetrySdk/builder))))
      appender (taoensso.timbre.appenders.community.otlp/otlp-appender logger-provider)]
  (taoensso.timbre/merge-config! {:appenders {:otlp appender}}))
```

If you already have an instance of `GlobalOpenTelemetry`, e.g. created
by the OpenTelemetry Java Agent, you need to prevent setting the newly
created SDK as the global default:
```clj
(.build
  (doto (AutoConfiguredOpenTelemetrySdk/builder)
    (.setResultAsGlobal false)))
```

I took inspiration from `taoensso.timbre.appenders.community.sentry`.

Once steffan-westcott/clj-otel#8 is implemented,
the actual log emission should be replaced with using clj-otel's API.
devurandom added a commit to devurandom/timbre that referenced this issue Jun 19, 2023
Requires com.github.steffan-westcott/clj-otel-api.

With Java Agent:

Activate an appender configured by the OpenTelemetry Java Agent:
```clj
(let [logger-provider (.getLogsBridge (GlobalOpenTelemetry/get))
      appender (taoensso.timbre.appenders.community.otlp/otlp-appender logger-provider)]
  (taoensso.timbre/merge-config! {:appenders {:otlp appender}}))
```

Note: When relying on the OpenTelemetry Java Agent 1.x, you need
to explicitly enable the logs exporter with `OTEL_LOGS_EXPORTER=otlp`.
This will become the default with the release of Java Agent 2.0, cf.
* https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/CHANGELOG.md#version-1270-2023-06-14
* open-telemetry/opentelemetry-java-instrumentation#8647

Without Java Agent:

If you want autoconfiguration without the Java Agent, you also need
io.opentelemetry/opentelemetry-sdk-extension-autoconfigure and
io.opentelemetry/opentelemetry-exporter-otlp on the classpath.

Create an autoconfigured appender and activate it:
```clj
(let [logger-provider (.getSdkLoggerProvider
                        (.getOpenTelemetrySdk
                          (.build
                            (AutoConfiguredOpenTelemetrySdk/builder))))
      appender (taoensso.timbre.appenders.community.otlp/otlp-appender logger-provider)]
  (taoensso.timbre/merge-config! {:appenders {:otlp appender}}))
```

If you already have an instance of `GlobalOpenTelemetry`, e.g. created
by the OpenTelemetry Java Agent, you need to prevent setting the newly
created SDK as the global default:
```clj
(.build
  (doto (AutoConfiguredOpenTelemetrySdk/builder)
    (.setResultAsGlobal false)))
```

I took inspiration from `taoensso.timbre.appenders.community.sentry`.

Once steffan-westcott/clj-otel#8 is implemented,
the actual log emission should be replaced with using clj-otel's API.
devurandom added a commit to devurandom/timbre that referenced this issue Jun 19, 2023
Requires com.github.steffan-westcott/clj-otel-api.

With Java Agent:

Activate an appender configured by the OpenTelemetry Java Agent:
```clj
(let [logger-provider (.getLogsBridge (GlobalOpenTelemetry/get))
      appender (taoensso.timbre.appenders.community.otlp/otlp-appender logger-provider)]
  (taoensso.timbre/merge-config! {:appenders {:otlp appender}}))
```

Note: When relying on the OpenTelemetry Java Agent 1.x, you need
to explicitly enable the logs exporter with `OTEL_LOGS_EXPORTER=otlp`.
This will become the default with the release of Java Agent 2.0, cf.
* https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/CHANGELOG.md#version-1270-2023-06-14
* open-telemetry/opentelemetry-java-instrumentation#8647

Without Java Agent:

If you want autoconfiguration without the Java Agent, you also need
io.opentelemetry/opentelemetry-sdk-extension-autoconfigure and
io.opentelemetry/opentelemetry-exporter-otlp on the classpath.

Create an autoconfigured appender and activate it:
```clj
(let [logger-provider (.getSdkLoggerProvider
                        (.getOpenTelemetrySdk
                          (.build
                            (AutoConfiguredOpenTelemetrySdk/builder))))
      appender (taoensso.timbre.appenders.community.otlp/otlp-appender logger-provider)]
  (taoensso.timbre/merge-config! {:appenders {:otlp appender}}))
```

If you already have an instance of `GlobalOpenTelemetry`, e.g. created
by the OpenTelemetry Java Agent, you need to prevent setting the newly
created SDK as the global default:
```clj
(.build
  (doto (AutoConfiguredOpenTelemetrySdk/builder)
    (.setResultAsGlobal false)))
```

I took inspiration from `taoensso.timbre.appenders.community.sentry`.

Once steffan-westcott/clj-otel#8 is implemented,
the actual log emission should be replaced with using clj-otel's API.
@steffan-westcott
Copy link
Owner

@devurandom Thank you for your interest in clj-otel. To set expectations, please note I intend to establish support for existing OpenTelemetry Java log appenders before addressing the Logs Bridge API.

@devurandom devurandom changed the title Support logs API Support logs bridge API Jun 19, 2023
devurandom added a commit to devurandom/timbre that referenced this issue Jun 19, 2023
Requires com.github.steffan-westcott/clj-otel-api.

With Java Agent:

Activate an appender configured by the OpenTelemetry Java Agent:
```clj
(let [logger-provider (.getLogsBridge (GlobalOpenTelemetry/get))
      appender (taoensso.timbre.appenders.community.otlp/otlp-appender logger-provider)]
  (taoensso.timbre/merge-config! {:appenders {:otlp appender}}))
```

Note: When relying on the OpenTelemetry Java Agent 1.x, you need
to explicitly enable the logs exporter with `OTEL_LOGS_EXPORTER=otlp`.
This will become the default with the release of Java Agent 2.0, cf.
* https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/CHANGELOG.md#version-1270-2023-06-14
* open-telemetry/opentelemetry-java-instrumentation#8647

Without Java Agent:

If you want autoconfiguration without the Java Agent, you also need
io.opentelemetry/opentelemetry-sdk-extension-autoconfigure and
io.opentelemetry/opentelemetry-exporter-otlp on the classpath.

Create an autoconfigured appender and activate it:
```clj
(let [logger-provider (.getSdkLoggerProvider
                        (.getOpenTelemetrySdk
                          (.build
                            (AutoConfiguredOpenTelemetrySdk/builder))))
      appender (taoensso.timbre.appenders.community.otlp/otlp-appender logger-provider)]
  (taoensso.timbre/merge-config! {:appenders {:otlp appender}}))
```

If you already have an instance of `GlobalOpenTelemetry`, e.g. created
by the OpenTelemetry Java Agent, you need to prevent setting the newly
created SDK as the global default:
```clj
(.build
  (doto (AutoConfiguredOpenTelemetrySdk/builder)
    (.setResultAsGlobal false)))
```

I took inspiration from `taoensso.timbre.appenders.community.sentry`.

Once steffan-westcott/clj-otel#8 is implemented,
the actual log emission should be replaced with using clj-otel's API.
ptaoussanis pushed a commit to taoensso/timbre that referenced this issue Feb 23, 2024
…evurandom)

Once <steffan-westcott/clj-otel#8> is implemented,
the actual log emission should be replaced with clj-otel's API.
ptaoussanis pushed a commit to taoensso/timbre that referenced this issue Feb 26, 2024
…evurandom)

Once <steffan-westcott/clj-otel#8> is implemented,
the actual log emission should be replaced with clj-otel's API.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants