Best Practices for Naming Spans and Attributes in OpenTelemetry
TL;DR
A complete, up-to-date breakdown of practices for developers and founders. It covers the core ideas, the trade-offs that matter, a practical workflow, real numbers, and the questions people ask most — written to be skimmed, applied, and shared.
Key takeaways
- Watch cardinality on metric labels - a single unbounded label like user_id or request_id can explode a Prometheus time series database.
- Instrument once with OpenTelemetry and keep your data portable, so you can change observability backends without re-instrumenting every service.
- Make dashboards and alerts actionable: every alert should map to a runbook and a human decision, not just a red graph nobody owns.
- Define SLOs from the user's perspective (latency, availability, correctness) rather than from internal resource metrics like CPU or memory.
- Run blameless postmortems and feed their action items back into your alerting, SLOs, and automation to shrink the next incident.
This is a practical, up-to-date guide to Practices — what it is, why it matters in 2026, and how to apply it in real projects. It is written for developers and founders who want clear answers and proven best practices, not filler.
Whether you're just starting out or leveling up, treat this as a working reference you can return to. Every section is built to be skimmed, applied, and shared.
Controlling cost and cardinality
Observability data frequently grows faster than the systems it watches, and unmanaged telemetry can become one of the larger lines on a cloud bill, so cost control is now a first-class engineering concern. The dominant driver for metrics is cardinality - the number of unique label combinations - because attaching an unbounded value like a user ID or full URL to a metric can create millions of time series and overwhelm a database. For logs and traces, sampling is the primary lever: head-based sampling decides up front, while tail-based sampling in the OpenTelemetry Collector keeps the traces that are actually interesting, such as slow or errored requests. Tiered storage strategies move older or lower-value data to cheaper object storage, and tools increasingly let teams aggregate or drop low-signal data at the Collector before it ever reaches a paid backend. The guiding principle is to retain high-context data about anomalies and aggregate the routine, rather than storing everything at full fidelity forever.
SRE, SLOs, and error budgets
Site Reliability Engineering is a discipline that Google formalized, applying software engineering approaches to operations problems and treating reliability as a feature you can measure and budget for. At its core are Service Level Indicators (SLIs), which are precise measurements of behavior like the fraction of requests served faster than 300 milliseconds, and Service Level Objectives (SLOs), which are the target thresholds for those SLIs over a window. The error budget is the mathematical complement of the SLO: if your availability target is 99.9 percent, you are permitted 0.1 percent unreliability, and that budget becomes a shared decision-making tool. When the budget is healthy, teams are free to ship quickly and take risks; when it is spent, the policy is to halt feature launches and invest in reliability instead. This reframes the classic tension between developers who want to ship and operators who want stability into a single agreed-upon number.
AIOps and anomaly detection
AIOps refers to applying machine learning and statistical analysis to operations data to reduce noise, surface anomalies, and speed up root-cause analysis at a scale humans cannot manually monitor. Common applications include alert correlation and deduplication (grouping a storm of related alerts into a single incident), dynamic baselining that learns normal traffic patterns instead of relying on static thresholds, and automated anomaly detection on high-dimensional metrics. Vendors such as Datadog, Dynatrace, New Relic, and Splunk market AIOps capabilities, and the newest wave layers large language models on top to summarize incidents, draft postmortems, and suggest likely causes from correlated telemetry. The value is real when it cuts through alert fatigue and shortens investigation time, but practitioners caution that opaque models can erode trust if they cannot explain why they flagged something. The pragmatic stance going into 2026 is to use AIOps to augment on-call engineers - triaging and summarizing - rather than to fully automate judgment.
Prometheus and the metrics ecosystem
Prometheus is an open-source monitoring system and time series database that pioneered a pull-based model, scraping metrics from HTTP endpoints that applications expose in a simple text format. Its dimensional data model, where each time series is identified by a metric name plus a set of key-value labels, combined with the PromQL query language, made flexible slicing and alerting the norm in cloud-native operations. Prometheus is the de facto standard for Kubernetes monitoring, and its exposition format was formalized into OpenMetrics and is natively understood across the ecosystem. Because a single Prometheus server is designed to be simple and reliable rather than infinitely scalable, long-term storage and global querying are handled by projects such as Thanos, Cortex, Grafana Mimir, and VictoriaMetrics. Alertmanager, a companion component, handles deduplication, grouping, silencing, and routing of alerts to destinations like PagerDuty, Slack, or email.
Metrics, logs, and traces: the three signals
Metrics are numeric measurements aggregated over time, such as request rate, error count, or p99 latency, and they are cheap to store and fast to query at scale, which makes them ideal for alerting and trend analysis. Logs are timestamped records of discrete events, and when they are structured (emitted as key-value JSON rather than free text) they become queryable and correlatable instead of just human-readable. Traces follow a single request as it propagates across many services, breaking it into spans that show where time was spent and where errors originated, which is essential in microservice architectures. The three are complementary rather than competing: you typically alert on a metric, use traces to localize the failing service, and read logs to see the exact error. The strongest setups correlate all three through shared identifiers like trace IDs so an engineer can pivot seamlessly between them.
The OpenTelemetry Collector and pipelines
The OpenTelemetry Collector is a standalone, vendor-agnostic proxy that receives telemetry, processes it, and exports it onward, decoupling your applications from your observability backends. It is built around a pipeline of receivers (which ingest data in formats like OTLP, Prometheus, or Jaeger), processors (which batch, filter, redact, or sample data), and exporters (which forward it to one or more destinations). Running the Collector as an agent on each host or as a gateway service gives teams a central control point to enforce sampling policies, strip personally identifiable information, add resource attributes, and switch vendors by editing configuration rather than redeploying services. Tail-based sampling, where the Collector decides whether to keep a trace after seeing all its spans, is a common pattern for retaining interesting (slow or errored) traces while dropping routine ones. This architecture is a major reason OTel has become the default instrumentation layer for new systems.
Practices: Key Facts and Data
According to recent industry research and the official documentation linked below:
- Observability data volume growth is a recurring theme in industry reporting, with telemetry often growing faster than the applications it monitors, which is why sampling, cardinality control, and tiered storage have become mainstream concerns.
- OpenTelemetry is a Cloud Native Computing Foundation (CNCF) project and, by activity, is widely reported to be the second most active CNCF project after Kubernetes, reflecting broad cross-vendor investment as of 2025.
- Google popularized the SRE discipline through its 2016 book 'Site Reliability Engineering,' and the model of running services against explicit SLOs and error budgets has since been adopted well beyond Google.
Quick-Reference Summary
A map of what this guide covers:
| Topic | What you'll learn |
|---|---|
| Controlling cost and cardinality | Observability data frequently grows faster than the systems it watches |
| SRE, SLOs, and error budgets | Site Reliability Engineering is a discipline that Google formalized |
| AIOps and anomaly detection | AIOps refers to applying machine learning and statistical analysis to operations data to reduce noise |
| Prometheus and the metrics ecosystem | Prometheus is an open-source monitoring system and time series database that pioneered a pull-based model |
| Metrics, logs, and traces: the three signals | Metrics are numeric measurements aggregated over time |
| The OpenTelemetry Collector and pipelines | The OpenTelemetry Collector is a standalone |
How to Get Started with Practices
A simple path that works:
- Learn the fundamentals of Practices from primary sources, not just tutorials.
- Build one small, real project end to end.
- Get feedback, refactor, and add tests.
- Ship it publicly and document what you learned.
- Repeat with a slightly harder project each time.
Build It with a World-Class Full Stack Developer
Sandeep Kumar Chaudhary is a full stack world-class developer. If you want to turn this into a real, production-ready product, get in touch — message directly on WhatsApp at +9779802348957 for a fast, no-pressure consult.
You can also explore the projects already shipped to thousands of users, or start a conversation here.
Final Thoughts
Watch cardinality on metric labels - a single unbounded label like user_id or request_id can explode a Prometheus time series database. The developers and teams who win in 2026 pair strong fundamentals with consistent shipping. Start small, stay curious, build in public, and revisit this guide as your skills grow.
Sources and Further Reading
Frequently Asked Questions
What is practices?
Site Reliability Engineering is a discipline that Google formalized, applying software engineering approaches to operations problems and treating reliability as a feature you can measure and budget for. At its core are Service Level Indicators (SLIs), which are precise measurements of behavior like the fraction of requests served faster than 300 milliseconds, and Service Level Objectives (SLOs), which are the target thresholds for those SLIs over a window. This guide covers practices end to end — core concepts, best practices, concrete data, and a step-by-step approach you can apply right away.
Does AIOps replace on-call engineers?
Not in practice as of 2026; the effective pattern is augmentation rather than replacement. AIOps tooling is genuinely useful for correlating and deduplicating alerts, detecting anomalies against learned baselines, and summarizing incidents so responders spend less time gathering context. But judgment about mitigation and trade-offs still rests with engineers, and teams are cautious about acting automatically on models that cannot explain their reasoning, so humans remain in the loop for decisions.
What is the difference between an SLI, an SLO, and an SLA?
An SLI (Service Level Indicator) is a measured quantity such as the percentage of requests served under 300 milliseconds. An SLO (Service Level Objective) is your internal target for that indicator, for example that 99.9 percent of requests meet the latency threshold. An SLA (Service Level Agreement) is a contractual commitment to customers, usually looser than your internal SLO, with financial or legal consequences if you breach it.
Do I need OpenTelemetry if I already use Prometheus?
They solve overlapping but distinct problems, and many teams use both. Prometheus is a metrics collection and storage system, while OpenTelemetry is a vendor-neutral instrumentation standard that covers metrics, logs, and traces together. OpenTelemetry can export metrics to Prometheus, so a common modern setup uses OTel to instrument applications and Prometheus (or a compatible store) as the metrics backend, giving you portable tracing and logging on top.
Should I sample my traces, and how?
Yes, at meaningful volume you almost always sample, because storing every trace is expensive and mostly redundant. Head-based sampling makes a keep-or-drop decision at the start of a request, which is simple but can miss rare errors, while tail-based sampling in the OpenTelemetry Collector waits until a trace is complete and keeps the interesting ones, such as slow or errored requests. A common approach is tail-based sampling that retains all errors and a percentage of normal traffic to preserve statistical baselines.
Sandeep Kumar Chaudhary
Full Stack Software Developer· Nepal's SEO, AEO, GEO & AIO expert and share-market educator. More about me
