Hi

I really appreciate this discussion. But I would like to get to a point where 
we create a proper future-proof (as much as possible) architecture which 
properly integrates with the current situation:

  * JMX is the system of choice for systems management
  * The Web Console is the respective system of choice
    for web based interactive tooling
  * Don't reinvent wheels

I would really like to highlight the last point: I would prefer to reuse 
existing functionality and libraries as much as possible instead of reinventing 
our own stuff using yet another channel.

Regards
Felix

Am 22.02.2013 um 23:59 schrieb Ian Boston:

> Hi,
> Whilst writing the MBeans in the event bundle I started thinking about
> monitoring inside Sling. IMHO there are not enough to really know what
> a instance under load is doing. Much though I like JMX it comes with
> implementation and runtime overhead which I don't much like.
> 
> Runtime:
> * Running with JMX enabled doesn't add any overhead, but once a client
> is connected there is some (some reports upto 3% of resources).
> * You have to remember to enable it, and most of the time JVMs are not
> enabled. By the time you really need it, its often too late.
> * JMX is not restful.
> 
> Implementation
> * MBeans are not that hard to implement with the OSGi Whiteboard, but
> they have to be implemented.
> 
> Alternatives.
> In Jackarabbit there is/was a statistics class [1], which IIUC uses
> counters and time series stored in a map. The service can then be
> queries to extract the values by wrapping in an MBean or Servlet.
> 
> I think the approach could be generalised and extended so that
> anything in the container could use the service to record metrics. The
> api might look something like
> 
> public interface Statistics {
> 
>      /**
>       * Increment a counter by 1
>       */
>      void increment(String counterName);
> 
>      /**
>       * Record a double value in a timeseries.
>       */
>      void record(String timeSeriesName, double value);
> 
>      /**
>       * Record a long value in a timeseries.
>       */
>      void record(String timeSeriesName, long value);
> 
> }
> 
> and (so that any reference can be optional on a service
> implementation, the final is a hint to hotspot to inline)
> 
> public final class StatisticsUtils {
> 
>  private StatisticsUtils() {
>  }
> 
>  public static void increment(Statistics statistics, String counterName) {
>     if ( statistics != null ) {
>         statistics.increment(counterName);
>     }
>  }
> 
> ... etc for the other methods ..
> }
> 
> 
> 
> 
> The service would need to deal with all the implementation details
> (including concurrency and speed). The service implementation would
> also come with a servlet endpoint (under /system/*) and/or single JMX
> MBean.
> 
> Anything that wanted to record stats would then bind to the service
> and use it. I think this would avoid the issues mentioned above with
> wide scale MBean usage.
> 
> WDYT?
> 
> (apologies for the noise if this already exists, and if so, please
> treat it as a question: where and how do we record stats?)
> 
> Ian
> 
> 
> 
> 
> 1 http://wiki.apache.org/jackrabbit/Statistics


--
Felix Meschberger | Principal Scientist | Adobe







Reply via email to