Hello,
I’m using OpenTelemetry Java auto-instrumentation (v2.29.0) and storing
metrics/traces in Grafana (Mimir + Tempo).
My applications send these resource attributes:
- telemetry.distro.name: opentelemetry-java-instrumentation
- process.runtime.name: OpenJDK Runtime Environment
- telemetry.sdk.language: java
Is there any OTel semantic convention attribute that identifies the
Java framework (Spring Boot, JBoss/WildFly, Tomcat)?
For example: spring.application.name or deployment.framework?
Grafana version: 13.1.0
OTel Java agent: 2.29.0
I need this information because I’m making an automation for a dashboard, according to the technology.
| Template Title Pattern |
Extracted Technology |
Extracted Telemetry Type |
Target Detected Type |
| `{App} |
Logs` |
Generic / All |
Logs |
| `{App} |
Spring Boot |
Metrics` |
Spring Boot |
| `{App} |
Spring Boot |
Traces` |
Spring Boot |
| `{App} |
Tomcat |
Metrics` |
Tomcat |
| `{App} |
Tomcat |
Traces` |
Tomcat |
| `{App} |
JBoss |
Metrics` |
JBoss |
| `{App} |
JBoss |
Traces` |
JBoss |
| `{App} |
Apache |
Metrics` |
Apache |
| `{App} |
Apache |
Traces` |
Apache |
| `{App} |
Apache |
Colector` |
Apache |
I would say there is no stable convention:
I would use webengine:
There isn’t a single OTel semantic attribute for the underlying server framework; I’ve had to manually inject a custom resource attribute (e.g., framework.name via the OTel agent configuration to automate my dashboard detection
Confirmed from the OTel semantic conventions webengine.name is a documented resource attribute, and the specification includes Java application server examples (such as WildFly). It’s the closest standard resource attribute for identifying packaged web engines when it is populated.
For Spring Boot, there isn’t a dedicated semantic convention attribute. Using a custom resource attribute (for example, framework.name) via the OTel agent or SDK is a reasonable approach if you need deterministic dashboard selection.
Before building the automation, I’d also check a sample trace or metric from your own services to confirm webengine.name is actually being populated. It’s defined by the spec, but whether it’s emitted depends on the instrumentation and runtime.