Distributed Tracing, Metrics and Context Propagation for application running on the JVM

Overview

Kamon

Discord Maven Central

Kamon is a set of tools for instrumenting applications running on the JVM. The best way to get started is to go to our official Get Started Page and start instrumenting your applications right away! There you will also find guides and reference documentation for the core APIs, instrumentation and reporting modules.

Importing the project into Intellij IDEA

This project has a library dependency on a subproject of itself (kamon-tapir). As a result of that, if you just clone this project and open it in IDEA, it will fail to import it. First, run sbt +kamon-tapir/publishLocal from the console, and then IDEA will be able to import the project.

Why is this necessary?

Among our instrumented libraries is Tapir, which is also the only library we instrument that does not have a scala 2.11 version. In order to be able to cross publish kamon-bundle to all scala versions, while excluding kamon-tapir from the 2.11 bundle, we had to define kamon-tapir as a library dependency of kamon-bundle (instead of as a subproject).

License

This software is licensed under the Apache 2 license, quoted below.

Copyright © 2013-2019 the kamon project https://kamon.io/

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

[http://www.apache.org/licenses/LICENSE-2.0]

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Comments
  • the sigar situation

    the sigar situation

    we see few problems with kamon sigar approach:

    1. akka is assuming sigar is provided externally and access it via reflection https://github.com/akka/akka/blob/master/akka-cluster/src/main/scala/akka/cluster/ClusterMetricsCollector.scala#L695

    2. kamon bakes in specific binaries https://github.com/kamon-io/Kamon/tree/master/kamon-system-metrics/src/main/resources/kamon/system/sigar

    which leads to needles bloat, duplication and and forces to fight against these dependencies

    it would be better to move sigar+loader into a separate module, "the akka way"

    Enhancement 
    opened by Andrei-Pozolotin 35
  • kamon/util/GlobPathFilter : Unsupported major.minor version 51.0

    kamon/util/GlobPathFilter : Unsupported major.minor version 51.0

    Exception in thread "main" java.lang.UnsupportedClassVersionError: kamon/util/GlobPathFilter : Unsupported major.minor version 51.0 at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632) at java.lang.ClassLoader.defineClass(ClassLoader.java:616) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) at java.net.URLClassLoader.defineClass(URLClassLoader.java:283) at java.net.URLClassLoader.access$000(URLlassLoader.java:58) at java.net.URLClassLoader$1.run(URLClassLoader.java:197) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190)

    Kamon: io.kamon kamon-core_2.10 0.3.1 io.kamon kamon-datadog_2.10 0.3.1

        <SCALA_MAJOR>2.10</SCALA_MAJOR>
        <SCALA_VERSION>2.10.3</SCALA_VERSION>
        <AKKA_VERSION>2.3.2</AKKA_VERSION>
    

    JDK 1.6

    opened by rubinghimire 31
  • 0.6.2 Not reporting any actor metrics w/ Akka 2.4.5

    0.6.2 Not reporting any actor metrics w/ Akka 2.4.5

    Using Scala 2.11.8 and just the simple log reporter, I'm currently unable to get it to report a single thing. AspectJ weaver (1.8.9) is definitely loaded - I don't see the big warning banner. I'm calling Kamon.start() just after my actor system is initialized (tried before, too).

    Here's my configuration:

    kamon {
      metric.filters {
        akka-actor {
          includes = ["boxsystem/user/**"]
          excludes = ["boxsystem/system/**"]
        }
    
        akka-dispatcher {
          includes = ["boxsystem/akka.actor.default-dispatcher"]
        }
      }
    
      statsd {  
        hostname = "localhost"
        port = 8125
      }
    }
    

    At first I thought remoting was maybe interfering, but even with remoting totally disabled I'm still getting: [INFO] [09/28/2016 10:58:50.288] [kamon-akka.actor.default-dispatcher-3] [akka://kamon/user/kamon-log-reporter] No metrics reported

    Looks like everything is starting up properly:

    INFO  [2016-09-28 10:58:10,220] [main] [-] [] Kamon: Initializing Kamon...
    [INFO] [09/28/2016 10:58:10.434] [main] [StatsDExtension(akka://kamon)] Starting the Kamon(StatsD) extension
    [INFO] [09/28/2016 10:58:10.524] [main] [LogReporterExtension(akka://kamon)] Starting the Kamon(LogReporter) extension
    

    Note that manually adding a counter and incrementing it does show up, although, curiously, incrementing the counter once causes it to show in the first logging event as 2 and then 0 every time after that, so perhaps something is wiping data.

    I'm happy to try out any suggestions, or collect more info.

    opened by Sushisource 26
  • Kamon is not getting metrics from JDBC

    Kamon is not getting metrics from JDBC

    So maybe I'm just missing something here and this is not an issue.

    My build.sbt file has the following dependencies (among others):

      "io.kamon"                      %% "kamon-core"               % kamonVersion,
      "io.kamon"                      %% "kamon-autoweave"          % kamonVersion,
      "io.kamon"                      %% "kamon-jdbc"               % kamonVersion,
      "io.kamon"                      %% "kamon-log-reporter"               % kamonVersion,
      "io.kamon"                      %% "kamon-jmx"                % kamonVersion
    

    My application also does database operations, mostly write operations. That's why I'd like to use kamon-jdbc for this task.

    The problem is: Kamon is not reporting anything regarding JDBC to the logs.

    So, my questions are:

    1. How does Kamon communicates with the JDBC drivers?
    2. Is it enough to just load kamon-autoweave in the build file? (I do see Kamon-autoweave has been successfully loaded in the logs)
    3. By loading kamon-autoweave in the build, does it guarantee that kamon-jdbc will be loaded after it? I'm asking this because of this log message: This offers extra flexibility but obviously any classes loaded before attachment will not be woven.
    4. Is there any problems if I'm using ScalikeJDBC (http://scalikejdbc.org/) to communicate with the database? As far as I know, it should not matter, right?
    5. The database I'm connecting to is Sql Server in Azure. Does this matter? (I'm using a JDBC driver to establish the connection)

    A bit more of (probably) relevant information:

    • I'm working on a Mac OS El Capitain
    • Scala version 2.12.0
    • Kamon version 0.6.5
    • There are no log error regarding kamon-autoweave or kamon-jdbc
    • All the other measures from Kamon are being properly reported
    • During development, the application is running in IntelliJ (probably this does not matter)

    I will really appreciate you answer. Thank you in advance for your help.

    opened by ricardoatsouza 23
  • No data for Actor metrics

    No data for Actor metrics

    Hi All, I integrated kamon with a Java Play framework application and when i run the application there is no data for the actor metrics graph but i can see the trace graph and system metrics graph.

    I checked the logs and it always shows zero for processing time, time in mail box and mail box size.

    This is my code:

    build.sbt

    "io.kamon" %% "kamon-core" % "0.4.0", "io.kamon" %% "kamon-akka" % "0.4.0", "io.kamon" %% "kamon-play" % "0.4.0", "io.kamon" %% "kamon-statsd" % "0.4.0", "io.kamon" %% "kamon-log-reporter" % "0.4.0", "io.kamon" %% "kamon-system-metrics" % "0.4.0", "org.aspectj" % "aspectjweaver" % "1.8.6",

    kamon settings:

    kamon { log-reporter { } metric { tick-interval = 1 second filters { akka-actor { includes = ["**/ManagerActor/*/WorkerActor"] } akka-router { includes = ["**"] } akka-dispatcher { includes = ["akka.actor.default-dispatcher"] } } } statsd { hostname = "192.168.59.103" port = 8125 flush-interval = 1 second max-packet-size = 1024 bytes subscriptions { histogram = [ "**" ] min-max-counter = [ "**" ] gauge = [ "**" ] counter = [ "**" ] trace = [ "**" ] trace-segment = [ "**" ] akka-actor = [ "**" ] akka-dispatcher = [ "**" ] akka-router = [ "**" ] system-metric = [ "**" ] } simple-metric-key-generator { application = "MyApp" } } modules { kamon-akka { auto-start = yes requires-aspectj = yes extension-id = "kamon.akka.Akka" } } }

    and i started the kamon as Kamon.start();

    opened by ksnagendran 22
  • Provide actor-group metrics

    Provide actor-group metrics

    Currently we have RouterMetrics which consolidate processing-time and time-in-mailbox metrics for all the routees of a given routers and it seems like a good idea to provide something similar for use with the work-queue/workers solution in which there is a number of workers that typically only process one message and then ask for the next piece of work and having a unified view of all actors is better than having individual metrics. There is a short conversation in the mailing list that started this idea: https://groups.google.com/forum/#!topic/kamon-user/7woEIS0j_KQ

    Enhancement 
    opened by ivantopo 22
  • Unable to find class 'akka.event.Logging.LogEvent' in repository

    Unable to find class 'akka.event.Logging.LogEvent' in repository

    I am getting 7-8 of these messages on startup:

    ava.lang.ClassNotFoundException: akka.event.Logging.LogEvent not found - unable to determine URL at org.aspectj.apache.bcel.util.ClassLoaderRepository.loadClass(ClassLoaderRepository.java:292) ~[aspectjweaver-1.8.5.jar:1.8.5] at org.aspectj.weaver.bcel.BcelWorld.lookupJavaClass(BcelWorld.java:418) [aspectjweaver-1.8.5.jar:1.8.5] at org.aspectj.weaver.bcel.BcelWorld.resolveDelegate(BcelWorld.java:392) [aspectjweaver-1.8.5.jar:1.8.5] at org.aspectj.weaver.ltw.LTWWorld.resolveDelegate(LTWWorld.java:107) [aspectjweaver-1.8.5.jar:1.8.5] at org.aspectj.weaver.World.resolveToReferenceType(World.java:477) [aspectjweaver-1.8.5.jar:1.8.5]

    This is an Akka Play application.

    I am starting the application with the following command:

    activator -jvm-debug 9999 -Dhttps.port=9443 -J-javaagent:/Users/Me/.ivy2/cache/org.aspectj/aspectjweaver/jars/aspectjweaver-1.8.5.jar

    In application.conf, I have this:

    akka { extensions = ["kamon.metric.Metrics", "kamon.logreporter.LogReporter"] }

    I have also imported kamon-core, kamon-play, kamon-log-reporter, and kamon-system-metrics in my build.sbt,

    In build.stb, I have tried setting "fork in run" to both true and false. Is there anything else I should be doing?

    opened by osbornk 21
  • Cats-effect 3.x implementation

    Cats-effect 3.x implementation

    See discussion in #1127

    I'm not sure if it's complete, but it covers the main/obvious cases. Propagate the context on launching a new fiber (in the fiber itself), make it current for the duration of the run method, clear it from the current thread on suspend and restore (from what was originally saved) on resume.

    opened by m50d 19
  • Failed to read process file: /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java (deleted)

    Failed to read process file: /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java (deleted)

    Some months ago, I got a weird error in one of my apps, today, I got the same error in a different one, Kamon is a piece in both projects, I have no idea how something like this could ha occurred but I'm pasting the error just in case someone has any idea on preventing it.

    Failed to read process file: /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java (deleted)
        at oshi.software.os.linux.LinuxOperatingSystem.getProcess(LinuxOperatingSystem.java:284)
        at oshi.software.os.linux.LinuxOperatingSystem.getProcess(LinuxOperatingSystem.java:224)
        at oshi.software.common.AbstractOperatingSystem.getProcess(AbstractOperatingSystem.java:221)
        at kamon.instrumentation.system.process.ProcessMetricsCollector$MetricsCollectionTask.recordProcessULimits(ProcessMetricsCollector.scala:97)
        at kamon.instrumentation.system.process.ProcessMetricsCollector$MetricsCollectionTask.$anonfun$schedule$1(ProcessMetricsCollector.scala:63)
        at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.scala:18)
        at scala.concurrent.Future$.$anonfun$apply$1(Future.scala:671)
        at scala.concurrent.impl.Promise$Transformation.run(Promise.scala:430)
    
    opened by AlexITC 18
  • Trace segments no longer reported to statsd

    Trace segments no longer reported to statsd

    After upgrading to the latest kamon snapshot 0.3.6-125bee567e0b18ea5ec10f3a1fe76409673011d9 trace segments don't seem to be reported to statsd (traces are reported fine). In my own trace subscriber I still get trace segments (we're still using this for logging), so they're actually there.

    I verified that trace segments are not reported by checking the 'timers' via statsd admin interface (additionally to just looking in grafana).

    opened by magro 17
  • ensure that the datadog module works on Windows

    ensure that the datadog module works on Windows

    Apparently the Windows agent does not support multiple metrics per packet to work properly, we might need to add a setting to define whether multiple metrics can be reported in a single packet or not. Issue #42 has more details on how this was initiated.

    Support 
    opened by ivantopo 17
  • Kamon high cpu usage

    Kamon high cpu usage

    Now and then when I collect thread-dumps or monitor CPU usage, I see Kamon is running some regex. Do you why this happens? Pictures of my recording is attached.

    MicrosoftTeams-image (1) MicrosoftTeams-image

    opened by Pooriya-Shokri 0
  • kamon support for netty library

    kamon support for netty library

    Would like to know if kamon supports monitoring of socket connections using netty library, or if there are any plans to include support in future releases.

    opened by spotsantosh 0
  • Losing context when using cats parallel

    Losing context when using cats parallel

    Hello, we observed an issue where context is lost after a call to a cats parallel method is made, such as parSequence.

    Here is an example test that demonstrates the issue: https://gist.github.com/igullickson/2c45e5922c464d196f6b4a2aa10c500a

    We are using:

    • cats 2.8.0
    • cats effect 2.5.5
    • kamon 2.5.8
    • kanela-agent 1.0.14

    We are using the following configuration for kamon/cats effect:

    kanela.modules {
      executor-service-capture-on-submit.enabled = true
    
      executor-service {
        within += "cats.effect.internals.Callback\\$AsyncIdempotentCallback"
      }
    }
    

    Trying other configuration variations such as the example here did not fix the context propagation.

    Any help or feedback otherwise is much appreciated.

    opened by igullickson 0
  • Allow W3C TraceContext propagation in kamon-kafka

    Allow W3C TraceContext propagation in kamon-kafka

    Fixes #1235 by adding a new configuration key kamon.instrumentation.kafka.client.tracing.propagator that can take the value w3c to propagate the trace context using the W3C TraceContext specification.

    Please excuse any bad scala code, I'm still a newb in this ecosystem.

    opened by Symbianx 2
  • Kafka instrumentation is not using w3c for context propagation

    Kafka instrumentation is not using w3c for context propagation

    Hello, We're using Kamon to instrument our akka services and it works really well! Because we use different languages across all the projects we decided to go with W3C trace-context for context propagation.

    This works really great on Kamon with HTTP:

    kamon.propagation.http.default.entries {
      incoming {
        span = "w3c"
      }
      outgoing {
        span = "w3c"
      }
    }
    

    However, we can't find a way to use the trace-context headers in kafka messages. Is there a config we can set for it?

    If it's not available but wanted, I could make a PR for it.

    opened by Symbianx 5
Releases(v2.5.12)
  • v2.5.12(Nov 21, 2022)

    Fixes

    • logback: Append context tags/keys to the MDC, even when the MDC is empty. This issue was introduced on 2.5.11. Fixed by @ivantopo via #1227. Many thanks to @scheleaap for providing a reproducible!

    Improvements

    • all: Bump OkHttp version to 4.10.0. Contributed by @azolotko via #1226
    • akka-grpc: Propagage context to service implementations when handling unary requests on the Java API. Contributed by @ivantopo via #1229
    Source code(tar.gz)
    Source code(zip)
  • v2.5.11(Nov 2, 2022)

    Fixes

    • apm: The Kamon APM reporter was not closing OkHttp's response body, leading to a warning about leaked connections. Fixed by @ivantopo via #1224

    Improvements:

    • redis, caffeine, and annotation: These modules are now published for Scala 3 as well. Contributed by @hughsimpson via #1123 and #1221.
    Source code(tar.gz)
    Source code(zip)
  • v2.5.10(Oct 26, 2022)

    Fixes:

    • logback: #1212 Avoid stackoverflow errors when using Logback 1.3.x / 1.4.x. Fixed by @ivantopo via #1220

    Improvements:

    • bundle: The bundle now ships with Kanela 1.0.16. Now you can use Kanela on folders that have white spaces on their path.
    • apm: Moved to the v2 ingestion API on the Kamon APM reporter. All timestamps on spans (start, finish, and marks) are now reported using the full nanosecond precision available on Kamon Telemetry. Contributed by @ivantopo via #1211
    Source code(tar.gz)
    Source code(zip)
  • v2.5.9(Oct 18, 2022)

    New Features

    • cats-io-3: There is a new kamon-cats-io-3 module with automatic instrumentation for Cats Effect 3 fibers :tada: This was a huge effort with tons of support from @m50d, @dispalt, @hughsimpson, @cmcmteixeira, @dpsoft, and @ivantopo via #1196. Thank you so much to everyone involved :heart:

    Improvements

    • jaeger: Bumped jaeger-thrift dependency to address security issues. Contributed by @mvollmar via #1209
    • common: Increase default range for the http.server.connection.lifetime metric to a week. Contributed by @ivantopo via #1204
    • jvm: Add memory utilization metrics and support ZGC/Shenandoah. Contributed by @ivantopo via #1203
    • scala-future and kafka: Make the tests pass and publish artifacts for Scala 3. Contributed by @hughsimpson via #1208
    Source code(tar.gz)
    Source code(zip)
  • v2.5.8(Aug 29, 2022)

    Improvements

    • tapir: The Tapir instrumentation is now compatible with Tapir 1.x. Contributed by @Grandys and @hughsimpson via #1188. Thanks for your help!

    Fixes

    • core: Ensure that ignored operations are taken into account when doing delayed sampling. Fixed by @ivantopo via #1198
    Source code(tar.gz)
    Source code(zip)
  • v2.5.7(Aug 24, 2022)

    Ignoring Metrics and Spans for Specific Operations

    We get asked pretty often: how can we disable sampling for health checks and status endpoints? This Kamon Telemetry version comes with a new setting for that:

    kamon.trace.ignored-operations = ["/status", "/health", "/ready"]
    

    This has a few advantages over the groups configuration on the adaptive sampler:

    • It works with all samplers, including always and random.
    • It comes with a track-metrics-on-ignored-operations setting, which allows disabling metrics for these operations too (the adaptive sampler would only disable sampling but still track metrics for all operations).

    Improvements

    • instrumentation-common: This module is now published for Scala 3 as well. Special thanks to @vaslabs for going the extra mile on that PR :heart_eyes:. Contributed by @vaslabs via #1191.
    • core: Introduce a new setting to ignore operations and disable metrics for them. Contributed by @ivantopo via #1197
    Source code(tar.gz)
    Source code(zip)
  • v2.5.6(Aug 4, 2022)

    Akka Cluster Metrics

    This release comes with experimental support for a bunch of Akka Cluster-related metrics! We can break down the metrics into per-state member counts that help you get a general view of the cluster status, and per-member status counts, which let you see exactly which nodes are on each state.

    Per-state Member Counts

    These metrics track how many cluster members are on each of the possible states in the cluster. The metric names for these states are:

    • akka.cluster.members.joining.count
    • akka.cluster.members.weakly-up.count
    • akka.cluster.members.up.count
    • akka.cluster.members.leaving.count
    • akka.cluster.members.exiting.count
    • akka.cluster.members.down.count
    • akka.cluster.members.removed.count
    • akka.cluster.members.total.count

    All members of the cluster expose these metrics with the number of members they see in each state. Since these metrics are exposed as gauges, you could always make a chart of the max(akka.cluster.members.[state].count) to see how many members are on a given state. For example, for members in the Up state you can see how a cluster starts growing in members: image

    Per-member Status Counts

    The metrics we mentioned above will help you know, for example, that there are 3 members in the Joining state, but what if you want to know whichare those members? That's what the per-member metrics are for. These metrics have a member tag that identifies the member being measured, and the value of the metric tells you the state it is currently in. Here is a breakdown of the possible values:

    akka.cluster.member.status

    • Joining = 1
    • WeaklyUp = 2
    • Up = 3
    • Leaving = 4
    • Exiting = 5
    • Down = 6
    • Removed = 7

    akka.cluster.member.reachability

    • Reachable = 0
    • Unreachable = 1

    The same as with the status metrics, you can plot the max(akka.cluster.members.status) and see what's the latest on each member of the cluster! In the example below, all members are on state 3 (Up): image

    Enabling Cluster Metrics

    This feature isn't fully tested yet so we are not enabling it by default. To enable Akka Cluster Metrics, add this setting to your application.conf file:

    kamon.instrumentation.akka.cluster.track-cluster-metrics=yes
    

    New Features

    • akka: Publish Akka Cluster metrics for members' status and reachability. Contributed by @ivantopo via #1189
    Source code(tar.gz)
    Source code(zip)
  • v2.5.5(Jun 29, 2022)

    Improvements

    • play: We are now using the Play Environment's class loader to create all Kamon-related objects. This ensures that custom classes (like samples or SlowStatementProcessors) can be loaded from the classpath when running on development mode. Contributed by @ivantopo via #1185
    Source code(tar.gz)
    Source code(zip)
  • v2.5.4(Jun 8, 2022)

    Fixes

    • bundle: The new kamon-aws-sdk module had a Compile dependency on the Dynalite test container that was brining a bunch of extra classes into the Bundle and messing with user-provided dependencies :facepalm:. Reported by @fggarcia on #1171 and fixed by @ivantopo via #1178
    • aws-sdk: Duplicate execution attribute definitions when using more than one AWS SDK Client. Reported by @hhalex on #1173 and fixed by @ivantopo on #1175
    Source code(tar.gz)
    Source code(zip)
  • v2.5.3(May 23, 2022)

    :fire: :rotating_light: :fire: Skip this release! This release has a dependency packaging issue described in #1171. Please jump straight to the latest and greatest Kamon Telemetry version!

    AWS SDK for Java Support

    image This release ships automatic instrumentation for the AWS SDK for Java, both 1.x and 2.x! The support is pretty basic: just tracing interactions with the SDK client libraries. Of course, the automatic metrics collected from spans will be there to help, but that's it.

    The immediate next steps for the AWS SDK instrumentation are to ensure context propagation through SQS (same as we do for Kafka) and start extracting more request-specific information to enrich those spans. Feel free to stop by our Discord or open an issue to tell us what you are missing!

    New Features

    • aws-sdk: We are shipping a new kamon-aws-sdk instrumentation module that comes with basic tracing capabilities for the AWS Java SDK. Contributed by @ivantopo via #1167
    • alpakka-kafka: We are shipping a new kamon-alpakka-kafka instrumentation module that includes automatic context propagation for ProducerMessage instances. Contributed by @ivantopo via #1168
    Source code(tar.gz)
    Source code(zip)
  • v2.5.2(May 17, 2022)

    Improvements:

    • system-metrics": This module is now built and published for Scala 3 as well. Contributed by @ornicar via #1155
    • otel: The OpenTelemetry reporter now supports the OTEL_RESOURCE_ATTRIBUTES environment variable. Contributed by @hughsimpson via #1157
    • otel: The OpenTelemetry exporter dependencies are now bumped to 1.13.0. Contributed by @hughsimpson via #1158

    Fixes:

    • system-metrics: No network metrics were reported by the System Metrics module when running inside docker containers. Fixed by @jypma via #1165
    Source code(tar.gz)
    Source code(zip)
  • v2.5.1(Apr 4, 2022)

    New Features

    • core: This release ships with a new datadog Span propagation scheme that uses the x-datadog-trace-id, x-datadog-parent-id, and x-datadog-sampling-priority headers for all tracing information, exactly as Datadog does it. Contributed by @seglo and @leonwlaw via #1145
    • core: It is now possible to filter the metrics sent to a metrics reporter via configuration. You can use kamon.modules.reporter-name.metric-filters to configure an includes/excludes filter with the metrics you want to be exported. Contributed by @ivantopo via #1148
    • otel: The OpenTelemetry traces reporter now supports http/protobuf protocol. The entire OTel reporter was rewritten on top of the official OTel exporter and should make it really easy to get into exporting metrics soon :tada:. Contributed by @hughsimpson via #1102

    Fixes

    • twitter-future: Fixed context propagation issues that were haunting us for ages in the Twitter Future. Many thanks to @dispalt for providing reproducibles for the issue and helping debug this issue. Fixed by @ivantopo via #1147
    • akka-http: We were unable to trace HTTP/1 requests on Akka HTTP servers that had HTTP/2 enabled, now we can. Many thanks to @jtjeferreira for writing a failing test for the issue. Fixed by @ivantopo via #1094
    Source code(tar.gz)
    Source code(zip)
  • v2.5.0(Mar 7, 2022)

    Akka gRPC Server Support

    Starting on this release, Kamon Telemetry ships with support for tracing server-side Akka gRPC requests implemented with Akka HTTP, Play Framework, and Lagom. This instrumentation is the first step towards full Akka gRPC support and we will soon add:

    • gRPC client tracing
    • Context propagation across gRPC channels

    Improvements

    • core: Add the error.type tag to traces, getting us closer to follow the OpenTelemetry semantic conventions. Contributed by @hughsimpson via #1112
    • kafka: Prevent the Kafka producer instrumentation from starting traces when there is no current trace on the application. There is a new kamon.instrumentation.kafka.client.tracing.start-trace-on-producer setting to control this behavior. Contributed by @ivantopo via #1125
    • akka-grpc: New instrumentation for server-side Akka gRPC. Contributed by @ivantopo via #1119
    • akka: #1093 New instrumentation for Akka's Scheduler scheduler.scheduleOnce function, which should bring proper context propagation for pattern.retry and pattern.after as well. Contributed by @ivantopo via #1135
    • executors: #641 Avoid reflective access on the executors instrumentation. Contributed by @ivantopo via #1136

    Fixes

    • influxdb: #1129, #1131 There two bugs regarding encoding and configuration settings on the InfluxDB Authorization Token support introduced on Kamon Telemetry 2.4.8, those are gone now. Fixed by @duese via #1130
    • redis: #1082 The Jedis instrumentation wasn't measuring the entire roundtrip time to Redis, only the time it took to send out the commands. Fixed by @ivantopo via #1117
    • redis: #1072 Ensure the Akka instrumentation takes the Rediscala actors' exclusions into account. Reported by @jtjeferreira and fixed by @ivantopo via #1122
    • akka:" #1116 Stop generating spans for Akka Streams-related actors. Fixed by @ivantopo via #1133
    • akka: #1132 Fix module registration warnings for Akka Dispatchers. Fixed by @ivantopo via #1138

    Breaking Changes :rotating_light:

    • We removed the Play gRPC-specific instrumentation that was included in kamon-play to the new kamon-akka-grpc hooks at a lower level that will work with both, coming with two important changes:
      • If you are not using the Kamon Bundle but instead adding dependencies one by one, you should add the new kamon-akka-grpc dependency for to your classpath
      • There is no custom operation name generator support in kamon-play anymore. All gRPC operations are now instrumented with the tag names defined by the OpenTelemetry semantic conventions and there shouldn't be any need to deviate from that with a custom generator
    • The operation tag in Play gRPC requests will no longer have a / prefix, meaning that operations that previously were reported as /ReplyService/SayHello will now show up as ReplyService/SayHello. You might need to update your dashboards and alert conditions to account for that
    • Kamon can no longer instrument Executors created by these helper functions from java.util.concurrent.Executors:
      • newSingleThreadExecutor
      • newSingleThreadScheduledExecutor
      • unconfigurableExecutorService
      • unconfigurableScheduledExecutorService
    Source code(tar.gz)
    Source code(zip)
  • v2.4.8(Feb 22, 2022)

    Starting on this release you can use API Token authentication when sending data to InfluxDB using this setting:

    kamon.influxdb.authentication {
      token = "your-glorious-token-here"
    }
    

    Improvements

    • influxdb. Introduced a new authentication.token configuration setting for cases where the InfluxDB reporter needs to authenticate with an API token. Contributed by @ivantopo via #1110.
    Source code(tar.gz)
    Source code(zip)
  • v2.4.7(Feb 11, 2022)

    You can now use the kamon.instrumentation.jdbc.add-db-statement-as-span-tag setting to control the db.statement tag in JDBC calls. This is especially important when your JDBC calls might contain sensitive information that you don't want to share with third parties, like your tracing vendor. The possible setting values are:

    • always: (default) will always add the db.statement tag to spans
    • prepared: will only add the the db.statement tag when the traced execution was made with a PreparedStatement, which should ensure no placeholder values are leaked to the tracing backend
    • never: completely disables adding the db.statement tag to spans

    Improvements

    • jdbc: control what kind of JDBC statements will be added to the db.statement tag in JDBC spans. Contributed by @ivantopo via #1103
    Source code(tar.gz)
    Source code(zip)
  • v2.4.6(Feb 1, 2022)

    Namespaced Environment Tags

    Now you can add namespaced (i.e. tags with dots in their name) environment tags to the kamon.environment.tags settings in your configuration file.

    kamon.environment.tags {
      container.id = "4444444444"
      k8s {
        namespace.name = "production"
        cluster {
          name = "strong-cluster"
        }
      } 
    }
    

    For example, the settings above in your application.conf file would add the container.id, k8s.namespace.name, and k8s.cluster.name tags to the environment. Most reporters will automatically add all of these tags to metrics and spans before they get sent out.

    Improvements

    • core: It is now possible to have namespaced tags inside the kamon.environment.tags configuration. Contributed by @ivantopo via #1101.
    Source code(tar.gz)
    Source code(zip)
  • v2.4.5(Jan 27, 2022)

    New Instrumentation

    • finagle: Now you can add a new HTTP filter to trace Finagle Client requests. Contributed by @seglo via #1096
    • lagom: We are now shipping a Lagom CircuitBreakerMetricsProvider that keeps track of all circuit breakers by default. Contributed by @ihostage via #760

    New Features

    • runtime-attacher: We are now shipping a new artifact called kamon-runtime-attacher that contains the Kanela agent and the logic to attach it in a running JVM. It is basically the bundle, but without the dependencies. Contributed by @ivantopo via d5ce436
    • apm: The Kamon APM reporter now sends environment tags as part for metrics and spans ingestion requests. Contributed by @ivantopo via 2235b79
    Source code(tar.gz)
    Source code(zip)
  • v2.4.2(Nov 30, 2021)

    Fixes

    • akka-http: Fix a "requirement failed: HTTP/1.0 responses must not have a chunked entity" error message when using HttpEntity.Default in responses. Fixed by @ivantopo via d8a57912fe9a6a56c6b589311caec9554148dcec
    Source code(tar.gz)
    Source code(zip)
  • v2.4.1(Nov 23, 2021)

    This improvement was originally meant to go out with v2.4.0, but it slipped through the cracks. Sorry!

    Improvements

    • system: Add a new jvm.threads.states gauge tracking the number of threads on each possible state. Contributed by @getArtemUsername via #1075
    Source code(tar.gz)
    Source code(zip)
  • v2.4.0(Nov 23, 2021)

    Introducing Local Tail Sampling

    This release comes with a new way of ensuring you will get traces for slow and failed requests, at least locally: the Local Tail-based Sampler.

    The quick summary is that the local tail sampler can keep finished spans in memory for a few seconds and then override their sampling decision if they reach a configurable latency or error count threshold. If you want the full story check out our post about how to keep traces for slow and failed requests.

    You can enabled the local tail sampler with these settings:

    kamon.trace {
      span-reporting-delay = 20 seconds
    
      local-tail-sampler {
        enabled = yes
        error-count-threshold = 1
        latency-threshold = 1 second
      }
    }
    

    Improvements

    • datadog: The OkHttp dependency is now shaded into the Datadog reporter jar to avoid classpath clashes. Contributed by @seglo via #1069
    • prometheus: Get easy access to the Prometheus scrape data through PrometheusReporter.latestScrapeData() in case you need it for exposing on your own HTTP server. Contributed by @ivantopo via #1079
    • redis: The Jedis instrumentation now works with Jedis 2.x as well. There is still a known issue in #1082 that should get solved soon after. Contributed by @jtjeferreira via #1076
    • apm: The Kamon APM reporter now drops old Spans that might be accumulated in the reporters' executor and comes with lower retries and backoff default settings. Contributed by @ivantopo via eeb05960b6fe249fba562042f8285e7b595410db and 49aef33b7c7e344be7f4c632e31bb5c4303d196a

    Fixes

    • bundle: Remove a misplaced logback.xml from kamon-mongo that was ending up in the bundle. Thanks @PavelPenkov for reporting the issue. Fixed by @ivantopo via d37cb48
    • general: @Philippus helped us get a bunch of typos fixed!
    Source code(tar.gz)
    Source code(zip)
  • v2.3.1(Oct 26, 2021)

    Fixes

    • play: The GuiceModule we include in the kamon-play instrumentation was not updated to start Kamon's scheduler after the updates we introduced in Kamon 2.3.0. This release adds a new Kamon.initWithoutAttaching(...) API that does the right initialization. This was reported and fixed by @ihostage, then @ivantopo just committed the lines via #1065.
    Source code(tar.gz)
    Source code(zip)
  • v2.3.0(Oct 21, 2021)

    GraalVM

    This is the first Kamon release that can be used in applications that target native images with GraalVM :tada:

    There was a non-trivial amount of work under the hood to ensure we are not starting any threads on static initializers, and ensuring that everything that requires a thread is delayed until Kamon.init(...) is called, and it works! All the core APIs, the Status Page, and all the reporters are now available to native image users.

    The main driver for this change was bringing support for Quarkus, and that's where we are going next! Creating a quarkus extension for Kamon is going to be a bit more challenging than we expected, particularly because we can't use automatic instrumentation in there. Also, Quarkus encourages using SmallRye Context Propagation, but Kamon has its own Context Propagation mechanism in place. It will be a fun ride :).. Join our Discord server if you want to participate on that adventure.

    Scala 3

    Starting on this release, we are also publishing the Core, Status Page, and Reporter artifacts for Scala 3! We still need to put some work on publishing all of our instrumentation for Scala 3. If you want to give a hand, check out #1064 as a starting point.


    New Features

    • Support for Scala 3 was brought up by @dpsoft, building on the work started by @bplommer. Thanks a lot for this contribution!
    • GraalVM Native Image support was contributed by @ivantopo via #1055

    Fixes

    • cassandra: Guard against unknown query formats in the Cassandra client instrumentation. Reported as #1058 and fixed by @ivantopo via c5ac1ea.
    • akka-http: Handle sub-route rejections on the path matchers instrumentation. Thanks very much to @seglo for providing a reproducible for the issue via #1063. Fixed by @ivantopo on that same #1063 PR.

    Deprecation Removals

    • We completely removed the Scala Future Chaining instrumentation that was deprecated in v2.1.21. This included a few deprecated functions for creating Spans with the old instrumentation, and a tiny bit of instrumentation for Akka HTTP's FastFuture that is no longer necessary. Those instrumentation pieces were already disabled since v2.2.0, and shouldn't be missed at all after the upgrade. Full diff here: 39191f8e6753ead1b55c5069528dedb1b9052625.
    Source code(tar.gz)
    Source code(zip)
  • v2.2.3(Jul 23, 2021)

    • kamon-redis: Add tracing for the rediscala library. Contributed by @SimunKaracic #1052
    • kamon-jdbc: Add SQL parsing to get better operation names. Disabled by default because the performance impact is yet unclear. If you'd like to test it and report back, set kamon.instrumentation.jdbc.parse-sql-for-operation-name to true. Contributed by @Falmarri via #1013
    Source code(tar.gz)
    Source code(zip)
  • v2.2.2(Jul 6, 2021)

    • kamon-opentelemetry: added missing span marks to otel exporter. Contributed by @pnerg via #1047
    • kamon-core: Repair W3C span propagation, now with way more spec compliance. Contributed by @SimunKaracic, @the-overengineer and @dguggemos via #1045.
    • kamon-system-metrics: Bump oshi-core to latest version. Contributed by @SimunKaracic via #1045
    • kamon-caffeine: new module adding instrumentation for Caffeine synchronous caches. Tracing is done automatically, and for cache metrics, KamonStatsCounter is available, which needs to be added manually. Contributed by @SimunKaracic via #1051
    Source code(tar.gz)
    Source code(zip)
  • v2.2.1(Jun 21, 2021)

    • kamon-datadog: Truncate 128-bit trace IDs before reporting to DataDog. Contributed by @dvgica via #1040. Fixes #1032
    • kamon-bundle: Ensure that the temporary Kanela agent file extracted by the Bundle will be deleted after the JVM exits. Contributed by @ivantopo via #1036
    • kamon-jdbc: Add support for HyperSQL. Contributed by @ivantopo via #1041
    • kamon-jdbc: Bump hikariCP to the latest version. Contributed by @simunkaracic via #1039
    • kamon-status-page: Try to bind Status Page on a different port if the configured port is busy. Contributed by @ivantopo via #1042
    • kamon-redis: Add tracing for the lettuce library. Contributed by @simunkaracic via #1037
    Source code(tar.gz)
    Source code(zip)
  • v2.2.0(Jun 4, 2021)

    :rotating_light: This release changes the instrumentation behavior for Scala Futures :rotating_light:

    This release changes the way Kamon instruments Scala Futures, going back to the same behavior we had in Kamon 1.x. This change is going to be transparent for most users because most of them only use the automatic instrumentation, but there might be a small difference in how Spans and Context are related to each other after. Broadly speaking:

    • In Kamon 2.x, a Scala Future and all the transformations applied to them (.map/.flatmap/etc) would form a "chain", and changes to the current context in any of the transformations would be carried on to the next transformation, as long as those changes are performed with the functions included in the ScalaFutureInstrumentation companion object. This change brought two challenges:
      • It makes it impossible to cache Future values because the Future itself was tied to the context available when the Future was created for the first time. This would manifest as traces with Spans that don't belong to them.
      • It is possible to leave dirty threads or get unexpected relationships between Spans when not using the helper functions from the ScalaFutureInstrumentation companion object.
    • In Kamon 1.x, a Scala Future would only be tied to its "execution context", making it possible to cache Future values and create Spans without concerns of leaving dirty threads, but context updates cannot be propagated through all transformations.

    There is more information about the motivations for this change on https://github.com/kamon-io/Kamon/issues/1021.

    The Future Chaining instrumentation is still included in Kamon 2.2.0, but it is marked as deprecated and disabled by default. If you need to, you can bring it back with these configuration settings:

    kanela.modules {
      executor-service {
        exclude += "scala.concurrent.impl.*"
      }
    
      scala-future {
        enabled = true
      }
      
      akka-http {
        instrumentations += "kamon.instrumentation.akka.http.FastFutureInstrumentation"
      }  
    }
    

    The Future Chaining instrumentation will be fully removed with Kamon 2.3.0.

    Changes

    • Rollback the Scala Future instrumentation to the same behavior we had in Kamon 1.x. Contributed by @ivantopo via #1035.
    Source code(tar.gz)
    Source code(zip)
  • v2.1.21(Jun 4, 2021)

    New Features

    • We got a new Kamon.span function that simplifies creating Spans and automatically handle Scala Futures and CompletionStage instances, ensuring that Spans will only be finished after the async computation is done. Contributed by @ivantopo via #1033.

    Deprecations

    • We deprecated the Future Chaining instrumentation introduced with Kamon 2.x. There is more info at #1021. Contributed by @ivantopo via #1034.
    Source code(tar.gz)
    Source code(zip)
  • v2.1.20(May 28, 2021)

    • kamon-redis: Fix #1027 by changing instrumentation so it does not use Jedis classes during loading, which leads to failures when Jedis is not on the classpath. Contributed by @SimunKaracic and @ivantopo via #1028 .
    Source code(tar.gz)
    Source code(zip)
  • v2.1.19(May 27, 2021)

    :warning: :rotating_light: Jump straight to Kamon 2.1.20! This version has a bug when Jedis is not on the classpath!

    • kamon-core: Introduce span reporting delay, allowing users to keep Spans in memory for a period of time. Contributed by @ivantopo via #1026
    • kamon-akka-http: Fix #1014. Contributed by @SimunKaracic via #1018
    • kamon-sqlite: Fix #1008, and update sqlite version. Contributed by @SimunKaracic and @dpsoft via #1023
    • kamon-redis: New module, adding tracing for the popular Jedis library. Contributed by @SimunKaracic via #1022
    Source code(tar.gz)
    Source code(zip)
  • v2.1.18(May 12, 2021)

    • kamon-prometheus: It's now possible to generate gauge metrics from distribution based metrics. Contributed by @pnerg via #1011
    • kamon-core: Add filtering to context tag propagation. Contributed by @pnerg via #1015
    • kamon-status-page: Fix status page indicator. Contributed by @the-overengineer via #999.
    • kamon-system-metrics: Fix typos in metric description. Contributed via #1007 by @moznion
    • kamon-core: Added resetDistribution method to RangleSampler. Contributed by @SimunKaracic via #1017
    • kamon-mongo: Update to driver version 4.x. If you're using kamon-mongo (instead of the kamon-bundle), beware. That package now supports only the 4.x.x versions of mongo drivers. For older version of drivers, please use kamon-mongo-legacy. Contributed by @SimunKaracic via #1001
    • kamon-mongo-legacy: new instrumentation module for older versions of mongo drivers. https://github.com/kamon-io/Kamon/tree/master/instrumentation/kamon-mongo-legacy Contributed by @SimunKaracic via #1001
    • kamon-core: Added flag to disable starting new spans in client instrumentation when there is no current span. Contributed by @SimunKaracic via #1006
    Source code(tar.gz)
    Source code(zip)
Owner
Kamon Open Source Project
Tools for monitoring applications running on the JVM
Kamon Open Source Project
APM, (Application Performance Management) tool for large-scale distributed systems.

Visit our official web site for more information and Latest updates on Pinpoint. Latest Release (2020/01/21) We're happy to announce the release of Pi

null 12.6k Jan 4, 2023
Get inside your JVM

nudge4j · nudge4j is a tiny piece of code to help great developers understand code better, debug less, have more fun. Overview With nudge4j you can: c

lorenzo puccetti 151 Nov 4, 2022
Prometheus instrumentation library for JVM applications

Prometheus JVM Client It supports Java, Clojure, Scala, JRuby, and anything else that runs on the JVM. Table of Contents Using Assets Javadocs Instrum

Prometheus 1.9k Jan 5, 2023
an open source solution to application performance monitoring for java server applications

Stagemonitor is a Java monitoring agent that tightly integrates with time series databases like Elasticsearch, Graphite and InfluxDB to analyze graphe

stagemonitor 1.7k Dec 30, 2022
inspectIT is the leading Open Source APM (Application Performance Management) tool for analyzing your Java (EE) applications.

?? inspectIT OpenCensus Edition has been released ?? The inspectIT OCE project provides an improved Java agent newly developed from scratch focusing o

inspectIT 531 Dec 13, 2022
Sentry is cross-platform application monitoring, with a focus on error reporting.

Users and logs provide clues. Sentry provides answers. What's Sentry? Sentry is a developer-first error tracking and performance monitoring platform t

Sentry 33k Jan 9, 2023
Automon combines the power of AOP (AspectJ) with monitoring or logging tools you already use to declaratively monitor your Java code, the JDK, and 3rd party libraries.

Automon Automon combines the power of AOP (AspectJ) with monitoring tools or logging tools that you already use to declaratively monitor the following

Steve Souza 561 Nov 27, 2022
Publish Jenkins performances metrics to an OpenTelemetry endpoint, including distributed traces of job executions and health metrics of the controller.

OpenTelemetry Introduction Architecture Features Getting Started Examples Configuration as Code Contributing Introduction Collect Jenkins monitoring d

Jenkins 73 Dec 26, 2022
An application metrics facade for the most popular monitoring tools. Think SLF4J, but for metrics.

Micrometer Application Metrics An application metrics facade for the most popular monitoring tools. Instrument your code with dimensional metrics with

Micrometer Metrics 3.7k Dec 30, 2022
Realtime SOS Android Application. Location (GPS + Cellular Network) tracing application by alerting guardians of the User.

WomenSaftey Women Safety Android Application: Realtime SOS Android Application. Designed a Location (GPS + Cellular Network) tracing application by al

jatin kasera 6 Nov 19, 2022
Zipkin is a distributed tracing system

zipkin Zipkin is a distributed tracing system. It helps gather timing data needed to troubleshoot latency problems in service architectures. Features

Open Zipkin 15.9k Dec 30, 2022
:chart_with_upwards_trend: Capturing JVM- and application-level metrics. So you know what's going on.

Metrics ?? Capturing JVM- and application-level metrics. So you know what's going on. For more information, please see the documentation Versions Vers

Dropwizard 7.7k Jan 1, 2023
:chart_with_upwards_trend: Capturing JVM- and application-level metrics. So you know what's going on.

Metrics ?? Capturing JVM- and application-level metrics. So you know what's going on. For more information, please see the documentation Versions Vers

Dropwizard 7.7k Dec 30, 2022
DataFX - is a JavaFX frameworks that provides additional features to create MVC based applications in JavaFX by providing routing and a context for CDI.

What you’ve stumbled upon here is a project that intends to make retrieving, massaging, populating, viewing, and editing data in JavaFX UI controls ea

Guigarage 110 Dec 29, 2022
Check performance metrics by running Selenium 4 tests with JUnit on LambdaTest cloud.

Run Selenium 4 Tests With JUnit On LambdaTest Blog ⋅ Docs ⋅ Learning Hub ⋅ Newsletter ⋅ Certifications ⋅ YouTube       Learn how to use JUnit framewor

null 11 Jul 11, 2022
Dynamic Context Dependency Injection

Welcome to the Project Dynamic CDI JDK Informations Actual version is running from JDK8 up to JDK13. The version 1.0.x is based on JDK8. The implement

Sven Ruppert 8 Dec 10, 2019
Simple JVM Profiler Using StatsD and Other Metrics Backends

statsd-jvm-profiler statsd-jvm-profiler is a JVM agent profiler that sends profiling data to StatsD. Inspired by riemann-jvm-profiler, it was primaril

Etsy, Inc. 330 Oct 30, 2022
JVM Explorer is a Java desktop application for browsing loaded class files inside locally running Java Virtual Machines.

JVM Explorer JVM Explorer is a Java desktop application for browsing loaded class files inside locally running Java Virtual Machines. Features Browse

null 109 Nov 30, 2022