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