Integrates LTTng's kernel-level tracing with the Jaeger trace framework.
See our slides for details on our motivation, design, implementation, and results.
- OpenTracing C++ v1.3.0
- Apache Thrift v0.11.0
- Golang with a
$GOPATH/binadded to the path
- A working Jaeger collection setup. For development purposes, it is easiest to run the
- Recompile your Linux kernel with our modified version of Linux. Because our changes to the kernel are very minimal, it is also possible to apply the patch to a different Linux source tree.
- Compile and install the skua kernel module using the instructions in the README.
- Install lttng-tools v2.10.
- Install our modified version of lttng-modules v2.10.
- Fetch the skua-lttng-adapter using
go get -u github.com/docc-lab/skua-lttng-adapter.
- Install Skua-patched Jaeger client libraries as needed. Currently, have patched the C++ and Java Jaeger clients.
Instrumenting an Application
You can instrument an application using Jaeger. When building your application, simply use our modified Jaeger client libraries. As of now, we only support C++ and Java -- see the setup section for links.
We have included a few scripts to help streamline the tracing process. These scripts assume a working Skua setup, as detailed above, and additionally use the
jaegertracing/all-in-one docker image for reporting traces.
- Start tracing by running the
- Track the target process(es). Note that Skua can only trace applications that are using the modified Jaeger client libraries. The easiest way to track the target process is by prepending the
./trace-process.shscript before the application's start command. If this is not possible, you must manually track the PID of the target process using
lttng track -k --pid <pid>.
- When finished tracing, run the
- View the trace information using the Jaeger Web UI, which usually runs on port 16686.