SkyWalking Python Instrumentation API
Apart from the supported libraries that can be instrumented automatically, SkyWalking also provides some APIs to enable manual instrumentation.
Create Spans
The code snippet below shows how to create entry span, exit span and local span.
from skywalking import Component
from skywalking.trace.context import SpanContext, get_context
from skywalking.trace.tags import Tag
context: SpanContext = get_context() # get a tracing context
# create an entry span, by using `with` statement,
# the span automatically starts/stops when entering/exiting the context
with context.new_entry_span(op='https://github.com/apache') as span:
span.component = Component.Flask
# the span automatically stops when exiting the `with` context
class TagSinger(Tag):
key = 'Singer'
with context.new_exit_span(op='https://github.com/apache', peer='localhost:8080', component=Component.Flask) as span:
span.tag(TagSinger('Nakajima'))
with context.new_local_span(op='https://github.com/apache') as span:
span.tag(TagSinger('Nakajima'))
Decorators
from time import sleep
from skywalking import Component
from skywalking.decorators import trace, runnable
from skywalking.trace.context import SpanContext, get_context
@trace() # the operation name is the method name('some_other_method') by default
def some_other_method():
sleep(1)
@trace(op='awesome') # customize the operation name to 'awesome'
def some_method():
some_other_method()
@trace(op='async_functions_are_also_supported')
async def async_func():
return 'asynchronous'
@trace()
async def async_func2():
return await async_func()
@runnable() # cross thread propagation
def some_method():
some_other_method()
from threading import Thread
t = Thread(target=some_method)
t.start()
context: SpanContext = get_context()
with context.new_entry_span(op=str('https://github.com/apache/skywalking')) as span:
span.component = Component.Flask
some_method()