distributed-tracing

Implement distributed tracing with Jaeger and Tempo across microservices using OpenTelemetry instrumentation.

5|Updated Dec 8, 2025
One-click install
npx skills add https://github.com/portalshq/portals-studio --skill distributed-tracing-portalshq
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: distributed-tracing
Source: https://github.com/portalshq/portals-studio/tree/main/.cursor/skills/distributed-tracing
Command: npx skills add https://github.com/portalshq/portals-studio --skill distributed-tracing-portalshq

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes references (resource) and assets (resource) components.

What problem does it solve? Debugging latency and failures across microservices is difficult without visibility into how requests flow between services. This Skill provides guidance for implementing distributed tracing so you can track requests end-to-end, identify bottlenecks, and trace error propagation. ## Core Features & Use Cases - Jaeger and Tempo Deployment: Set up tracing backends on Kubernetes or Docker Compose with production storage options like Elasticsearch and S3. - OpenTelemetry Instrumentation: Instrument Python (Flask), Node.js (Express), and Go applications with spans, attributes, and context propagation via HTTP headers. - Sampling and Analysis: Configure probabilistic, rate-limiting, and adaptive sampling, then query traces to find slow requests and errors. - Use Case: When a user reports slow API responses, trace the request through the gateway, auth service, and database spans to pinpoint that the database query consumes 40ms of the 100ms total latency. ## Quick Start Instrument my Flask application with OpenTelemetry and export traces to a Jaeger collector running in Docker Compose.

Frequently Asked Questions about distributed-tracing

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I set up distributed tracing with Jaeger?

Deploy Jaeger using the Kubernetes Operator with Elasticsearch storage, or run the all-in-one Docker image exposing ports 16686 for the UI and 14268 for the collector. Then instrument your services with OpenTelemetry exporters pointing at the collector endpoint.

How to instrument a Flask app with OpenTelemetry?

Create a TracerProvider with a service name resource, add a BatchSpanProcessor with a JaegerExporter, and call FlaskInstrumentor().instrument_app(app). Use tracer.start_as_current_span to create custom spans with attributes around business logic and database calls.

Jaeger vs Tempo for distributed tracing?

Jaeger provides a dedicated UI with service dependency graphs and supports Elasticsearch storage. Tempo integrates with Grafana and uses object storage like S3, accepting Jaeger, Zipkin, and OTLP protocols, making it cost-effective for high trace volumes.

Why are no traces appearing in Jaeger?

Check the collector endpoint configuration, verify network connectivity between the application and Jaeger agent, review sampling configuration since low rates drop most traces, and inspect application logs for exporter errors.

What sampling rate should I use in production?

Sample 1-10% of traces in production to keep tracing overhead under 1% CPU impact. Use probabilistic sampling with a param like 0.01, rate-limiting sampling for a fixed traces-per-second cap, or parent-based sampling for deterministic decisions.