Kamon v2.0.0-M4 Release Notes

Release Date: 2019-05-22 // almost 5 years ago
  • 🔄 Changes since 2.0.0-M3:

    Span Links and Delayed Spans

    This is a relatively big new feature that makes it easier to instrument operations that have a "wait" time (e.g. when sending a message to an actor, it "waits" on the mailbox for sometime or when producing a message to Kafka, it "waits" on Kafka before the consumer(s) receive it) and make links across Spans that might not belong to the same trace. A more detailed story is available on #584.

    More Control over Sampling Decisions

    Another addition on this version is the ability to suggest a sampling decision when creating working with a SpanBuilder, so that when a sampling decision needs to be taken, the suggestion will be used rather than generating a new decision from the sampler. Furthermore, now you can programatically override the sampling decision by calling .keep()/.drop() on a Trace instance, which will immediately override the sampling decision on all local Spans. You can read more about these changes on #586.

    PeriodSnapshot Model Change

    ⚡️ The PeriodSnapshot that Kamon passes to all metric reporters was updated to have a simpler model, going from (roughly speaking) Map[MetricName, MetricSnapshot] to a simpler Seq[MetricSnapshot]. Initially we thought that having maps would be more convenient here but in most cases they are just a burden and we just want to get to the values they contain (which also had the metric name anyways) so the model was simplified. Also, the model now matches the way in which metrics are organized in kamon-core: metrics hold several attributes like name, description and settings, paired with a collection of instruments for that metric, identified by their unique combination of tags.

    Other Changes

    Besides the three big changes above, there are several minor changes as well:

    • 📦 The packaging hell has been finally fixed by completely removing proguard and copying the parts that we needed from Eclipse Collections' UnifiedMap into Kamon and tweaking the good old sbt-assembly to produce the dependency-less packages that we needed.
    • ⚡️ Update the Status Page to include metric descriptions and fix a bug on storing those descriptions on the MetricBuilding trait.
    • Ensure that the upstream.name Context tag is automatically propagated when using HTTP/Binary propagation.
    • ✅ Simplified usage of TestSpanReporter on the testkit module.
    • Created a new tool called UnitConverter which replaces the previous Scaler tool.
    • 🔧 The module registry now will explicitly search for the name configuration setting rather than trying to define the module name from the configuration path. This makes for much better display names on the Status Page.
    • 🛠 Fixed (or rather, implemented) custom settings on the metrics factory.

    ⬆️ At this point, several modules have been already upgraded to 2.0.0-M4 (through snapshots), including Executors, Futures, Akka, Akka Remote and Akka HTTP, and we feel pretty confident that the implementation and API are in very good shape. Our hopes are to finish upgrading all the remaining modules and then publish 2.0.0-RC1. Stay tuned for the latest news!