Minimum Observability Ontology¶
The Minimum Observability Ontology defines the smallest stable semantic model required to connect services, telemetry, runtime resources, dependencies, and operational signals.
It sits above the canonical mappings and provides a common conceptual model for the observability platform.
The ontology is intentionally small.
It does not attempt to model every OpenTelemetry attribute, Prometheus label, Grafana panel, or instrumentation detail. Those belong in the Metrics Catalogue, OTel Fields and Attributes, Field Matrix, and Canonical Mappings.
Purpose¶
The ontology provides a stable semantic layer for answering questions such as:
- Which service produced this telemetry?
- Which environment is the service running in?
- Which instance produced the signal?
- Which request generated this trace?
- Which span represents the operation?
- Which dependency did the service interact with?
- Which database operation occurred?
- Which log belongs to which trace or span?
- Which metric describes the service or its runtime?
- Which infrastructure resource is being observed?
The ontology therefore describes entities and relationships, not individual telemetry fields.
Ontology Scope¶
The minimum ontology contains the following concepts:
Service
Service Instance
Environment
Host
Process
Telemetry Signal
Trace
Span
Log Record
Metric
Dependency
Database
External Service
Runtime
These concepts are sufficient to connect the current dashboards and telemetry signals without introducing unnecessary domain complexity.
Core Concepts¶
Service¶
A logical application or service producing telemetry.
Examples:
data-quality-service
recommendation-service
api-gateway
Canonical identifier:
observability.service
Important properties:
- service name
- service version
- environment
A Service may have multiple Service Instances.
Service Instance¶
A running instance of a Service.
A Service Instance represents one execution instance rather than the logical service itself.
Examples:
data-quality-service instance A
data-quality-service instance B
Canonical identifier:
observability.service_instance
Important properties:
- instance ID
- process ID
- host
- runtime
- service
A Service Instance belongs to exactly one Service.
Environment¶
The deployment environment in which a Service Instance operates.
Examples:
development
staging
production
Canonical identifier:
observability.environment
A Service Instance operates in one Environment at a given point in time.
Host¶
The machine or compute environment hosting a Service Instance.
Important properties include:
- host name
- architecture
- operating system
Canonical identifier:
observability.host
A Host may run multiple Service Instances.
Process¶
The operating system process executing a Service Instance.
Important properties include:
- process ID
- runtime
- runtime version
- start time
Canonical identifier:
observability.process
A Process belongs to a Service Instance.
Runtime¶
The language runtime in which a Process executes.
Examples:
CPython
JVM
Node.js
Canonical identifier:
observability.runtime
The current implementation primarily exposes Python runtime information.
Telemetry Concepts¶
Telemetry Signal¶
A piece of observability data emitted by a Service or Service Instance.
The current system supports three primary signal types:
Metric
Log Record
Trace
Canonical identifier:
observability.telemetry_signal
A Telemetry Signal is produced by a Service Instance.
Metric¶
A numerical telemetry signal representing a measurement or state.
Examples:
request duration
CPU utilization
memory usage
GC collections
network I/O
Canonical identifier:
observability.metric
Metrics may describe:
- a Service
- a Service Instance
- a Process
- a Database
- an external dependency
- the underlying system
The metric definition itself belongs in the Metrics Catalogue.
Trace¶
A distributed execution record representing a request or operation across service boundaries.
Canonical identifier:
observability.trace
A Trace contains one or more Spans.
A Trace is associated with the Service or Services involved in the execution.
Span¶
A unit of work within a Trace.
Examples:
HTTP Request
SQL Query
Redis GET
HTTP Client Request
Authentication
Canonical identifier:
observability.span
A Span may:
- belong to a Trace
- have a parent Span
- represent an operation
- interact with a Dependency
- have a status
- have a duration
The Span hierarchy provides the execution path used by the Traces dashboard.
Log Record¶
A structured or unstructured log event emitted during application execution.
Canonical identifier:
observability.log_record
A Log Record may be associated with:
- a Service
- a Service Instance
- a Trace
- a Span
The current logging implementation provides trace and span correlation.
Dependency Concepts¶
Dependency¶
A system or component that a Service interacts with to perform work.
Canonical identifier:
observability.dependency
Dependencies may include:
Database
Redis
External Service
Internal Service
The Dependency concept provides a common parent for downstream systems without requiring every dependency type to become a separate top-level ontology concept.
Database¶
A persistent data system accessed by a Service.
Examples:
PostgreSQL
MySQL
Canonical identifier:
observability.database
Database operations appear as Metrics or Spans.
External Service¶
A service accessed over a network by the observed Service.
Examples:
payment provider
third-party API
internal microservice
Canonical identifier:
observability.external_service
HTTP client instrumentation provides telemetry describing interactions with these services.
Relationships¶
The minimum ontology is primarily defined by the following relationships:
Environment
↑
operates_in
|
Service Instance
|
├── instance_of ──→ Service
|
├── runs_on ──────→ Host
|
└── executes ─────→ Process
|
└── uses ──→ Runtime
Service Instance
|
└── produces ─────→ Telemetry Signal
|
├── Metric
├── Log Record
└── Trace
Trace
|
└── contains ─────→ Span
|
├── parent_of ──→ Span
|
└── interacts_with ──→ Dependency
|
├── Database
└── External Service
Log Record
|
├── belongs_to ───→ Trace
|
└── belongs_to ───→ Span
Metric
|
└── describes ────→ Observable Resource
Relationship Catalogue¶
| Relationship | Source | Target | Meaning |
|---|---|---|---|
instance_of |
Service Instance | Service | Instance belongs to a logical service |
operates_in |
Service Instance | Environment | Instance runs in an environment |
runs_on |
Service Instance | Host | Instance executes on a host |
executes |
Service Instance | Process | Instance is represented by a process |
uses |
Process | Runtime | Process executes using a runtime |
produces |
Service Instance | Telemetry Signal | Instance emits telemetry |
contains |
Trace | Span | Trace contains spans |
parent_of |
Span | Span | Span represents a parent operation |
interacts_with |
Span | Dependency | Span represents interaction with a dependency |
associated_with |
Log Record | Trace | Log is correlated with a trace |
associated_with |
Log Record | Span | Log is correlated with a span |
describes |
Metric | Observable Resource | Metric describes a runtime or service resource |
Observable Resource¶
Metrics require one additional abstraction.
A metric does not necessarily describe a Service directly.
For example:
CPU utilization
→ Process
Memory usage
→ Process
GC collections
→ Runtime
Request duration
→ Service / HTTP Request
Database operation duration
→ Database Operation
Therefore the ontology introduces:
Observable Resource
Canonical identifier:
observability.observable_resource
This is an abstract concept used to connect metrics to the thing being measured.
It does not require every resource to become an independent ontology entity.
Telemetry Relationships¶
The central telemetry model can therefore be represented as:
Service
│
└── Service Instance
│
├── Process
│ └── Runtime
│
└── produces
│
├── Metrics
│
├── Log Records
│ │
│ ├── Trace
│ └── Span
│
└── Traces
│
└── Spans
│
└── Dependencies
│
├── Database
└── External Service
This structure is sufficient to connect the current dashboards.
Dashboard Coverage¶
| Dashboard | Ontology Concepts Used |
|---|---|
| Service Overview | Service, Service Instance, Environment, Metric |
| Infrastructure | Service Instance, Host, Process, Runtime, Metric |
| HTTP/API | Service, Service Instance, Metric |
| Database | Service, Span, Database, Dependency, Metric |
| External Services | Service, Span, External Service, Dependency, Metric |
| Logs | Service, Service Instance, Log Record, Trace, Span |
| Traces | Service, Service Instance, Trace, Span, Dependency |
Mapping to Canonical IDs¶
The ontology consumes canonical identifiers rather than implementation specific metric names.
Examples:
service.name
↓
observability.service.name
↓
observability.service
service.instance.id
↓
observability.service.instance.id
↓
observability.service_instance
deployment.environment
↓
observability.environment
↓
observability.environment
trace_id
↓
observability.trace.id
↓
observability.trace
span_id
↓
observability.span.id
↓
observability.span
The mapping therefore follows:
OTel Field
↓
Canonical ID
↓
Ontology Concept
What Is Deliberately Not in the Minimum Ontology¶
The following are intentionally excluded from the first version:
Dashboard
Panel
PromQL Query
LogQL Query
Grafana
Jaeger
Prometheus
Loki
OpenTelemetry Collector
Instrumentation Library
Alert
SLO
Incident
Business KPI
Team
User
Customer
Deployment Pipeline
Container
Pod
Kubernetes Cluster
Cloud Provider
These may become useful later, but they are not necessary to represent the current observability model.
In particular, implementation systems such as Grafana, Jaeger, Prometheus, and Loki belong to the implementation architecture rather than the semantic ontology.
Future Extensions¶
The ontology can be extended when the observability implementation demonstrates a genuine need.
Potential future concepts include:
Container
Pod
Node
Cluster
Deployment
Queue
Job
Message
Alert
Incident
SLO
Business Metric
LLM Request
LLM Model
Token Usage
These should only be introduced when they represent stable concepts required by the telemetry model or dashboards.
Minimum Stable Model¶
The minimum stable observability ontology is therefore:
Service
Service Instance
Environment
Host
Process
Runtime
Telemetry Signal
Metric
Trace
Span
Log Record
Dependency
Database
External Service
Observable Resource
with the following core relationships:
Service
← instance_of ← Service Instance
Service Instance
→ operates_in → Environment
Service Instance
→ runs_on → Host
Service Instance
→ executes → Process
Process
→ uses → Runtime
Service Instance
→ produces → Telemetry Signal
Trace
→ contains → Span
Span
→ parent_of → Span
Span
→ interacts_with → Dependency
Log Record
→ associated_with → Trace
Log Record
→ associated_with → Span
Metric
→ describes → Observable Resource
This is deliberately the smallest model capable of representing the current observability system without turning the ontology into a duplicate of the field matrix or metrics catalogue.