Infinite Tracing

In an internal presentation Erika Arnold reminded the audience how this new product solved customer problems with fresh systems architecture. post

A transaction is traced through a network of microservices by assembling the sequence of spans crossed between services. In order to sample, the first service, the head, can mark all subsequent spans as interesting. In tail-based sampling all spans are potentially interesting and only when the tail is encountered is the trace judged important.

We drew a block diagram showing hypothetical customer services, monitoring agents, and the services to which they would report. script

We wrote d3 code to animate fabricated transactions reporting spans selecting traces either on the first hop or the last. script

No slouch at visualization herself, I encouraged Erika to assemble several elements of our work already in place with the hope of attracting some of her expertise to our projects. We share these files with her permission.

pages/diagrams-as-base-model/data/infinite-tracing

The script includes a simulator that advances computations for spans in flight.

{
  trace: integer,  // passed to each span
  span: integer,   // new with each hop
  done: date,      // time to evaporate
  want: boolean,   // trace to be recorded
  error: boolean,  // span is interesting
  route: [.        // paths to be followed
    {
      fm: string,  // starting location
      to: string.  // destination location
    },
    ...
  ]
}

See progress toward Table-Top Augmented Reality