Apart from the supported libraries that can be instrumented automatically, SkyWalking also provides some APIs to enable manual instrumentation.
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'))
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()