Exposed-OpenTracing
Exposed-OpenTracing copied to clipboard
OpenTracing instrumentation of Exposed (Kotlin ORM Framework)

Exposed OpenTracing
OpenTracing instrumentation of Exposed. Observe database transactions with spans tagged with query strings, table names and more. Logs execution start/ending, transaction commit and rollback. Santise queries to safeguard PII.
Usage
In an application with a tracer registered in GlobalTracer, replace your Exposed transaction
with a tracedTransaction
:
tracedTransaction(contains = NoPII) {
Cities.insert {
it[name] = "St. Petersburg"
}
}
The execution will be wrapped with a child span of the previously active span, which will be tagged with the SQL query. If your query contains PII that you do not want to leak to the tracing system, pass the sensitive strings to the call as follows:
tracedTransaction(contains = PII, name, password) {
Users.insert {
it[Users.username] = username
it[Users.name] = name
it[Users.password] = password
}
}
The name
and password
strings with be replaced with <REDACTED>
in the query tagged on the span.
If no strings are password with contains = PII
or if a string is passed with contains = NoPII
, a warn log will be written, and the transaction will execute without tracing.
The resulting ExposedTransaction
span looks as follows in Jaeger:
Installation
From Maven Central.
Maven
Add the following dependency to your pom.xml
:
<dependency>
<groupId>com.github.fstien</groupId>
<artifactId>exposed-opentracing</artifactId>
<version>VERSION_NUMBER</version>
</dependency>
Gradle
Add the following to your dependencies in your build.gradle
:
implementation 'com.github.fstien:exposed-opentracing:VERSION_NUMBER'
Example
For an example Ktor application, see Exposed-OpenTracing-example.