a system by examining its outputs. In the context of software, this means being able to understand the internal state of a system by examining its telemetry data, which includes traces, metrics, and logs. https://opentelemetry.io/docs/what-is-opentelemetry/#what-is-observability
fix it. Monitoring vs. Observability Two ways to identify the underlying cause of problems Traces Metrics Logs Profiles Events Monitoring Observability tells us when something is wrong. “proactive” “reactive”
[2] Generating actionable insights and storing telemetry data are out of scope. An observability backend like Jaeger, Prometheus, or other commercial vendors. A major goal of OpenTelemetry is that you can easily instrument your applications or systems[1], no matter their language, infrastructure, or runtime environment. The storage and visualization of telemetry is intentionally left to other tools[2]. https://opentelemetry.io/docs/what-is-opentelemetry/
HotSpot based JIT compiler (Graal compiler) Native Image Ahead-of-time compilation Other features polyglot runtime (Truffle) based Python, Node.js, Ruby, etc.
instantly, and easy to distribute. • picocli (picocli - a mighty tiny command line interface) • Pkl configuration language Pkl :: Pkl Docs (pkl-lang.org) Serverless & Containerized applications Suitable for use in containerized and serverless applications where severe start-up time and memory management are needed. picocli Pkl
run without dependency on JDK. Points-to Analysis Run initializations Input Application Substrate VM JDK Dependencies (Libraries) Native executable Text section Data section Heap snapshotting AOT compiled code (specific to OS) Image heap
using Azure Application Insights, the following properties are required applicationinsights.connection.string =InstrumentationKey=000000-0000-0000-0000-0000000000 # If specific instrumentation is needed, we should explicitly enable it after disabling all instumentations otel.instrumentation.common.default-enabled=true Configuration application.properties (application.yml) Out of the box instrumentation | OpenTelemetry
But MicroMeter is now recommended. Quarkus provides dependencies around OpenTelemetry. No dependency provided from OpenTelemetry is required. Several platform specific dependencies are also provided.
if JDBC telemetry is needed --> <dependency> <groupId>io.opentelemetry.instrumentation</groupId> <artifactId>opentelemetry-jdbc</artifactId> </dependency> <!-- Additional exporters are available in Quarkiverse --> <dependency> <groupId>io.quarkiverse.opentelemetry.exporter</groupId> <artifactId>quarkus-opentelemetry-exporter-azure</artifactId> </dependency> Dependencies
[%c{2.}] (%t) %s%e%n quarkus.datasource.jdbc.telemetry=true # If using Azure Application Insights, the following properties are required quarkus.otel.azure.applicationinsights.connection.string =InstrumentationKey=00000000-0000-0000-0000-000000000000 Configuration application.properties (application.yml)
JDK 21 works as well. Spring Boot opentelemetry-spring-boot-starter (2.5.0-alpha used in this repo. The latest is 2.7.0) opentelemetry-bom (1.38.0 used in this repo. The latest is 1.41.0) Quarkus quarkus-bom (3.11.2 used in this repo. The latest is 3.14.2) quarkus-opentelemetry-exporter-azure (for Azure Application Insights, the latest is 3.8.3.1)
(Kotlin) • Short-lived and stateless Challenges • Round-trip time got longer as their business grows. • Slow startup and long round-trip time gave negative impact to customer experience. Concerns • Is zero code instrumentation of native applications feasible?
around observability. Confirmed they could add special metrics with codes if needed. Confirmed starter did not spoil the advantage of native application. Round-trip time was improved. Improved startup time of each component. Reduced memory/CPU usage allows them to rearrange resources. Additionally, reduced attack surfaces.
applications. • Spring Boot: Spring Boot Starter • Quarkus: enhanced support for OpenTelemetry Customer case study • In several scenarios, Agentless instrumentation fits better • Even if instrumenting typical Java applications. Let’s get involved! • OpenTelemetry project is active. • Your contribution is highly appreciated.