# Tracing

The tracing system allows developers to visualize call flows in their infrastructure.

We use [OpenTracing](http://opentracing.io). It is an open standard designed for distributed tracing.

Traefik supports three tracing backends: Jaeger, Zipkin and DataDog.

## Jaeger

```toml
# Tracing definition
[tracing]
  # Backend name used to send tracing data
  #
  # Default: "jaeger"
  #
  backend = "jaeger"

  # Service name used in Jaeger backend
  #
  # Default: "traefik"
  #
  serviceName = "traefik"
    
  # Span name limit allows for name truncation in case of very long Frontend/Backend names
  # This can prevent certain tracing providers to drop traces that exceed their length limits
  #
  # Default: 0 - no truncation will occur
  # 
  spanNameLimit = 0

  [tracing.jaeger]
    # Sampling Server URL is the address of jaeger-agent's HTTP sampling server
    #
    # Default: "http://localhost:5778/sampling"
    #
    samplingServerURL = "http://localhost:5778/sampling"

    # Sampling Type specifies the type of the sampler: const, probabilistic, rateLimiting
    #
    # Default: "const"
    #
    samplingType = "const"

    # Sampling Param is a value passed to the sampler.
    # Valid values for Param field are:
    #   - for "const" sampler, 0 or 1 for always false/true respectively
    #   - for "probabilistic" sampler, a probability between 0 and 1
    #   - for "rateLimiting" sampler, the number of spans per second
    #
    # Default: 1.0
    #
    samplingParam = 1.0

    # Local Agent Host Port instructs reporter to send spans to jaeger-agent at this address
    #
    # Default: "127.0.0.1:6831"
    #
    localAgentHostPort = "127.0.0.1:6831"
   
    # Generate 128-bit trace IDs, compatible with OpenCensus
    #
    # Default: false
    gen128Bit = true
   
    # Set the propagation header type. This can be either:
    #   - "jaeger", jaeger's default trace header.
    #   - "b3", compatible with OpenZipkin
    #
    # Default: "jaeger"
    propagation = "jaeger"
```

!!! warning
    Traefik is only able to send data over compact thrift protocol to the [Jaeger agent](https://www.jaegertracing.io/docs/deployment/#agent).

## Zipkin

```toml
# Tracing definition
[tracing]
  # Backend name used to send tracing data
  #
  # Default: "jaeger"
  #
  backend = "zipkin"

  # Service name used in Zipkin backend
  #
  # Default: "traefik"
  #
  serviceName = "traefik"
    
  # Span name limit allows for name truncation in case of very long Frontend/Backend names
  # This can prevent certain tracing providers to drop traces that exceed their length limits
  #
  # Default: 0 - no truncation will occur
  # 
  spanNameLimit = 150

  [tracing.zipkin]
    # Zipkin HTTP endpoint used to send data
    #
    # Default: "http://localhost:9411/api/v1/spans"
    #
    httpEndpoint = "http://localhost:9411/api/v1/spans"

    # Enable Zipkin debug
    #
    # Default: false
    #
    debug = false

    # Use Zipkin SameSpan RPC style traces
    #
    # Default: false
    #
    sameSpan = false

    # Use Zipkin 128 bit root span IDs
    #
    # Default: true
    #
    id128Bit = true

    # The rate between 0.0 and 1.0 of requests to trace.
    #
    # Default: 1.0
    #
    sampleRate = 0.2
```

## DataDog

```toml
# Tracing definition
[tracing]
  # Backend name used to send tracing data
  #
  # Default: "jaeger"
  #
  backend = "datadog"

  # Service name used in DataDog backend
  #
  # Default: "traefik"
  #
  serviceName = "traefik"
  
  # Span name limit allows for name truncation in case of very long Frontend/Backend names
  # This can prevent certain tracing providers to drop traces that exceed their length limits
  #
  # Default: 0 - no truncation will occur
  # 
  spanNameLimit = 100

  [tracing.datadog]
    # Local Agent Host Port instructs reporter to send spans to datadog-tracing-agent at this address
    #
    # Default: "127.0.0.1:8126"
    #
    localAgentHostPort = "127.0.0.1:8126"

    # Enable DataDog debug
    #
    # Default: false
    #
    debug = false

    # Apply shared tag in a form of Key:Value to all the traces
    #
    # Default: ""
    #
    globalTag = ""

    # Enable priority sampling. When using distributed tracing, this option must be enabled in order
    # to get all the parts of a distributed trace sampled.
    #
    # Default: false
    #
    prioritySampling = false
```
