jaeger_browser

Python HTTP server to record traces from the browser.


License
MIT
Install
pip install jaeger_browser==1.0.1

Documentation

jaeger-browser
PyPI npm

This repo is to help you submit Jaeger traces from your browser. It is a workaround until a browser client is implemented.

It contains a Python package that runs a REST API which submits traces locally.

It also contains a TypeScript library that connects to this REST API.

If you want to use this alongside your Jupyter server, check out jupyter-jaeger. There is an example in that repo of starting a span in a kernel server side and then continueing it on the clien side.

In turn, we use that to instrument plotting interactive Vega visualizations with a Python backend.

Limitations

  • Doesn't implement full Jaeger API just a subset I needed. PRs welcome.
  • Hard coded to connect to a local Jaeger server. PRs welcome.
  • No sampling implemented, it will collect all traces. PRs welcome.

Usage

First get the REST server installed and started:

# install jaeger-all-in-one
conda -c conda-forge install jaeger

# Install the REST server
pip install jaeger_browser

# Start jaeger all in one
jaeger-all-in-one
# Start the REST server
env PORT=8080 jaeger-browser

Then install the client side library and connect to it:

yarn add jaeger-browser
import {Client} from 'jaeger-browser';


const client = new Client(new URL('http://localhost:8080/'))



async function doThings(originalExtractedScan: object): Promise<object> {
    // Start a span based on some text-map encoded data
    const span = await client.startSpanExtract({
        name: 'new-span',
        reference: originalExtractedScan,
        relationship: 'child_of'
    });
    // create a new span under it
    const newSpan = await client.startSpan({
        name: 'other-span',
        reference: span,
        relationship: 'child_of'
    })

    // Finish this inner span
    await client.finishSpan(newSpan);

    // return the span we started text-map encoded
    return await client.injectSpan(span);
}