This is an old revision of the document!


Metrics

It is possible to enable metrics on Blocks, which will log additional information on a regular basis as Blocks runs. This may occasionally be useful in troubleshootingsome extreme situations, but should normally not be left enabled on a production server.

Most of the details provided by these metrics are internal, and of little or no value to anyone but PIXILAB. So in general you should not configure metrics unless instructed and then provide the resulting log to PIXILAB for further analysis.

To enable metrics, add the following to Blocks' configuration file:

metrics: 
  frequency: 1 minute
  reporters:
    - type: log
      logger: metrics
      includes:
        - "io.dropwizard.jetty.MutableServletContextHandler.get-requests"
        - "io.dropwizard.jetty.MutableServletContextHandler.post-requests"
        - org.eclipse.jetty.util.thread.QueuedThreadPool.dw.jobs
        - jvm.memory.total.used
        - jvm.memory.heap.max
        - jvm.memory.heap.usage
        - pixi.cortex.backlog.now
        - pixi.cortex.backlog.peak
        - pixi.cortex.synapse
        - pixi.cortex.receptors
        - pixi.cortex.thalamus.properties
        - pixi.cortex.thalamus.streams
        - pixi.cortex.sharedSingleExecutorQueue
        - pixi.cortex.sharedMultiExecutorQueue
        - pixi.cortex.MobileSpot.connected.Mob1 #See below for Visitor spot logging

:!: NOTE: The example above logs connections to a Visitor spot named "Mob1". If you have multiple Visitor spots, or if your Visitor spot (if any), is named differently, replace "Mob1" above with the full dot-separated path to your Visitor spot, or list multiple Visitor spots as needed.

Furthermore, you must also enable the metrics logger under loggers in the config file. If you already have a logging section in your configuration file, merely add the metrics line under loggers as shown below, and make sure to indent the metrics line as shown, using spaces only – not tabs.

logging:
  level: WARN
  loggers:
    metrics: INFO   # To actually log metrics data

Metrics Available

Specify which metrics to include under include in the metrics configuration section. The following Blocks-specific metrics are available:

  • pixi.cortex.backlog.now Current backlog. A large or increasing value here may indicate server overload.
  • pixi.cortex.backlog.peak Peak backlog since last server start.
  • pixi.cortex.synapse Total number of synapses propcessed, as well as the name of any currently executing synapse.
  • pixi.cortex.receptors Current number of neuron connections, indicating the complexity of your system.
  • pixi.cortex.sharedSingleExecutorQueue Tasks waiting for the sharedSingleExecutor
  • pixi.cortex.sharedMultiExecutorQueue Tasks waiting for the sharedMultiExecutor
  • pixi.cortex.MobileSpot.connected.Mob1 Number of connected Visitor spots, with the last segment(s) (here "Mob1") being the dot-separated Spot path.

In addition to those, you can also use any metric provided by Blocks' infrastructure, such as those listed below. Refer to the respective infrastructure component for details.

ch.qos.logback.core.Appender.all
ch.qos.logback.core.Appender.debug
ch.qos.logback.core.Appender.error
ch.qos.logback.core.Appender.info
ch.qos.logback.core.Appender.trace
ch.qos.logback.core.Appender.warn
io.dropwizard.jetty.MutableServletContextHandler.1xx-responses
io.dropwizard.jetty.MutableServletContextHandler.2xx-responses
io.dropwizard.jetty.MutableServletContextHandler.3xx-responses
io.dropwizard.jetty.MutableServletContextHandler.4xx-responses
io.dropwizard.jetty.MutableServletContextHandler.5xx-responses
io.dropwizard.jetty.MutableServletContextHandler.active-dispatches
io.dropwizard.jetty.MutableServletContextHandler.active-requests
io.dropwizard.jetty.MutableServletContextHandler.active-suspended
io.dropwizard.jetty.MutableServletContextHandler.async-dispatches
io.dropwizard.jetty.MutableServletContextHandler.async-timeouts
io.dropwizard.jetty.MutableServletContextHandler.connect-requests
io.dropwizard.jetty.MutableServletContextHandler.delete-requests
io.dropwizard.jetty.MutableServletContextHandler.dispatches
io.dropwizard.jetty.MutableServletContextHandler.get-requests
io.dropwizard.jetty.MutableServletContextHandler.head-requests
io.dropwizard.jetty.MutableServletContextHandler.move-requests
io.dropwizard.jetty.MutableServletContextHandler.options-requests
io.dropwizard.jetty.MutableServletContextHandler.other-requests
io.dropwizard.jetty.MutableServletContextHandler.percent-4xx-15m
io.dropwizard.jetty.MutableServletContextHandler.percent-4xx-1m
io.dropwizard.jetty.MutableServletContextHandler.percent-4xx-5m
io.dropwizard.jetty.MutableServletContextHandler.percent-5xx-15m
io.dropwizard.jetty.MutableServletContextHandler.percent-5xx-1m
io.dropwizard.jetty.MutableServletContextHandler.percent-5xx-5m
io.dropwizard.jetty.MutableServletContextHandler.post-requests
io.dropwizard.jetty.MutableServletContextHandler.put-requests
io.dropwizard.jetty.MutableServletContextHandler.requests
io.dropwizard.jetty.MutableServletContextHandler.trace-requests
jersey-client-blocks.created
jersey-client-blocks.running
jersey-client-blocks.terminated
jvm.attribute.name
jvm.attribute.uptime
jvm.attribute.vendor
jvm.buffers.direct.capacity
jvm.buffers.direct.count
jvm.buffers.direct.used
jvm.buffers.mapped.capacity
jvm.buffers.mapped.count
jvm.buffers.mapped.used
jvm.classloader.loaded
jvm.classloader.unloaded
jvm.filedescriptor
jvm.gc.G1-Old-Generation.count
jvm.gc.G1-Old-Generation.time
jvm.gc.G1-Young-Generation.count
jvm.gc.G1-Young-Generation.time
jvm.memory.heap.committed
jvm.memory.heap.init
jvm.memory.heap.max
jvm.memory.heap.usage
jvm.memory.heap.used
jvm.memory.non-heap.committed
jvm.memory.non-heap.init
jvm.memory.non-heap.max
jvm.memory.non-heap.usage
jvm.memory.non-heap.used
jvm.memory.pools.CodeHeap-'non-nmethods'.committed"
jvm.memory.pools.CodeHeap-'non-nmethods'.init"
jvm.memory.pools.CodeHeap-'non-nmethods'.max"
jvm.memory.pools.CodeHeap-'non-nmethods'.usage"
jvm.memory.pools.CodeHeap-'non-nmethods'.used"
jvm.memory.pools.CodeHeap-'non-profiled-nmethods'.committed"
jvm.memory.pools.CodeHeap-'non-profiled-nmethods'.init"
jvm.memory.pools.CodeHeap-'non-profiled-nmethods'.max"
jvm.memory.pools.CodeHeap-'non-profiled-nmethods'.usage"
jvm.memory.pools.CodeHeap-'non-profiled-nmethods'.used"
jvm.memory.pools.CodeHeap-'profiled-nmethods'.committed"
jvm.memory.pools.CodeHeap-'profiled-nmethods'.init"
jvm.memory.pools.CodeHeap-'profiled-nmethods'.max"
jvm.memory.pools.CodeHeap-'profiled-nmethods'.usage"
jvm.memory.pools.CodeHeap-'profiled-nmethods'.used"
jvm.memory.pools.Compressed-Class-Space.committed
jvm.memory.pools.Compressed-Class-Space.init
jvm.memory.pools.Compressed-Class-Space.max
jvm.memory.pools.Compressed-Class-Space.usage
jvm.memory.pools.Compressed-Class-Space.used
jvm.memory.pools.G1-Eden-Space.committed
jvm.memory.pools.G1-Eden-Space.init
jvm.memory.pools.G1-Eden-Space.max
jvm.memory.pools.G1-Eden-Space.usage
jvm.memory.pools.G1-Eden-Space.used-after-gc
jvm.memory.pools.G1-Eden-Space.used
jvm.memory.pools.G1-Old-Gen.committed
jvm.memory.pools.G1-Old-Gen.init
jvm.memory.pools.G1-Old-Gen.max
jvm.memory.pools.G1-Old-Gen.usage
jvm.memory.pools.G1-Old-Gen.used-after-gc
jvm.memory.pools.G1-Old-Gen.used
jvm.memory.pools.G1-Survivor-Space.committed
jvm.memory.pools.G1-Survivor-Space.init
jvm.memory.pools.G1-Survivor-Space.max
jvm.memory.pools.G1-Survivor-Space.usage
jvm.memory.pools.G1-Survivor-Space.used-after-gc
jvm.memory.pools.G1-Survivor-Space.used
jvm.memory.pools.Metaspace.committed
jvm.memory.pools.Metaspace.init
jvm.memory.pools.Metaspace.max
jvm.memory.pools.Metaspace.usage
jvm.memory.pools.Metaspace.used
jvm.memory.total.committed
jvm.memory.total.init
jvm.memory.total.max
jvm.memory.total.used
jvm.threads.blocked.count
jvm.threads.count
jvm.threads.daemon.count
jvm.threads.deadlock.count
jvm.threads.deadlocks
jvm.threads.new.count
jvm.threads.peak.count
jvm.threads.runnable.count
jvm.threads.terminated.count
jvm.threads.timed_waiting.count
jvm.threads.total_started.count
jvm.threads.waiting.count
org.apache.hc.client5.http.io.HttpClientConnectionManager.PIXILAB_Blocks.available-connections
org.apache.hc.client5.http.io.HttpClientConnectionManager.PIXILAB_Blocks.leased-connections
org.apache.hc.client5.http.io.HttpClientConnectionManager.PIXILAB_Blocks.max-connections
org.apache.hc.client5.http.io.HttpClientConnectionManager.PIXILAB_Blocks.pending-connections
org.eclipse.jetty.server.HttpConnectionFactory.8080.connections
org.eclipse.jetty.util.thread.QueuedThreadPool.dw-admin.jobs
org.eclipse.jetty.util.thread.QueuedThreadPool.dw-admin.jobs-queue-utilization
org.eclipse.jetty.util.thread.QueuedThreadPool.dw-admin.size
org.eclipse.jetty.util.thread.QueuedThreadPool.dw-admin.utilization
org.eclipse.jetty.util.thread.QueuedThreadPool.dw-admin.utilization-max
org.eclipse.jetty.util.thread.QueuedThreadPool.dw.jobs
org.eclipse.jetty.util.thread.QueuedThreadPool.dw.jobs-queue-utilization
org.eclipse.jetty.util.thread.QueuedThreadPool.dw.size
org.eclipse.jetty.util.thread.QueuedThreadPool.dw.utilization
org.eclipse.jetty.util.thread.QueuedThreadPool.dw.utilization-max
pixi.cortex.backlog.now
pixi.cortex.backlog.peak
pixi.cortex.synapse
pixi.receptors
TimeBoundHealthCheck-pool.created
TimeBoundHealthCheck-pool.running
TimeBoundHealthCheck-pool.terminated