Goals

  • Allow routing measurements to statistics, Micrometer meters, or both as appropriate, to allow publishing each measurement to the appropriate places.
  • Minimize the intrusiveness of new and existing metrics instrumentation.
  • Minimize the amount of code that must know how to route measurements to stats and meters.
  • Maintain Geode performance.
  • Not preclude any options for deprecating and removing Geode’s statistics mechanism in the future. And take steps to make deprecating and removing the existing statistics mechanism easier.

Proposal

  • Continue to use Geode’s existing style of instrumentation class (e.g. CachePerfStats) to instrument code.
  • Enhance the instrumentation classes to create and register meters when appropriate, and to route each measurement to the appropriate stats and meters.
  • When we want to route a given measurement to both a statistic and a meter, use the "legacy meter" wrapper mechanism (described below).
  • Incrementally improve the instrumentation classes to focus more on reporting domain events (e.g. regionAdded()) and less on reporting measurements (e.g. incRegions()).

Legacy Meter Wrappers

To route a given measurement to both a Micrometer meter and a Geode statistic, do the following in the instrumentation class's constructor:

  • Create and register a normal Micrometer meter in the cache's meter registry.
  • Wrap the registered meter in a custom "legacy meter" that reads and writes the stat, and also writes to the registered meter.

In the instrumentation methods (e.g. endPut()):

  • Use the legacy meter to report measurements.

Diagrams

These diagrams show an example of how the wrapper mechanism works for "counter" style stats and meters. The first is a class diagram, showing how the parts relate in general. The second is a sequence diagram that shows in some detail how the parts interact to route a given measurement to both a meter and a stat.

Error rendering macro 'plantuml'

No useable executable name defined in graphviz.properties

Error rendering macro 'plantuml'

No useable executable name defined in graphviz.properties

  • No labels