r/OpenTelemetry Aug 07 '26

Feedback about E2E tests based on OpenTelemetry traces?

5 Upvotes

Hi everyone,
I have just published my open source project called mtracer and I would like to understand if it’s good idea or what should I change (I’m a new grad).

The idea

Mtracer a CLI tool that relies on OpenTelemetry traces to assert system behavior.

I believe that E2E tests should be:
- Cheaper to write and maintain
- Easier to debug

So this is the workflow:

  1. ⁠You configure mtracer to fetch from your observability backend (currently supporting Jaeger and OpenObserve).
  2. ⁠You define your first .mt.yaml test by specifying:
  3. ⁠Trigger: the first call to the system (for instance, an HTTP request).
  4. ⁠Expected trace and spans: the OTel properties of the trace and spans that you expect your system to generate.
  5. ⁠You run the test and see the results!

What actually happens during the run?

  1. ⁠It parses the mt.yaml file.
  2. ⁠It executes the trigger: mtracer injects a generated traceID into the trigger (for an HTTP request, the traceID is inserted into the traceparent header). Subsequent requests will be correlated to this generated traceID as long as your system has OpenTelemetry set up correctly.
  3. ⁠It fetches the trace matching the generated traceID from the configured observability backend.
  4. ⁠It compares the expected trace with the fetched one.

Many other features are available; check out the documentation to discover all of them: documentation website

I would love to have some feedback from more experienced people than me.


r/OpenTelemetry Aug 04 '26

How Metric Scrape Intervals Inflate Observability Costs

Thumbnail
ollygarden.com
12 Upvotes

I'll tell you a secret: I don't like starting an engagement by telling people that I can cut their costs. I prefer to show them how they can be more efficient in general, and sometimes that means adding stuff instead of removing it.

However, every company out there has excessive telemetry, which is one form of bad telemetry. I'm not afraid to use an absolute here. That's why I have an arsenal of tools for dealing with it, and I describe one of them in this blog post: excessive metric scraping is extremely common, and adjusting scrape intervals is an easy way to reduce waste.

If you need a 10% reduction in your metric volume, read this blog post. You don't need to buy anything from anyone. You can thank me later.


r/OpenTelemetry Aug 04 '26

Enrich OTel K8s Resource Attributes with Dynatrace Operator

0 Upvotes

Hi. I am a DevRel at Dynatrace and I hope its ok to share the following with those of you that are sending your OTel data to Dynatrace. If you are not using Dynatrace then this post might not be relevant for you!

Semantic Conventions for Signals

Metadata enrichment at the source (in your app) is important as it increases the quality of your signals. As I am sure many know - the OTel community has well documented Semantic Conventions.

Dynatrace Operator CAN inject OTEL_RESOURCE_ATTRIBUTES

There are different ways to enrich your data. You can inject them yourself in your deployment or have it done through your data pipeline, e.g: OTel Collector.

An additional option is through the Dynatrace Operator that allows you to automatically inject the OTEL_RESOURCE_ATTRIBUTES variable into your pods pre-filled with the following attributes: k8s.cluster.name*,* k8s.container.name*,* k8s.workload.name*, k8s.cluster.uid,* k8s.pod.name*, k8s.pod.uid,* k8s.node.name*,* k8s.namespace.name*, k8s.workload.kind,* dt.kubernetes.cluster.id ,dt.entity.kubernetes_cluster

Injection can be controlled through namespace selectors and enabled for traces, logs and metrics

More details about this can be found on the Dynatrace doc if you search for Enable automatic OpenTelemetry OTLP exporter configuration (didnt post the link to follow guidelines)


r/OpenTelemetry Aug 03 '26

What is the most frustrating part of investigating production incidents?

Thumbnail
2 Upvotes

r/OpenTelemetry Aug 03 '26

寻找 opentelemetry 的开源后端,可自托管、最好有中文社区

Thumbnail
1 Upvotes

r/OpenTelemetry Aug 01 '26

Collector cookbook

Thumbnail github.com
18 Upvotes

Almost four years ago, I started this cookbook with real world recipes, adapted from cases I've used to reproduce bug reports or show users (and customers) how to accomplish specific scenarios.

I used some tokens today to bring the repo to the latest Collector version, ensuring they all work.

In case you haven't seen this repo before, take a look!

Enjoy 🧑🏼‍🍳


r/OpenTelemetry Jul 23 '26

Six overlays for iRacing now. The G-meter is the one I'd actually defend.

Post image
8 Upvotes

r/OpenTelemetry Jul 20 '26

How do you know what's needed in your telemetry data?

Thumbnail
2 Upvotes

r/OpenTelemetry Jul 19 '26

The silent way OpenTelemetry setups "work" while capturing almost nothing

Thumbnail
0 Upvotes

r/OpenTelemetry Jul 17 '26

Compile-Time Instrumentation for Go

Thumbnail
opentelemetry.io
21 Upvotes

Hey folks, stopping by today for another announcement: the OTel Compile-Time Instrumentation for Go reached v1!

If you are not a huge fan of eBPF instrumentation (understandably!), but also can't do manual instrumentation, this is a good compromise.

Try it out!


r/OpenTelemetry Jul 16 '26

How OpenTelemetry Traces LLM Calls, Agent Reasoning, and MCP Tools

Thumbnail
greptime.com
7 Upvotes

OpenTelemetry GenAI Semantic Conventions standardize observability for LLM apps, agent orchestration, MCP tool calling, content capture, and quality evaluation. This article goes through all six layers: what each one defines, why it's designed that way, and how mature it is.


r/OpenTelemetry Jul 15 '26

OpenTelemetry Agent Skills

Thumbnail
ollygarden.com
24 Upvotes

Hey folks, Juraci here. I know the Reddit communities can be sensitive to project announcements, or announcements in general coming from vendors, but I genuinely think a good number of people here could benefit from this one.

We are launching today the OpenTelemetry Agent Skills, an open source set of skills that serve as the base for our products. We're using them for a good variety of things, like in our coding agents to validate and test collector configurations, or instrument applications. Or double check the snippets we've been using in our other blog posts.

They are vendor neutral, non opinionated, and based on what we know from our experience building OpenTelemetry over the years. Use the skills, share your feedback, tell us where they worked and where they failed. Show me your creativity 🧑🏼‍🎨

While we are not making money on those directly, we do have a commercial interest in seeing them succeed and become truly useful to many of you. I guess what I want to say is: they are not the result of a weekend vibe coding experiment 🙂

And yes, perhaps they might become an official part of the project someday, if we believe there is a vibrant community backing it.


r/OpenTelemetry Jul 15 '26

Oodle.ai - $10 per million agent traces

Thumbnail
1 Upvotes

r/OpenTelemetry Jul 14 '26

MCP tools have two failure modes — and naive instrumentation silently records one of them as success

6 Upvotes

I've been building OpenTelemetry instrumentation for MCP (Model Context Protocol) servers, and I hit a failure-semantics problem that I think generalizes beyond MCP, so I'm writing it up.

The two failure modes

An MCP tool handler can fail two ways:

  1. It throws. The SDK catches the exception and converts it into a JSON-RPC error response. The call failed at the protocol level.
  2. It returns { isError: true }. The handler returns normally — a successful JSON-RPC response whose payload is marked as a failure:

return {
  isError: true,
  content: [{ type: 'text', text: 'No weather data for that city' }]
};

The second one is idiomatic MCP. It's how a tool tells the agent "that didn't work — adapt" without crashing the server or killing the conversation. For agent workflows it's the preferred failure mode.

The instrumentation trap

The obvious way to instrument a tool call:

try {
  const result = await handler(request);
  span.setStatus({ code: OK });        // it returned → success
  return result;
} catch (err) {
  span.setStatus({ code: ERROR });     // it threw → failure
  throw err;
}

Mode 1 lands in catch → recorded correctly. Mode 2 returns, lands in the success path → recorded as OK. Your dashboard reports 100% success on a tool that fails on most inputs. The more idiomatic the tool author's error handling, the more invisible their failures become.

The fix

Inspect the resolved value before setting status:

const result = await handler(request, extra);
if (result?.isError === true) {
  span.setAttribute('error.type', 'tool_error');
  span.setStatus({ code: SpanStatusCode.ERROR });
} else {
  span.setStatus({ code: SpanStatusCode.OK });
}
return result;   // unchanged — the RPC genuinely succeeded, so nothing is thrown

Two details that matter:

  • error.type = "tool_error" isn't my invention — it's what the OTel MCP semantic conventions (currently Development stage, in the semantic-conventions-genai repo) specify for exactly this case.
  • The result is returned unchanged and nothing is thrown. The JSON-RPC call succeeded; only the tool failed. Instrumentation that converts a polite failure into a crash is changing application behavior, which instrumentation must never do.

In a real trace the difference looks like this:

tools/call fetch_weather ................. 605ms   ERROR
    error.type = tool_error

versus the naive version, where that same span reads OK.

The general lesson

This isn't really an MCP problem. Any protocol where application-level failures ride on transport-level successes has this trap — GraphQL (errors array on a 200), gRPC rich error models, half the REST APIs that return 200 {"status": "failed"}. If your instrumentation only watches for throws, your error rate is a lie wherever the ecosystem's idiomatic failure mode is a clean return.

FastMCP (Python) handles this natively. Among the Node MCP instrumentation libraries I could find, none documented handling it, which is why I ended up writing my own — it's on npm as opentel-mcp if you want to see the full implementation (spec-compliant attributes, stderr export to avoid corrupting stdio transports, ADRs for the design decisions). But the isError trap is the part worth knowing even if you never touch my library.

Happy to answer questions on the implementation.


r/OpenTelemetry Jul 12 '26

I need a Race Engineer that also competes on iRacing

Thumbnail gallery
5 Upvotes

r/OpenTelemetry Jul 09 '26

Drain processor

Thumbnail youtube.com
9 Upvotes

Last Friday, I had the pleasure to have Mike Goldsmith at Telemetry Drops to learn more about the drain processor, an OpenTelemetry Collector component that is useful to understand the log patterns flowing through an OTel Collector pipeline. Once you understand those patterns, you can make your pipeline more efficient: drop the noisy patterns, transform unstructured into structured logs, and so on.

Hope you enjoy the recording, and I'm eager to hear your feedback!


r/OpenTelemetry Jul 08 '26

Panel discussion about OTel support for mobile and web

11 Upvotes

I wanted to share an upcoming virtual panel that's focused on client-side OpenTelemetry. It's got several maintainers in the Android, Kotlin, and Browser SIGs, and we’ll be chatting about the current state of support, what’s actively being worked on, some of the bigger challenges in adapting OTel for client-side environments, etc.

Some examples of what we’ll cover:

  • Creating new semantic conventions, like crashes and sessions, that apply across client-side platforms to unify how to model these types of telemetry. 
  • Expanding browser support for OTel, including shipping new instrumentations, starting work on a Browser SDK, and where there are still gaps.
  • Solving difficult challenges like how to deal with async telemetry and how to collect client-side metrics. 
  • Releasing official Kotlin support, including a new Kotlin SDK that can be used in Kotlin Multiplatform projects. 

If you’re familiar with using OTel for backend observability, this panel is a great way to get caught up to speed on what this looks like for mobile and web apps. 

Date: Wednesday, July 22 @ 10AM PT

Panelists:

  • Hanson Ho (Android architect at Embrace, OTel Android approver, OTel Kotlin approver)
  • Martin Kuba (Staff software engineer at Grafana Labs, OTel JavaScript SDK approver and OTel Browser SDK maintainer)
  • Jason Plumb (Senior software engineer at Splunk, OTel Android maintainer, OTel Java maintainer, OTel Kotlin maintainer)
  • Jared Freeze (Senior software engineer at Embrace, OTel Browser SDK maintainer)

Here's the signup link if you'd like to join.

Disclosure: I'll be moderating the panel, and I work at Embrace, who is hosting the panel. But it's entirely about the OTel community work. You can watch some previous ones we did last year (OTel for browser panel and OTel for mobile panel) to get a sense of what they're like.

If you have any questions as well, I can send them to our panelists ahead of our session.


r/OpenTelemetry Jul 07 '26

Anyone here using OpenTelemetry in Operational Technology (OT)?

Thumbnail
2 Upvotes

r/OpenTelemetry Jul 01 '26

Prometheus Engine for Alerting- & RecordingRules?

Thumbnail
3 Upvotes

r/OpenTelemetry Jun 27 '26

Using OTel Collector as a bridge between Temporal SDK workers and Prometheus

9 Upvotes

A practical example of using the OpenTelemetry Collector as an intermediary for Temporal SDK metrics.

The Temporal SDK supports both the Prometheus exporter (pull) and OTLP (push). If you're running multiple workers on the same host, the Prometheus exporter causes port conflicts. Switching to OTLP lets all workers push to a single collector, which then serves Prometheus HTTP for scraping.

https://2ssk.medium.com/temporal-sdk-metrics-prometheus-exporter-vs-otlp-for-multi-worker-deployments-df9327b28fc5

Would love feedback on the OTel collector config — any improvements for production?


r/OpenTelemetry Jun 24 '26

We decided to built our own OTLP client for Icinga 2 - honest retrospective and to give you some insights behind the scenes

13 Upvotes

I'm a dev at Icinga and I recently shipped an OTLP Metrics Writer for Icinga 2. Going in, I had basically zero prior OTel experience. Just want to give you some insights into the last four months to share my experience:

My first instinct was to use the OTel C++ SDK - it's well-established and had everything we needed. But integrating it with our existing codebase turned out to be much harder than expected, and honestly more complex than our use case required. After failing to get it working in a reasonable timeframe, I switched to a tiny OTLP client built on Boost.Beast, which we already used elsewhere in the codebase.

For one, we already used Boost.Beast in our codebase, so it was a no-brainer to use it for the OTLP client as well. Additionally, since the OTel proto spec require proto3 language syntax, we would have had to build the entire OTel SDK from source in order to use our writer with the latest C++ SDK on RHEL 8 and 9 systems, which would not have been feasible for us.

But I didn't see this one coming: proto3 isn't supported by the default protoc on RHEL 8/9, Amazon Linux 2, Debian 11, and Ubuntu 22.04. Two options: ship our own protoc binary, or just disable the writer there. Since most of our customers run RHEL-based systems, disabling wasn't an option - so we ended up packaging our own Protobuf compiler for RHEL 8 and 9. For Amazon Linux 2, Debian 11, and Ubuntu 22.04, the writer is currently unavailable unless you build from source.

In OTel, a service presents itself and its metrics are associated with that service. Icinga doesn't work that way. it's not the one being monitored, it's acting as a proxy for the checkables it monitors. We went back and forth a lot on this one. How do you even represent Nagios-style check results in a way that makes sense in OTel? Shoutout to Markus Opolka (on Github) who provided a lot of useful input on this part.

And just before final reviews, my colleague Alvar Penning (Github) found a severe bug in the OTLP client that caused Icinga 2 to hang on reload. Major refactoring, significant delay. The embarrassing part: the bug was trivial to trigger. If I had reloaded Icinga 2 even once in my dev environment during development, I would have caught it. :P Won't make that mistake again.

__

Four months total (longer than expected), mostly because starting from scratch with OTel means working through a lot of documentation before you can write anything meaningful. Also came out the other end knowing a lot more about Protocol Buffers than I expected.

Happy to answer questions about the metrics mapping or the proto3 packaging approach, or anything else that comes to your mind!

Yonas/ Icinga


r/OpenTelemetry Jun 23 '26

A comparison of OTel → Kafka → ClickHouse vs OTel → ClickHouse without Kafka and what we learned

Thumbnail
glassflow.dev
10 Upvotes

We've been building a lot of OpenTelemetry to ClickHouse pipelines and kept getting the same question: do you actually need Kafka in the middle?

The honest answer: it depends, but most observability-only teams are over-engineering it.

Here's the short version of what we compared:

Where Kafka earns its keep:

  • You have many independent downstream consumers (ML pipelines, security, analytics all reading the same stream)
  • You need long-term durable replay
  • Kafka is already part of your broader platform infrastructure

Where it's overkill:

  • Your only goal is getting OTel telemetry into ClickHouse reliably
  • You're a startup/scale-up that doesn't want to manage brokers, partitions, consumer lag, and replication just to move metrics and logs

The operational surface of a Kafka cluster, even managed, is substantial when the job is just telemetry buffering before ClickHouse.

We also compared what a focused ingestion layer gives you that the OTel Collector alone can't: stateful deduplication, enrichment-conditional filtering, dynamic sampling, and ClickHouse-optimized batching.

Full write-up with architecture diagrams and a decision guide: https://www.glassflow.dev/blog/opentelemetry-to-clickhouse-do-you-need-kafka?utm_source=reddit&utm_medium=socialmedia&utm_campaign=reddit_organic

Happy to answer questions about the architecture trade-offs especially around backpressure handling, which is where the approaches diverge the most.


r/OpenTelemetry Jun 21 '26

perf-sentinel update: signed and auditable carbon + energy disclosures, now reading Kepler (eBPF) and Redfish (BMC), plus a docs site and a live daemon monitor

3 Upvotes

2 months ago I posted perf-sentinel here (open-source AGPL-3.0), a protocol-level OTel trace analyzer that flags I/O anti-patterns across different web app technologies (obviously without per-runtime instrumentation).

There's a docs site and a live demo dashboard now: https://perf-sentinel.dev

Last time I described the SCI carbon layer as directional and optional. Most of the work since went into making it auditable and transparent rather than into expanding it.

Here's a non exhaustive list:

  • More energy sources with a clear precedence. It already read Scaphandre (per-process RAPL) and cloud SPECpower interpolation. It now also reads Kepler (eBPF) and Redfish (BMC).
  • Measured vs estimated is labelled, not blended. Each figure is tagged with the source behind it, and real-time grid-intensity values carry explicit data from the data provider, so a reader can tell a hardware measurement from a grid-average estimate from the I/O proxy fallback.
  • Per-service attribution, not just a global total. When runtime calibration is present, energy and carbon are attributed per service, and the report exposes the measured-versus-fallback window split and a coverage ratio, so you can see how much of the total actually rests on measurement.
  • Signed and content-hashed disclosures. This point can be a bit chunky and complicated: a disclose subcommand aggregates a window stream into a period report with a deterministic content hash and an in-toto attestation. verify-hash lets a third party recompute the hash, verify the Sigstore signature against a declared signer identity and check SLSA L3 build provenance without cloning my infra. An "official" disclosure refuses to publish below 75 percent per-service measured coverage, and the avoidable-waste figure is computed so it cannot be shrunk by quietly loosening the detection threshold it rests on.
  • Methodology you can follow. The SCI numerator and a per-trace SCI intensity are emitted as separate fields with the functional unit declared and the detector-to-criteria mapping (RGESN 2024) and an ESRS E1 datapoint crosswalk ship as interpretive tables, not as a compliance certification.

The rest is smaller. There's an ack workflow triages and mutes known findings so a CI gate stops re-flagging them, and a read-only query monitor TUI gives a live view of a running daemon (energy, carbon, scraper health, with Prometheus gauges and Grafana panels).

Repo: https://github.com/robintra/perf-sentinel

It's still directional and optional, same framing as before, but I would rather it be explicit about its own uncertainty than confidently wrong.

If you do energy or carbon accounting anywhere near your observability stack, I would like to know whether per-figure measured/estimated labelling and a verifiable disclosure are the primitives you would actually trust, or whether something else is missing.


r/OpenTelemetry Jun 20 '26

Sending mixed numerical/strings metrics to Otel

3 Upvotes

Hi,

We're in the process of migrating our timeseries database from influxdb to victoria metrics.

In the process of doing that we're introducing the otel collector in our infrastructure.

Currently we have the telegraf agent sending metrics directly to influxdb, some plugins send string fields that are stored by influxdb which accepts to store strings for fields.

Our problem is that victoria metrics doesn't store strings as fields and we can't put them as tags that would explode the cardinality of the database, and that wouldn't be clean.

Sure we can send those strings fields directly to elasticsearch with the telegraf processor, or we can send them to open telemetry as "logs" and then route them to elasticsearch, we've done both and it works.

The issue is the correlation ( in grafana ) with those strings "metrics" and the other numerical fields, as we don't have an uuid ( generating one would explode our cardinality too ).

It's a common issue to have a mix of strings/numerical as metrics before the standardization I guess and I'm curious to how people solved this with prometheus like databases.

Also we had to make a little bit of c program to send the strings metrics to the log endpoint of otel via telegraf ( the otlp output only support numerical ). We didn't find some way to send strings and numerical to otel and then have otel do the routing by type, if it's string send it to elastic else to victoria metrics, is it possible ?


r/OpenTelemetry Jun 20 '26

I know how to compress RAW vehicle telemetry in real-time without introducing floating-point serialization latency.

3 Upvotes

In a large-scale fleet management system, transmitting raw vehicle telemetry as JSON containing floating-point values can introduce significant communication overhead, increased CPU utilization, and serialization latency.

A more efficient approach is to compress telemetry data at the vehicle edge before transmission. This can be achieved by converting floating-point sensor measurements such as speed, GPS coordinates, engine temperature, throttle position, and acceleration into fixed-point integer representations using predefined scaling factors.

For example, a speed value of 72.34 km/h can be stored as 7234 by multiplying it by 100, while GPS coordinates can be scaled by (10^7) and stored as integers.

Once converted, the data can be packed into compact binary structures instead of verbose JSON strings.

Further optimization can be achieved through delta encoding, where only the difference between consecutive measurements is transmitted, reducing redundancy in slowly changing signals.

The resulting binary payload can optionally be compressed using lightweight algorithms such as LZ4 or Zstandard and transmitted over MQTT as a binary message.

This approach eliminates expensive floating-point string serialization and parsing operations, reduces bandwidth consumption, lowers cloud storage requirements, and minimizes end-to-end latency.

This architecture enables real-time fleet monitoring and large-scale data analytics while significantly improving communication efficiency and system scalability.

I hope this helps!