Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

It is useful for user to work with own metrics, not only with provided by Ignite. Current The current public metrics API doesn't expose any method to add or delete additional metrics.

...

Expand
titleCustom metrics within a computation


Code Block
languagejava
/** */
private static final class TestCustomMetricsComputeTask extends ComputeTaskAdapter<Void, Long> {

    /** */
    private static final class TestComputeJob extends ComputeJobAdapter {
        /** Ignite instance. */
        @IgniteInstanceResource
        private Ignite ignite;
        /** {@inheritDoc} */
        @Override public Long execute() throws IgniteException {
            long val = 0;
            // Some job limit.
            long limit = 300 +

    private static final class TestComputeJob extends ComputeJobAdapter {
        @IgniteInstanceResource
        private Ignite ignite;

        @Override public Long execute() throws IgniteException {
            long val = 0;

            // Some job limit.
            long limit = 300 + ThreadLocalRandom.current().nextLong(700);



           
 
 // Registers metric "custom.task.test.current"

            LongValueMetric metricCur = ignite.metrics().customRegistry("task.test").longMetric("current", null);


           
 
 // Registers metric "custom.task.test.total.sum"

            LongSumMetric metricTotal = ignite.metrics().customRegistry("task.test").longAdderMetric("total.sum", null);


           
 
 // Registers metric "custom.task.test.ticks"           

            LongSumMetric metricTicks = ignite.metrics().customRegistry("task.test").longAdderMetric("ticks", null);



            while (!isCancelled() && val < limit) {


                // Does some job.


                try {


                    U.sleep(ThreadLocalRandom.current().nextInt(50));


                }


                catch (IgniteInterruptedCheckedException ignored) {


                    //No op.


                }



                long increment = ThreadLocalRandom.current().nextLong(100);



                val += increment;



               
 
 metricTicks.increment()

            }



            metricCur.value(val);



            metricTotal.add(val);



            return isCancelled() ? 0 : val;


        }


    }


}


Further Steps

We already have implementations of more complex and useful metrics. We could also store custom metrics. Thus, the development stages might be:

  1. An API to expose internals read-only internal metrics was already suggested. Might be joined with the custom metrics. By the methods like "findRegistry" we can also return also read-only internal metrics.
  2. Extending the initial API with metrics like Histogram or HitRate.
  3. Introduce a permission for custom metric management.
  4. Storing registered custom metrics.
  5. Allowing to change settings of configurable custom metrics like histograms.

...

  1. IEP-35 Monitoring & Profiling
  2. New Metric System
  3. Ticket of a public metric API
  4. IEP-116 : Ignite 3 metric

Discussion Links

https://lists.apache.org/thread/9zs988jbw3jc6fzj6zhz0t5g8bl3lx5t

Tickets

Custom metric introductionIGNITE-21156

...