Skip to content

Conversation

carlhoerberg
Copy link
Member

Summary

  • Implements comprehensive Datadog APM tracing for AMQProxy
  • Adds abstract tracer architecture with clean separation of concerns
  • Provides multiple configuration methods (CLI, env vars, config file)

Features

  • Abstract Tracer Design: Clean abstraction with NilTracer (no-op) and DatadogTracer implementations
  • Comprehensive Instrumentation: Traces server operations, client connections, and AMQP message publishing
  • Flexible Configuration: Support for CLI flags, environment variables, and INI config file
  • Structured Tracing: Uses namedtuples for type-safe trace tags and span data
  • Asynchronous: Non-blocking trace transmission to Datadog agent via HTTP
  • Production Ready: Includes error handling, timeouts, and example configuration

Configuration Options

CLI Flags

  • --datadog-enabled: Enable tracing
  • --datadog-service=SERVICE: Service name (default: amqproxy)
  • --datadog-env=ENV: Environment (default: production)
  • --datadog-agent-host=HOST: Agent host (default: localhost)
  • --datadog-agent-port=PORT: Agent port (default: 8126)

Environment Variables

  • DD_TRACE_ENABLED: Enable/disable tracing
  • DD_SERVICE: Service name
  • DD_ENV: Environment
  • DD_AGENT_HOST: Agent hostname
  • DD_TRACE_AGENT_PORT: Agent port

Config File

See config/datadog_example.ini for example configuration.

Test plan

  • Build and start AMQProxy with Datadog enabled
  • Verify traces appear in Datadog APM
  • Test with various configuration methods
  • Confirm no performance impact when disabled

🤖 Generated with Claude Code

@carlhoerberg carlhoerberg requested a review from a team as a code owner June 10, 2025 19:56
@carlhoerberg
Copy link
Member Author

@VinceTheIconic you can try it out with docker pull cloudamqp/amqproxy:pr-214

- Implement abstract Tracer class with NilTracer and DatadogTracer
- Add configuration support via CLI flags, environment variables, and config file
- Instrument server operations, client connections, and AMQP message publishing
- Use namedtuples for structured trace tags and span data
- Send traces asynchronously via HTTP to Datadog agent
- Include example configuration file

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <[email protected]>
@carlhoerberg
Copy link
Member Author

Currently only publishes to the upstream are traced, what other operations should be traced? Connecting to an upstream? Client negotiation? Consumed messages? All frame operations?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants