From 1ed2eb22da7ad5c9cff329b764512e139aaca7e1 Mon Sep 17 00:00:00 2001 From: Jay Modi Date: Sat, 3 Apr 2021 12:54:19 +0530 Subject: [PATCH] Integrate Exporter: Jaeger - Add jaeger docker container running guideline - Add one more span to understand request-response trace --- README.md | 6 +++++- app.py | 31 ++++++++++++++++++++++++------- requirements.txt | 3 +++ 3 files changed, 32 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index f853f97..bbb245e 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,11 @@ Create Python Virtual environment and run projec locally. ## Jaeger setup guidelines -*ToDo +Run Jaeger container locally to collect tracing data from Flask application + +```bash +docker run -p 16686:16686 -p 6831:6831/udp jaegertracing/all-in-one +``` ## Features diff --git a/app.py b/app.py index 92b347b..8f0f482 100644 --- a/app.py +++ b/app.py @@ -4,24 +4,39 @@ import requests from flask import Flask -from flask_restful import Resource, Api +from flask_restful import Resource as REST_Resource, Api from dotenv import load_dotenv from opentelemetry import trace -from opentelemetry.instrumentation.flask import FlaskInstrumentor -from opentelemetry.instrumentation.requests import RequestsInstrumentor +from opentelemetry.exporter.jaeger.thrift import JaegerExporter +from opentelemetry.sdk.resources import SERVICE_NAME, Resource from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import ( ConsoleSpanExporter, SimpleSpanProcessor, + BatchSpanProcessor ) +from opentelemetry.instrumentation.flask import FlaskInstrumentor +from opentelemetry.instrumentation.requests import RequestsInstrumentor load_dotenv() # take environment variables from .env # set trace provider as default one -trace.set_tracer_provider(TracerProvider()) +trace.set_tracer_provider( + TracerProvider( + resource=Resource.create({SERVICE_NAME: "my-helloworld-service"}) + ) +) + +# jaeger exporter +jaeger_exporter = JaegerExporter( + agent_host_name="localhost", + agent_port=6831, +) + +# add exporter to trace trace.get_tracer_provider().add_span_processor( - SimpleSpanProcessor(ConsoleSpanExporter()) + BatchSpanProcessor(jaeger_exporter) ) app = Flask(__name__) @@ -31,12 +46,14 @@ RequestsInstrumentor().instrument() -class HelloWorld(Resource): +class HelloWorld(REST_Resource): def get(self): tracer = trace.get_tracer(__name__) with tracer.start_as_current_span("example-request"): requests.get("http://www.example.com") - print("Hello World") + with tracer.start_as_current_span("get-oranges"): + data = 100*100 + print("Hello World", data) return {'hello': 'world'} api.add_resource(HelloWorld, '/') diff --git a/requirements.txt b/requirements.txt index ffd1079..131a95d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -11,3 +11,6 @@ opentelemetry-api==1.0.0 opentelemetry-sdk==1.0.0 opentelemetry-instrumentation-flask==0.19b0 opentelemetry-instrumentation-requests==0.19b0 + +# opentelemetry exporter +opentelemetry-exporter-jaeger==1.0.0