Jaeger/OpenTelemetry
docker run --rm -d \ [9:41:06] -e COLLECTOR_ZIPKIN_HOST_PORT=:9411 \ -e COLLECTOR_OTLP_ENABLED=true \ -e SPAN_STORAGE_TYPE=badger \ -v jaeger-badger-volume:/go/bin/data \ -p 6831:6831/udp \ -p 6832:6832/udp \ -p 5778:5778 \ -p 16686:16686 \ -p 4317:4317 \ -p 4318:4318 \ -p 14250:14250 \ -p 14268:14268 \ -p 14269:14269 \ -p 9411:9411 \ jaegertracing/all-in-one:latest \ --badger.directory-value=/go/bin/data \ --badger.ephemeral=false
pip install opentelemetry-exporter-jaeger opentelemetry-instrumentation-flask opentelemetry-instrumentation-requests opentelemetry-instrumentation
opentelemetry-instrument --traces_exporter jaeger_thrift --exporter_jaeger_endpoint http://localhost:14268/api/traces --service_name ot_demo --metrics_exporter none flask --app app.py run
from opentelemetry.instrumentation.flask import FlaskInstrumentor
from flask import Flask
# Create a Flask app
app = Flask(__name__)
# Instrument the Flask application
FlaskInstrumentor().instrument_app(app)
@app.route("/")
def hello_world():
return "Hello, OpenTelemetry!"
Boomerang
https://github.com/akamai/boomerang
https://github.com/NovatecConsulting/boomerang-opentelemetry-plugin
<!doctype html>
<html lang="en">
<head>
<script src="/static/boomerang.js"></script>
<script src="/static/plugins/rt.js"></script>
<script src="/static/plugins/boomerang-opentelemetry.js"></script>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="/static/bootstrap.min.css">
<title>{% block title %} {% endblock %}</title>
</head>
<body>
<!-- any other plugins you want to include -->
<script>
BOOMR.init({
beacon_url: 'http://localhost:8080/beacon/',
OpenTelemetry: {
samplingRate: 1.0, // an optional sampling rate
corsUrls: ['http://localhost'],
consoleOnly: false, // an optional flag whether spans should only be printed to the console
collectorConfiguration: {
url: 'http://localhost:4318/v1/traces', // an optional url for an OpenTelemetry collector
headers: {}, // an optional object containing custom headers to be sent with each request
concurrencyLimit: 10, // an optional limit on pending requests
},
plugins_config: {
instrument_fetch: {
enabled: true,
clearTimingResources: false,
applyCustomAttributesOnSpan: null, //A method with the following structure: (span: Span, request: Request) => { }
ignoreUrls: [],
propagateTraceHeaderCorsUrls: [],
ignoreNetworkEvents: false
},
instrument_xhr: {
enabled: true,
applyCustomAttributesOnSpan: null, //A method with the following structure: (span: Span, xhr: XMLHttpRequest) => { }
propagateTraceHeaderCorsUrls: [],
ignoreUrls: [],
clearTimingResources: false,
},
instrument_document_load: {
enabled: true,
applyCustomAttributesOnSpan: {
documentLoad: null, //A method with the following structure: (span) => { }
documentFetch: null, //A method with the following structure: (span) => { }
resourceFetch: null, //A method with the following structure: (span, resource) => { }
},
recordTransaction: false, //If true, the transaction will be traced with the document load span as root span
exporterDelay: 20 // Delay to allow the exporter to export the transaction span before page unload
},
instrument_user_interaction: {
enabled: false,
eventNames: [],
shouldPreventSpanCreation: null //A method with the following structure: (eventType, element, span) => { }
},
},
// Use these options only for legacy configuration. Instead using plugins_config is recommended.
plugins: {
instrument_fetch: true,
instrument_xhr: true,
instrument_document_load: true,
instrument_user_interaction: true,
browser_detector: true
},
// Additional instrumentation config, which will be applied to all plugins
global_instrumentation: {
// Include request parameter to spans and the corresponding beacons
requestParameter: {
enabled: true,
excludeKeysFromBeacons: [] //Keys, which should not be included in beacons, for instance due to cardinality concerns
}
},
exporter: {
maxQueueSize: 200,
maxExportBatchSize: 100,
scheduledDelayMillis: 5000,
exportTimeoutMillis: 30000,
},
prototypeExporterPatch: true, // patches the OpenTelemetry collector-span-exporter in case the Prototype framework is used
commonAttributes: {
"application": "demo-app",
"stage": "prod"
},
serviceName: () => BOOMR.getVar("page_name") || "Shorty", // an optional service name for the spans
propagationHeader: "TRACE_CONTEXT",
}
});
</script>