wavefrontHQ / sample-traces-generator

Apache License 2.0
1 stars 5 forks source link

Warning

VMware has ended active development of this project. this repository will no longer be updated.

Sample Trace Generator

This trace generator tool sends synthetic spans to a Wavefront Proxy to create interesting app topologies for demonstrating Distributed Tracing. It enables thorough demos of tracing without using real apps or customer data, without laboriously creating each scenario.

Using the proxy’s customTracingListenerPorts , RED metrics and trace edges are computed automatically, so from the Wavefront system’s perspective these are real traces.

Features:

Configuration

All fields are optional - omitted fields are filled by the trace generator as a best-effort.

Data Format

A config file may contain entrypoints and applications at the top level.

Key Definition
entrypoints list of strings, dot-delimited app.service.operation starting points
applications map of name to application definition

Each application definition contains a map of services

Key Definition
services map of name to service definition

Each service definition contains a map of operations plus configuration for the service.

Key Definition
operations map of name to operation definition
tags map of string -> string tags to be added to every operation in the service
baseLatency in milliseconds, the minimum duration for calls in the service

An operation definition is the basic unit for creating traces - it represents a single call and corresponds to a span in the trace.

Key Definition
tags map of string -> string tags to be added to the generated span
calls list of operations to be called in parallel from this operation
errorChance percent likelihood of generating an error for this span
source string indicating the source of the span

Annotated Example Configuration

Also see exampleConfig.yaml for a more complete example.

entrypoints: # every request in this example starts as a simpleOrder
  - barista.order.simpleOrder

applications: # map of name to application definition
  barista:
    services:
      order:
        operations: # each operation is represented by a single span in the trace
          simpleOrder:
            tags: # freeform tags, included on the generated span
              _outboundExternalService: Redis # calling an external service
            calls: # the simpleOrder operation includes a dripCoffee and a muffin
              - service: brew # application defaults to the same, barista
                name: dripCoffee
              - application: bakery # calls may cross applications too
                service: order
                name: muffin
            errorChance: 0 # simpleOrder never fails
  bakery:
    services:
      order:
        operations:
          muffin:
            calls: [ { application: barista, service: fulfillment, name: delivery } ]
          scone:
            calls:
              - application: bakery
                service: oven # this service doesn't need to be defined elsewhere since it is simple
                name: warm
                calls: [ { application: barista, service: fulfillment, name: delivery } ]