Created
July 5, 2021 09:18
-
-
Save RobertRosca/c7a282ce7746c0d06a659e0c235c371d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import flask | |
import requests | |
from opentelemetry import trace | |
from opentelemetry.instrumentation.flask import FlaskInstrumentor | |
from opentelemetry.exporter.jaeger.thrift import JaegerExporter | |
from opentelemetry.instrumentation.requests import RequestsInstrumentor | |
from opentelemetry.sdk.trace.export import BatchSpanProcessor | |
from opentelemetry.sdk.resources import SERVICE_NAME, Resource | |
from opentelemetry.sdk.trace import TracerProvider | |
from opentelemetry.sdk.trace.export import ( | |
ConsoleSpanExporter, | |
SimpleSpanProcessor, | |
) | |
trace.set_tracer_provider( | |
TracerProvider( | |
resource=Resource.create({SERVICE_NAME: "flask-example"}) | |
) | |
) | |
jaeger_exporter = JaegerExporter( | |
agent_host_name="localhost", | |
agent_port=6831, | |
) | |
trace.get_tracer_provider().add_span_processor( | |
BatchSpanProcessor(jaeger_exporter) | |
) | |
app = flask.Flask(__name__) | |
FlaskInstrumentor().instrument_app(app) | |
RequestsInstrumentor().instrument() | |
@app.route("/") | |
def hello(): | |
tracer = trace.get_tracer(__name__) | |
with tracer.start_as_current_span("example-request"): | |
requests.get("http://www.example.com") | |
return "hello" | |
app.run(debug=True, port=5000) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"id": "26b2906b-d223-42dd-bd86-2e66f6299ee9", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import random\n", | |
"import platform\n", | |
"import time" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"id": "db8cd46c-19e3-41b6-91b3-bbbf46825bbb", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"from opentelemetry import trace\n", | |
"from opentelemetry.trace import SpanKind\n", | |
"from opentelemetry.sdk.trace import TracerProvider\n", | |
"from opentelemetry.exporter.jaeger.thrift import JaegerExporter\n", | |
"from opentelemetry.sdk.trace.export import BatchSpanProcessor\n", | |
"from opentelemetry.sdk.trace.export import (\n", | |
" ConsoleSpanExporter,\n", | |
" SimpleSpanProcessor,\n", | |
")\n", | |
"from opentelemetry.sdk.resources import Resource\n", | |
"from opentelemetry import baggage\n", | |
"from opentelemetry.trace import set_span_in_context" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"id": "b2c6ff32-aa79-419c-bf6d-edb478e701bb", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"tracer = trace.get_tracer(__name__)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"id": "15d5a6f2-610f-46b2-8cf0-ee786b4e538c", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"class OpentelemetryExtension:\n", | |
" def __init__(self, ip):\n", | |
" self.shell = ip\n", | |
" self.tracer = trace.get_tracer(__name__)\n", | |
"\n", | |
" self.provider = TracerProvider(\n", | |
" resource=Resource.create({\n", | |
" \"service.name\": \"ipykernel\",\n", | |
" })\n", | |
" )\n", | |
" trace.set_tracer_provider(self.provider)\n", | |
"\n", | |
" jaeger_exporter = JaegerExporter(\n", | |
" agent_host_name=\"localhost\",\n", | |
" agent_port=6831,\n", | |
" )\n", | |
"\n", | |
" self.provider.add_span_processor(\n", | |
" BatchSpanProcessor(jaeger_exporter)\n", | |
" )\n", | |
"\n", | |
" self.parent = tracer.start_span(\"notebook\", kind=SpanKind.SERVER)\n", | |
" self.parent.add_event(\"Started\")\n", | |
" self.parent.set_attributes({\n", | |
" 'notebook': \"some name\",\n", | |
" 'node': platform.node(),\n", | |
" 'platform': platform.platform(),\n", | |
" 'notebook': 'dev.ipynb',\n", | |
" })\n", | |
"\n", | |
" self._child = None\n", | |
"\n", | |
" def pre_run_cell(self, info):\n", | |
" with trace.use_span(self.parent, end_on_exit=False):\n", | |
" self._child = self.tracer.start_span(\"cell\")\n", | |
" self._child.set_attributes({\n", | |
" 'cell_no': ip.execution_count,\n", | |
" })\n", | |
" \n", | |
" self._child.add_event(f\"Cell {len(ip.user_ns['In'])} executed\")\n", | |
"\n", | |
" def post_run_cell(self, result):\n", | |
" with trace.use_span(self.parent, end_on_exit=False):\n", | |
" if self._child:\n", | |
" self._child.add_event(f\"Cell {len(ip.user_ns['In'])} success\")\n", | |
" time.sleep(1)\n", | |
" self._child.add_event(f\"Cell {len(ip.user_ns['In'])} arststsart\")\n", | |
" if result.error_in_exec:\n", | |
" self._child.record_exception(\n", | |
" result.error_in_exec,\n", | |
" {'raw_cell': result.info.raw_cell}\n", | |
" )\n", | |
" self._child.end()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"id": "6281d91e-ce21-4599-8dd4-f71823b5e4fc", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def load_ipython_extension(ip):\n", | |
" oe = OpentelemetryExtension(ip)\n", | |
" ip.events.register('pre_run_cell', oe.pre_run_cell)\n", | |
" ip.events.register('post_run_cell', oe.post_run_cell)\n", | |
"\n", | |
" return oe" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"id": "02c16e3d-204c-43eb-8a1b-68e7f8fd6126", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"ip = get_ipython()\n", | |
"oe = load_ipython_extension(ip)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"id": "65b752eb-8e5d-403a-bbcc-d7fd123e720a", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"time.sleep(random.random()*2)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"id": "21971de0-af6e-4d84-b038-76d3e67ed408", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"time.sleep(random.random()*2)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 9, | |
"id": "89f580e5-2537-4320-b9c6-99090c841390", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"time.sleep(random.random()*2)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 10, | |
"id": "82af7cd6-94be-481e-972c-b7f6c02d6266", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"ename": "NameError", | |
"evalue": "name 'not_defined' is not defined", | |
"output_type": "error", | |
"traceback": [ | |
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", | |
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", | |
"\u001b[0;32m<ipython-input-10-f59b2fe187d5>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mnot_defined\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", | |
"\u001b[0;31mNameError\u001b[0m: name 'not_defined' is not defined" | |
] | |
} | |
], | |
"source": [ | |
"not_defined" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 11, | |
"id": "80234718-e2f0-4b62-968c-e10f5a72ba19", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"oe.parent.end()" | |
] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3", | |
"language": "python", | |
"name": "python3" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.9.5" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 5 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment