Skip to content

OpenTracing instrumentation of Exposed (Kotlin ORM Framework)

License

Notifications You must be signed in to change notification settings

fstien/Exposed-OpenTracing

Repository files navigation

Exposed

Maven Central GitHub Unit Tests Actions Status

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.