# ================================== # # Kamon-Core Reference Configuration # # ================================== # kamon { # Default dispatcher for all Kamon components, unless a more specific one is configured. default-dispatcher = "kamon.kamon-dispatcher" metrics { # Time interval for collecting all metrics and send the snapshots to all subscribed actors. tick-interval = 1 second # Time interval for recording values on all registered gauges. gauge-recording-interval = 100 milliseconds # Default size for the LongBuffer that gets allocated for metrics collection and merge. The # value should correspond to the highest number of different buckets with values that might # exist in a single histogram during a metrics collection. The default value of 33792 is a # very conservative value and its equal to the total number of buckets required to cover values # from 1 nanosecond to 1 hour with 0.1% precision (3 significant value digits). That means # that would need to have at least one measurement on every bucket of a single histogram to # fully utilize this buffer, which is *really* unlikely to ever happen. Since the buffer should # be allocated once and reused it shouldn't impose a memory footprint issue. default-collection-context-buffer-size = 33792 # Disables a big error message that will be typically logged if your application wasn't started # with the -javaagent:/path-to-aspectj-weaver.jar option. If you are only using KamonStandalone # it might be ok for you to turn this error off. disable-aspectj-weaver-missing-error = false dispatchers { # Dispatcher for periodical gauge value recordings. gauge-recordings = ${kamon.default-dispatcher} # Dispatcher for subscriptions and metrics collection actors. metric-subscriptions = ${kamon.default-dispatcher} } filters = [ { actor { includes = [] excludes = [ "system/*", "user/IO-*" ] } }, { router { includes = [] excludes = [ "system/*", "user/IO-*" ] } }, { trace { includes = [ "*" ] excludes = [] } }, { dispatcher { includes = [ "default-dispatcher" ] excludes = [] } } ] precision { default-histogram-precision { highest-trackable-value = 3600000000000 significant-value-digits = 2 } default-min-max-counter-precision { refresh-interval = 100 milliseconds highest-trackable-value = 999999999 significant-value-digits = 2 } default-gauge-precision { refresh-interval = 100 milliseconds highest-trackable-value = 999999999 significant-value-digits = 2 } actor { processing-time = ${kamon.metrics.precision.default-histogram-precision} time-in-mailbox = ${kamon.metrics.precision.default-histogram-precision} mailbox-size = ${kamon.metrics.precision.default-min-max-counter-precision} } router { processing-time = ${kamon.metrics.precision.default-histogram-precision} time-in-mailbox = ${kamon.metrics.precision.default-histogram-precision} } trace { elapsed-time = ${kamon.metrics.precision.default-histogram-precision} segment = ${kamon.metrics.precision.default-histogram-precision} } dispatcher { maximum-pool-size { highest-trackable-value = 999999999 significant-value-digits = 2 } running-thread-count { highest-trackable-value = 999999999 significant-value-digits = 2 } queued-task-count { highest-trackable-value = 999999999 significant-value-digits = 2 } pool-size { highest-trackable-value = 999999999 significant-value-digits = 2 } } } } trace { # Level of detail used when recording trace information. The posible values are: # - metrics-only: metrics for all included traces and all segments are recorded, but no Trace messages will be sent # to the subscriptors of trace data. # - simple-trace: metrics for all included traces and all segments are recorded and additionally a Trace message # containing the trace and segments details and metadata. level = metrics-only # Sampling strategy to apply when the tracing level is set to `simple-trace`. The options are: all, random, ordered # and threshold. The details of each sampler are bellow. sampling = random # Use a ThreadLocalRandom to generate numbers between 1 and 100, if the random number is less or equal to .chance # then tracing information will be gathered and reported for the current trace. random-sampler { chance = 10 } # Use a AtomicLong to ensure that every .sample-interval number of requests tracing information will be gathered and # reported. ordered-sampler { # must be power of two sample-interval = 8 } # Gather tracing information for all traces but only report those whose elapsed-time is equal or greated to the # .minimum-elapsed-time setting. threshold-sampler { minimum-elapsed-time = 1 second } incubator { # Minimum time to stay in the trace incubator before checking if the trace should not be incubated anymore. No # checks are made at least until this period has passed. min-incubation-time = 5 seconds # Time to wait between incubation checks. After min-incubation-time, a trace is checked using this interval and if # if shouldn't be incubated anymore, the TraceInfo is collected and reported for it. check-interval = 1 second # Max amount of time that a trace can be in the incubator. If this time is reached for a given trace then it will # be reported with whatever information is available at the moment, logging a warning for each segment that remains # open after this point. max-incubation-time = 20 seconds } # If ask-pattern-tracing is enabled, a WARN level log message will be generated if a future generated by the `ask` # pattern fails with a `AskTimeoutException` and the log message will contain information depending of the strategy selected. # strategies: # - off: nothing to do. # - lightweight: logs the warning when a timeout is reached using org.aspectj.lang.reflect.SourceLocation. # - heavyweight: logs the warning when a timeout is reached using a stack trace captured at the moment the future was created. ask-pattern-tracing = off # Default dispatcher for all trace operations dispatcher = ${kamon.default-dispatcher} } kamon-dispatcher { # Dispatcher is the name of the event-based dispatcher type = Dispatcher # What kind of ExecutionService to use executor = "fork-join-executor" # Configuration for the fork join pool fork-join-executor { # Min number of threads to cap factor-based parallelism number to parallelism-min = 2 # The parallelism factor is used to determine thread pool size using the # following formula: ceil(available processors * factor). Resulting size # is then bounded by the parallelism-min and parallelism-max values. parallelism-factor = 2.0 # Max number of threads to cap factor-based parallelism number to parallelism-max = 10 } # Throughput defines the maximum number of messages to be # processed per actor before the thread jumps to the next actor. # Set to 1 for as fair as possible. throughput = 3 } }