| // Licensed to the Apache Software Foundation (ASF) under one or more |
| // contributor license agreements. See the NOTICE file distributed with |
| // this work for additional information regarding copyright ownership. |
| // The ASF licenses this file to You under the Apache License, Version 2.0 |
| // (the "License"); you may not use this file except in compliance with |
| // the License. You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| = Custom Metrics |
| |
| WARNING: This feature is experimental and may change in future releases. |
| |
| Ignite provides various internal link:monitoring-metrics/new-metrics.adoc[metrics]. However, these metrics might |
| not be enough. Users can design and publish their own custom metrics. Custom Metrics are based on |
| link:monitoring-metrics/new-metrics-system.adoc[Metric System]. |
| |
| [NOTE] |
| ==== |
| Custom Metrics are local and are bound only to the local node. |
| ==== |
| |
| == Custom metric creation. |
| |
| To register a custom metric, you need to add a new link:monitoring-metrics/new-metrics-system#registry[registry] first. |
| After that, metrics can be added to this registry. |
| |
| === Custom metric registry. |
| |
| You can create custom metric registries via the `IgniteMetrics` interface which is obtained by `Ignite.metrics()`. |
| |
| `IgniteMetric` interface has the following methods: |
| |
| * `MetricRegistry getOrCreate(String registryName)` provides a new or existing custom metric registry. |
| * `void remove(String registryName)` removes the entire custom metric registry. |
| |
| |
| === Custom metric creation. |
| |
| To register a new custom metric, use the `MetricRegistry` interface which is obtained by `IgniteMetrics.getOrCreate(...)`. |
| |
| `MetricRegistry` has several methods to add or remove metrics like: |
| |
| * `void register(String metricName, IntSupplier valueSupplier, @Nullable String description);` registers an integer-value metric. |
| * `void register(String metricName, DoubleSupplier valueSupplier, @Nullable String description);` registers a double-value metric. |
| * `void remove(String name);` removes a metric. |
| |
| |
| == Naming convention. |
| Names of the custom metrics (and its registries) are similar to the names of internal metrics. The name can have dot-separated |
| parts like 'process.status.suspended'. |
| |
| Prefix 'custom.' is always added to the custom registry name in `IgniteMetrics`. For instance, if the passed registry name is |
| 'process.status.suspended', it is automatically extended to 'custom.process.status.suspended'. |
| |
| |
| == Limitations |
| * It is impossible to affect the internal metrics. |
| * Custom metrics are registered on-demand and aren't persistent. After a node restarts, they have to be registered anew. |
| * Configuration of a custom metric isn't supported. |
| * The names must not be empty and cannot have spaces or empty dot-separated parts. |