What Is OpenTelemetry? A Guide to the OTel Framework 

Teams that standardize on OpenTelemetry keep a genuine choice of observability vendors, because the agent you install today decides how portable your traces, metrics, and logs will be tomorrow. OpenTelemetry protects that choice by standardizing how telemetry is produced, regardless of which backend eventually stores it.

This guide covers what OpenTelemetry is and why it exists, how its three signals and core components fit together, and the production trade-offs to plan for before you standardize on it. OpenTelemetry (OTel) is a vendor-neutral framework for instrumenting, generating, collecting, and exporting telemetry data: the traces, metrics, and logs your systems produce. Producing that data in one standard format lets you own your observability pipeline, decoupled from whichever vendor’s agent your team installed.

What Is OpenTelemetry?

OpenTelemetry is a standard for how applications produce and transport telemetry. A separate observability backend handles storage, querying, analysis, and alerts. You still choose that platform, while your instrumentation and collection layer, including the wire protocol, stay the same regardless of which backend you pick. The Cloud Native Computing Foundation (CNCF) hosts the project, which includes a specification, language application programming interfaces (APIs), software development kits (SDKs), automatic instrumentation, the OpenTelemetry Collector, and the OpenTelemetry Protocol (OTLP).

The Three Signals: Traces, Metrics, and Logs

OpenTelemetry treats traces, metrics, and logs as first-class signals that share one context model. Shared context lets you pivot between them mid-incident. Context propagation carries trace and span identifiers across service boundaries, so backends can correlate signals no matter which service generated them. That shared model consolidates telemetry records into a single request view.

Traces

A trace records the path of a request through your application as a tree of spans. Each span is a unit of work and carries a name, parent span ID, timestamps, attributes, events, and a status. Span context travels with the request in a standard traceparent header, so when service A calls service B, service B creates a new span in the same trace with service A’s span as its parent. When your checkout service’s p99 latency jumps, the span tree shows which downstream call is responsible instead of leaving your on-call engineer to infer it from per-service dashboards.

Metrics

Applications capture metrics at runtime using instrumentation types, including counters, up-down counters, gauges, and histograms. The SDK aggregates measurements over a time window before it exports them. Views let you control SDK processing and aggregation, including which attributes it reports. Exemplars, a stable part of the metrics data model, attach trace context to metric events, so a spike in a latency histogram can link directly to a trace that landed in that bucket.

Logs

A log in OpenTelemetry is a timestamped text record, structured or unstructured, with optional metadata. Existing logging libraries remain in place, and OpenTelemetry bridges them into the pipeline. Your applications keep their current loggers, and your teams configure appenders that emit records through the OpenTelemetry pipeline. The SDK can inject trace and span IDs when your language’s SDK supports it, so you can pull every log line associated with a specific trace during debugging. One caveat for polyglot shops: log support remains at Beta or Development status in the Go, JavaScript, Python, Ruby, and Swift SDKs, so you’ll want to check per-language maturity before treating logs as fully stable everywhere.

How OpenTelemetry Works: Core Components

Instrumentation produces telemetry. The Collector receives and processes it, then exporters send it over OTLP. These layer boundaries also show where your platform team’s configuration work will live.

Instrumentation: SDKs and Auto-Instrumentation

OpenTelemetry separates the API from the SDK by design, so libraries instrument against the stable API and emit nothing on their own. The application installs the SDK that processes and exports telemetry, so your platform team can control export behavior without touching library code.

Zero-code instrumentation attaches an agent that injects OTel calls through bytecode manipulation, monkey patching, extended Berkeley Packet Filter (eBPF), or similar mechanisms, and it captures web requests, database queries, message queues, and other application edges. Code-based instrumentation covers what agents can’t see, your domain logic, with custom spans and metrics; teams usually start with zero-code and add SDK-level instrumentation once they need telemetry pipelines beyond the agent’s environment-variable configuration.

The OpenTelemetry Collector

The OpenTelemetry Collector is a standalone binary that uses configurable pipelines to receive telemetry and export processed data. A Collector pipeline starts with receivers, then runs processors for transformations such as filtering or sampling data in sequence before exporters send a copy to each destination. One Collector can fan the same stream out to several backends at once.

Kubernetes is the most common environment for Collector deployments, and common patterns often coexist in one environment: a DaemonSet agent on each node gathers host metrics and log files, while a centralized gateway tier handles enrichment, sampling decisions, and routing. Recent Collector deployment patterns show gateway and DaemonSet deployments as the most common approaches, with sidecars less common.

Exporters and the OTLP Protocol

OTLP defines how SDKs, Collectors, and backends encode and deliver telemetry. OTLP version 1.10.0 is stable for traces, metrics, and logs. SDKs, Collectors, and backends send data as Protocol Buffers over gRPC, a high-performance remote procedure call framework, on default port 4317, or over the Hypertext Transfer Protocol (HTTP) as binary or JavaScript Object Notation (JSON) payloads, on default port 4318. Retargeting your telemetry comes down to environment variables such as OTEL_EXPORTER_OTLP_ENDPOINT and OTEL_EXPORTER_OTLP_HEADERS.

What Are the Benefits of OpenTelemetry?

OpenTelemetry reached 49 percent production use, with roughly another quarter of respondents evaluating it. OpenTelemetry separates instrumentation and transport from the backend product, and that adoption curve reflects three concrete advantages once a team standardizes on it:

  • Vendor neutrality and no lock-in: You instrument once, and any OTLP-compliant backend can receive that data without code changes across your services. One team that migrated from a commercial application performance monitoring (APM) vendor to OpenTelemetry reported a 72 percent cost reduction, moving from sampling a small share of production traces to full trace coverage across all environments. Instrumentation stays portable, though dashboards, alerts, and saved queries remain backend-specific and need rebuilding after any migration.
  • One data model across every signal: Semantic conventions give every signal a shared vocabulary, so a service name or request attribute means the same thing whether it appears on a span, a metric, or a log record, and backends can correlate related signals without guessing at field mappings. Combined with automatic trace context injection, that shared model turns cross-signal navigation into a lookup: you find every log record attached to a failing trace by trace context.
  • Future-proofing your observability stack: A major CNCF project with a broad contributor base is a safer foundation than any single vendor’s agent, because no one company’s pricing change or roadmap pivot can strand your instrumentation. The standard also continues to absorb new signal types, such as profiling, now in public alpha, through the pipeline you already operate.

Instrumentation lives in your code and deploy manifests, so it has the longest half-life of anything in your observability stack.

Common Challenges Teams Run Into

OpenTelemetry shifts cost from proprietary agent fees and lock-in to Collector infrastructure and configuration work, plus engineering time. The instrumentation layer and Collector tier are where teams hit trouble in production, and both are manageable with the right groundwork:

  • Instrumentation overhead: Instrumentation is not free at the CPU level. Manual tracing with full sampling added 17.8 percent overhead on average and measurable p95 latency overhead, and auto-instrumentation cost roughly twice the CPU of manual instrumentation, though lowering the sampling probability cuts overhead sharply for both approaches. Sampling rates need deliberate tuning, and metric cardinality deserves the same scrutiny: when attribute combinations exceed the SDK’s cardinality limits, excess time series collapse into an overflow bucket and quietly degrade your metrics.
  • Collector configuration and scaling at volume: The Collector fails in specific, predictable ways under load. When an exporter’s sending queue fills, backpressure propagates backward through the pipeline until receivers reject data, and telemetry drops silently from the application’s perspective; the memory limiter processor and exporter queue monitoring are not optional once volume climbs. Tail-based sampling raises the bar further, because a sampling decision needs every span in a trace, which forces trace-aware routing so all spans of one trace reach the same Collector instance, and once you run larger Collector fleets across heterogeneous environments, fleet configuration becomes its own domain, which is the problem the Open Agent Management Protocol (OpAMP) exists to solve.

Knowing the specific failure modes ahead of time turns a production incident into a configuration fix instead.

How Coralogix Solves These OpenTelemetry Challenges

Coralogix addresses the instrumentation overhead and Collector-scaling challenges above at the ingestion layer: it’s built to receive OpenTelemetry data directly, without routing it through a proprietary agent first. That affects both how you get data in and how you operate a Collector fleet day to day.

Coralogix Accepts OTLP Directly

Coralogix accepts OTLP directly for logs, metrics, and traces over gRPC or HTTP, so you don’t need a proprietary agent to get data in or to migrate away from one later. Coralogix provides Kubernetes OpenTelemetry deployment options that can be configured with OTLP receivers on standard ports. This Kubernetes setup can reduce or replace separate log shippers such as Fluentd, Fluent Bit, or Filebeat, and can limit the need for host-level vendor agents, depending on your collection requirements.

Fleet Management Uses OpAMP

Fleet Management gives you a central place to track and manage OpenTelemetry collectors in your environment over OpAMP, the same protocol behind the fleet-configuration challenge above. It provides collector health monitoring and operational visibility across managed OTel collectors. Supervised remote configuration rollouts to make changes repeatable and auditable for targeted deployments. DataPrime queries run across OTel-emitted telemetry in the same query language you use for data from any other source.

Try Coralogix on Your Existing Collector

If vendor lock-in from proprietary agents is the pain slowing your team down, pointing your existing OpenTelemetry Collector at a Coralogix OTLP endpoint gets you off that path without re-instrumenting a single service. Start a free 14-day trial of Coralogix and see your traces, metrics, and logs correlated in one query language once your OTel data is flowing.

Frequently Asked Questions About OpenTelemetry

Does OpenTelemetry replace my APM tool?

No. OpenTelemetry produces and moves telemetry, and an APM or observability backend still stores, queries, and alerts on it. Switching to OpenTelemetry changes how you instrument and ship data, not which backend does the analysis. You can point the same OpenTelemetry pipeline at a different backend later without touching application code again.

What is the difference between OTLP and the OpenTelemetry Collector?

OTLP is the wire protocol that encodes and transports telemetry between SDKs, Collectors, and backends. The Collector is the standalone binary that receives telemetry and exports processed data through configurable pipelines. One is the format on the wire; the other is the component moving data along it.

How long does it take to roll out OpenTelemetry?

Timelines depend on service count and language mix more than on OpenTelemetry itself. Teams often add zero-code instrumentation across existing services within days, then layer in SDK-level custom spans for domain logic over the following weeks, though timelines vary with stack complexity. Collector topology and sampling strategy usually take longer to tune than instrumentation does, especially at high trace volume. A free 14-day trial lets you point an existing Collector at Coralogix and see correlated telemetry before you commit to a topology.

Benefits of Learning Python for Game Development

The world of computer games is vast, ranging from single-player agility games and logic puzzles with simple 2D animations to the stunning graphics in 3D rendered massive multiplayer online role-playing games like the Lost Ark.

Wanting to design and build your own games is a common motivator for learning to code while building a portfolio of work is an essential step for breaking into the gaming industry. For experienced developers, creating your own game from scratch can be anything from a satisfying side project. It can be an opportunity to experiment with elements of computing that don’t feature in your day job – like graphics and audio – or a taste of what would be involved in moving to a new role within computing.

Once you’ve devised an idea for a new computer game, one of your decisions needs to be which programming language to use to turn your ideas into reality. Python is one of the most popular programming languages in the world and an excellent choice for those new to coding. However, as you may have found if you’ve already started researching this topic, Python isn’t necessarily an obvious choice for game development. In this article, we’ll look at the pros and cons of Python for building computer games, some of the considerations for writing games in Python, and essential libraries and frameworks to help you get started.

Advantages of Python for game development

As we said above, Python is one of the world’s most popular programming languages, and with good reason. Its concise, human-readable syntax and built-in interpreter make Python an optimal choice for anyone new to programming. Its platform independence, extensive ecosystem of libraries, and high-level design ensure versatility and increase developer productivity.

How does that translate to game development? If you’re new to coding, you’ll find plenty of resources to help you start writing code in Python. As a high-level language, Python abstracts away details about how your code is run, leaving you focused on the logic and aesthetics of your game design. However, for games where performance is a key concern, this is the biggest disadvantage.

Developer overheads when working in Python are quite low, so you can get something up and running quickly. This is great for beginners and experienced developers alike. As a novice, seeing your progress and building up your game incrementally makes for a more rewarding experience and makes it easier to find mistakes as you go. For professionals, this makes Python an ideal tool for getting something working quickly in the case of prototyping while also providing a dev-friendly language for longer-term development.

Furthermore, the Python ecosystem is vast, with a friendly online community of developers you can turn to for pointers if you get stuck. Because it’s both open-source and flexible, Python is used for a wide range of applications, so you can find libraries for machine learning, artificial intelligence, manipulating audio, and processing graphics, as well as several libraries and frameworks aimed explicitly at game development (discussed in more detail below). All of this makes it easier to start developing games with Python.

Disadvantages of Python for game development

One of Python’s key upsides as a general programming language is also its main drawback when it comes to game development, at least where video games are concerned. The high rendering speeds, realistic graphics, and responsiveness that players expect from video games require developers to optimize their code for every microsecond of computing performance. Although high-level languages like Python are not designed to be slow, they don’t give developers the flexibility to control how memory is allocated and released or to interact with hardware-level components. Furthermore, Python is interpreted at runtime rather than compiled in advance – that doesn’t necessarily make a perceptible difference on modern hardware for most applications. Still, when speed is of the essence, it matters.

Instead, video game developers have tended towards lower-level languages that give them more precise control over resources, with C++ being the primary choice. While computing power and memory have increased significantly in the last decade, so have user expectations. When you’re building a game involving 3D graphics that emulate real-world physics from multiple perspectives while responding to hundreds of simultaneous inputs, you simply can’t afford to waste processor cycles. Combine that with decades of industry experience and knowledge poured into building the tools to support game development. Unsurprisingly, many best-known gaming engines, including Unreal, Unity, CryEngine, and Godot, are written wholly or partly in C++. Other popular languages within the gaming world include C# (also used by Unity) and Java.

When to use Python for game development

Despite these limitations, Python has plenty to offer game developers.

Prototyping games with Python

Because it’s easy to work with, Python is a great choice for prototyping all kinds of programs, including games. Even if you’re planning to build the final version in a different language for performance reasons, Python provides a quick turnaround time for trying out game logic, testing concepts on your target audience, or pitching ideas to colleagues and stakeholders.

Learning to code via game development

If you’re using game development to learn how to code, then Python is an excellent way to become familiar with the basics and learn about object orientation. You’ll be able to progress relatively quickly and test what you’re building as you go. You’ll also find plenty of gaming libraries and tutorials for different experience levels.

Scripting gaming engines with Python

If your sights are set on a career in gaming, and you’re concerned that learning Python will be a waste of effort, you might want to think again. As a widely used, open-source scripting language, Python is a common choice for some supporting code in developing larger games. Unreal Engine, for example, supports Python for scripting tasks that you can perform manually from the editor, like importing assets or randomizing actor placement. In contrast, Unity supports Python for automating scene and sequence assembly, among other tasks.

Developing games with Python

Don’t let performance considerations turn you off Python for gaming completely. If you’re looking to develop a game that doesn’t need to be tuned for maximum performance and you’re not using one of the heavyweight gaming engines, then Python is a valid choice. For a sense of what’s possible, look at existing games built with Python, including Disney’s ToonTown Online, Frets on Fire, The Sims 4, and Eve Online.

Getting started in game development with Python

The Python ecosystem offers gaming libraries for everyone from complete novices to experienced Pythonistas, including:

  • Pygame is a popular choice for building relatively simple 2D games.
  • Pygame Zero provides a tutorial for migrating games built in Scratch, making it ideal for complete beginners, including children.
  • Pyglet is a powerful cross-platform windowing and multimedia library for building games and other graphically rich applications.
  • Panda3D was originally developed by Disney to build Toontown Online and is now an open-source framework for building games and 3D-rendered graphics with Python. Under the hood, Panda3D uses C++, and you can create games using C++.
  • Ursina Engine was built on Panda3D and simplified certain aspects of that library.
  • Kivy is a framework for developing Python apps for multiple platforms, including Android, iOS, and Raspberry Pi. You’ll find serval tutorials showing you how to start building games for mobile with Kivy.

Final thoughts

Part of being a developer is choosing the correct programming language for the job. Python has a place within game development: as an entry point for those new to coding, as a prototyping tool for creating proofs of concept quickly to test your ideas and gather feedback, as a powerful scripting language to support other aspects of game development, and as a simple yet powerful language for building games for any platform.

While Python would not be the ideal choice where game performance is critical, it’s an excellent tool for developing something quickly or if you don’t want to learn a more complex language and gaming engine. 

Akka License Change: The Impact of Akka’s Move Away From “Open Source”

Akka’s license change has surprised many of us, but it didn’t come out of nowhere. Lightbend recently announced that Akka will be transitioning from an “Open Source” license to a “Source available” license called BSL 1.1. Let’s unpack this to understand what it all means.

What is the difference between Source Available and Open Source?

Source Available is a relatively new term in software licensing. A source available license allows users to view and access the code, however they like, BUT they do not have the same freedoms to use, edit or repackage that code as they do in an open source license. 

So why has Lightbend changed the Akka license?

Lightbend has listed a lot of different reasons for why they felt it was time to shift to a source available model. The key points are:

  • Lightbend have become the major contributors to the Akka codebase. It is less of a community effort than it was.
  • Organizations have been using Akka without contributing back, and this is making it impossible to continue development at the desired pace.
  • They’re trying to make a more sustainable open source model, to continue Akka development for years to come.

And the Git commits back them up

When you look through the top names on the GitHub commits for the Akka repository, you see a mixture of people who have all spent significant time working for Akka. Viktor Klang, the greatest contributor by volume, spent ten years at the company but recently left, adding weight to Lightbend’s argument that they need to go ahead with the Akka SPPL license change.

So who is impacted by the Akka license change?

Lightbend have clearly thought about this, and they’ve exempted some groups from their license change to avoid the collateral damage we’ve seen from similar license changes in the past. 

2.6.20 is the first “source available” version. Version 2.6.19 is the last open source version of Akka. There will be no further bugs or improvements to these versions, and any subsequent updates will be applied to the source available versions of Akka. This means that if a new CVE is detected in a version before 2.6.20, you may be forced to migrate. (Edit: As of 09/09/2022, Lightbend have changed their position on security patches and will backport critical security updates until September 2023)

A license is needed for larger companies only

The license is only enforced if your company earns over $25 million in annual revenue. Revenue is something of a risky metric since many companies operate on razor-thin profit margins, but this indicates that Lightbend has no interest in going after the smaller companies that are leveraging Akka. 

The Play framework is exempt from licensing for now

Lightbend has ensured that users who are using the Play framework, and only the Play framework (i.e they’re not using Akka code aside from the Play framework) do not need to get a license and should not be worried about the Akka license change. However, if you use Akka directly as part of a Play service, you fall in scope for this change and will need to purchase a license from Lightbend. 

And there is a change date in place, to revert to open source

A version of Akka will remain under the BSL license for 3 years, but after those 3 years, it will revert to the Apache 2.0 license. This is a nice gesture, but no company is going to leverage 3-year-old dependencies in any meaningful way, so it’s difficult to see how this is going to have a material impact on the user experience, beyond perhaps making the code legally available for reuse in other projects. In short, this 3-year timeout doesn’t do much to limit the impact of the Akka license change. 

How much will this new license cost?

Lightbend are operating on a “per core” model, with their base license starting at $1995 per core (defined as a thread or vCPU). This could become potentially expensive for heavy users of Akka.

Lightbend has written a thorough FAQ to cover other questions you may have. Our advice, as is often the case in these situations, is to talk to a corporate lawyer and get an expert opinion on the Akka license change. 

How has the community responded?

Lightbend’s careful and considered approach to this change has paid off in many ways. There is far less outrage than we have seen in similar license changes, but that hasn’t stopped open source alternatives to Akka from gaining immediate traction. It will be interesting to see if companies are happy to migrate to another tool, or indeed work on a fork of the existing Akka codebase, in much the same way users moved to Opendistro after the Elastic license change. 

What does this mean for Open Source in general?

In early 2021, we saw Elastic change their licensing in a similar way to Akka now. From open source to source available. These are two giants of the software engineering world that became trusted and ubiquitous tools based on their open source community.

There is an ethical gray area here. The nature of open source software development isn’t easily compatible with traditional ideas of ownership. There are stewards and core contributors, but ownership is a little more unclear. It is precisely this community spirit, and absence of commercial interest, that has driven so many engineers to contribute their time and skillset to the growth of Akka. While Akka has been maintained heavily by Lightbend, 100 engineers have contributed to the core repository. 

One could argue that Lightbend are simply responding to the decisions of many large companies to use Akka without giving back to the community, and that if companies had contributed time, code, or money proportional to the benefit they got from Akka, that none of this would have been necessary. 

Time will tell, but one thing is certain. Open Source software is changing. Each time a ubiquitous tool abandons the dream of community ownership and usage without limits, that change is driven forward. Will these shifts, and the subsequent potential for legal exposure, be enough to push companies away from open source once and for all?

So what can we do about this shift in Open Source?

As Open Source Software looks increasingly more precarious, many customers are looking to SaaS providers to ensure that they are not going to be faced with a serious refactor in the future. Where once, Open source solutions were the best way to ensure that we had complete control of your system, with each passing year, we see that this is no longer the case.

If you’re interested in making the move to SaaS, Coralogix is a powerful Observability platform, with world first Streama technology, that allows us to process huge volumes of customer data at a fraction of the cost, while delivering some of the best production insights available on the market.

With features like Flow Alerts, DataMap, and our TCO Optimizer, we have everything an organization needs to scale with their data, and generate actionable insights that drive concrete reliability and data driven, strategic thinking.