This is an automated email from the ASF dual-hosted git repository.

rpuch pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git


The following commit(s) were added to refs/heads/main by this push:
     new a338a2ec31 IGNITE-22188 Add metrics for debugging ItSqlLogicTest 
(#3720)
a338a2ec31 is described below

commit a338a2ec3196bbec6f67568502a7fd64db223a81
Author: Roman Puchkovskiy <[email protected]>
AuthorDate: Tue May 14 22:51:08 2024 +0400

    IGNITE-22188 Add metrics for debugging ItSqlLogicTest (#3720)
---
 modules/metastorage/build.gradle                   |  3 +
 .../impl/ItIdempotentCommandCacheTest.java         |  1 +
 .../impl/ItMetaStorageManagerImplTest.java         |  4 +-
 .../ItMetaStorageMultipleNodesAbstractTest.java    |  1 +
 .../metastorage/impl/ItMetaStorageWatchTest.java   |  1 +
 .../metastorage/impl/MetaStorageManagerImpl.java   | 18 ++++-
 .../metrics/MetaStorageMetricSource.java           | 77 ++++++++++++++++++
 .../metastorage/metrics/MetaStorageMetrics.java    | 29 +++++++
 .../metastorage/server/time/ClusterTimeImpl.java   |  8 +-
 .../MetaStorageDeployWatchesCorrectnessTest.java   |  2 +
 .../impl/MetaStorageManagerRecoveryTest.java       |  2 +
 .../impl/StandaloneMetaStorageManager.java         |  2 +
 .../metrics/exporters/ItOsMetricSourceTest.java    | 73 +++++++++++++++++
 .../internal/metrics/sources/JvmMetricSource.java  | 32 +++++++-
 .../internal/metrics/sources/OsMetricSource.java   | 92 ++++++++++++++++++++++
 .../metrics/sources/JvmMetricSourceTest.java       | 70 +++++++++++++++-
 .../metrics/sources/OsMetricSourceTest.java        | 79 +++++++++++++++++++
 .../MultiActorPlacementDriverTest.java             |  1 +
 .../PlacementDriverManagerTest.java                |  1 +
 .../ItDistributedConfigurationPropertiesTest.java  |  1 +
 .../ItDistributedConfigurationStorageTest.java     |  1 +
 .../runner/app/ItIgniteNodeRestartTest.java        |  5 +-
 .../org/apache/ignite/internal/app/IgniteImpl.java |  5 +-
 .../internal/sql/sqllogic/ItSqlLogicTest.java      | 12 ++-
 .../rebalance/ItRebalanceDistributedTest.java      |  6 +-
 25 files changed, 513 insertions(+), 13 deletions(-)

diff --git a/modules/metastorage/build.gradle b/modules/metastorage/build.gradle
index 6f3408384c..c6900a8721 100644
--- a/modules/metastorage/build.gradle
+++ b/modules/metastorage/build.gradle
@@ -34,6 +34,7 @@ dependencies {
     implementation project(':ignite-core')
     implementation project(':ignite-rocksdb-common')
     implementation project(':ignite-failure-handler')
+    implementation project(':ignite-metrics')
     implementation libs.jetbrains.annotations
     implementation libs.fastutil.core
 
@@ -44,6 +45,7 @@ dependencies {
     testImplementation testFixtures(project(':ignite-configuration'))
     testImplementation testFixtures(project(':ignite-replicator'))
     testImplementation testFixtures(project(':ignite-failure-handler'))
+    testImplementation testFixtures(project(':ignite-metrics'))
     testImplementation libs.mockito.junit
     testImplementation libs.hamcrest.core
 
@@ -78,6 +80,7 @@ dependencies {
     testFixturesImplementation project(':ignite-failure-handler')
     testFixturesImplementation testFixtures(project(':ignite-core'))
     testFixturesImplementation testFixtures(project(':ignite-failure-handler'))
+    testFixturesImplementation testFixtures(project(':ignite-metrics'))
     testFixturesImplementation libs.jetbrains.annotations
     testFixturesImplementation libs.mockito.core
 }
diff --git 
a/modules/metastorage/src/integrationTest/java/org/apache/ignite/internal/metastorage/impl/ItIdempotentCommandCacheTest.java
 
b/modules/metastorage/src/integrationTest/java/org/apache/ignite/internal/metastorage/impl/ItIdempotentCommandCacheTest.java
index 9233dface9..ce87c643dc 100644
--- 
a/modules/metastorage/src/integrationTest/java/org/apache/ignite/internal/metastorage/impl/ItIdempotentCommandCacheTest.java
+++ 
b/modules/metastorage/src/integrationTest/java/org/apache/ignite/internal/metastorage/impl/ItIdempotentCommandCacheTest.java
@@ -158,6 +158,7 @@ public class ItIdempotentCommandCacheTest extends 
IgniteAbstractTest {
                     storage,
                     clock,
                     topologyAwareRaftGroupServiceFactory,
+                    new NoOpMetricManager(),
                     metaStorageConfiguration
             );
         }
diff --git 
a/modules/metastorage/src/integrationTest/java/org/apache/ignite/internal/metastorage/impl/ItMetaStorageManagerImplTest.java
 
b/modules/metastorage/src/integrationTest/java/org/apache/ignite/internal/metastorage/impl/ItMetaStorageManagerImplTest.java
index 80838e5942..124ffacf79 100644
--- 
a/modules/metastorage/src/integrationTest/java/org/apache/ignite/internal/metastorage/impl/ItMetaStorageManagerImplTest.java
+++ 
b/modules/metastorage/src/integrationTest/java/org/apache/ignite/internal/metastorage/impl/ItMetaStorageManagerImplTest.java
@@ -140,6 +140,7 @@ public class ItMetaStorageManagerImplTest extends 
IgniteAbstractTest {
                 storage,
                 clock,
                 topologyAwareRaftGroupServiceFactory,
+                new NoOpMetricManager(),
                 metaStorageConfiguration
         );
 
@@ -225,7 +226,8 @@ public class ItMetaStorageManagerImplTest extends 
IgniteAbstractTest {
                 raftManager,
                 storage,
                 new HybridClockImpl(),
-                mock(TopologyAwareRaftGroupServiceFactory.class)
+                mock(TopologyAwareRaftGroupServiceFactory.class),
+                new NoOpMetricManager()
         );
 
         assertThat(metaStorageManager.stopAsync(), willCompleteSuccessfully());
diff --git 
a/modules/metastorage/src/integrationTest/java/org/apache/ignite/internal/metastorage/impl/ItMetaStorageMultipleNodesAbstractTest.java
 
b/modules/metastorage/src/integrationTest/java/org/apache/ignite/internal/metastorage/impl/ItMetaStorageMultipleNodesAbstractTest.java
index cf84819fe8..8d7fa1b987 100644
--- 
a/modules/metastorage/src/integrationTest/java/org/apache/ignite/internal/metastorage/impl/ItMetaStorageMultipleNodesAbstractTest.java
+++ 
b/modules/metastorage/src/integrationTest/java/org/apache/ignite/internal/metastorage/impl/ItMetaStorageMultipleNodesAbstractTest.java
@@ -194,6 +194,7 @@ public abstract class 
ItMetaStorageMultipleNodesAbstractTest extends IgniteAbstr
                     createStorage(name(), basePath),
                     clock,
                     topologyAwareRaftGroupServiceFactory,
+                    new NoOpMetricManager(),
                     metaStorageConfiguration
             );
 
diff --git 
a/modules/metastorage/src/integrationTest/java/org/apache/ignite/internal/metastorage/impl/ItMetaStorageWatchTest.java
 
b/modules/metastorage/src/integrationTest/java/org/apache/ignite/internal/metastorage/impl/ItMetaStorageWatchTest.java
index dca14a1fd7..a87ebe6e13 100644
--- 
a/modules/metastorage/src/integrationTest/java/org/apache/ignite/internal/metastorage/impl/ItMetaStorageWatchTest.java
+++ 
b/modules/metastorage/src/integrationTest/java/org/apache/ignite/internal/metastorage/impl/ItMetaStorageWatchTest.java
@@ -186,6 +186,7 @@ public class ItMetaStorageWatchTest extends 
IgniteAbstractTest {
                     new RocksDbKeyValueStorage(name(), 
basePath.resolve("storage"), new NoOpFailureProcessor(name())),
                     clock,
                     topologyAwareRaftGroupServiceFactory,
+                    new NoOpMetricManager(),
                     metaStorageConfiguration
             );
 
diff --git 
a/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/impl/MetaStorageManagerImpl.java
 
b/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/impl/MetaStorageManagerImpl.java
index a60f692e12..547be10afe 100644
--- 
a/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/impl/MetaStorageManagerImpl.java
+++ 
b/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/impl/MetaStorageManagerImpl.java
@@ -47,12 +47,14 @@ import org.apache.ignite.internal.metastorage.dsl.Condition;
 import org.apache.ignite.internal.metastorage.dsl.Iif;
 import org.apache.ignite.internal.metastorage.dsl.Operation;
 import org.apache.ignite.internal.metastorage.dsl.StatementResult;
+import org.apache.ignite.internal.metastorage.metrics.MetaStorageMetricSource;
 import org.apache.ignite.internal.metastorage.server.KeyValueStorage;
 import org.apache.ignite.internal.metastorage.server.OnRevisionAppliedCallback;
 import org.apache.ignite.internal.metastorage.server.raft.MetaStorageListener;
 import org.apache.ignite.internal.metastorage.server.raft.MetastorageGroupId;
 import org.apache.ignite.internal.metastorage.server.time.ClusterTime;
 import org.apache.ignite.internal.metastorage.server.time.ClusterTimeImpl;
+import org.apache.ignite.internal.metrics.MetricManager;
 import org.apache.ignite.internal.network.ClusterService;
 import org.apache.ignite.internal.raft.Peer;
 import org.apache.ignite.internal.raft.PeersAndLearners;
@@ -119,6 +121,10 @@ public class MetaStorageManagerImpl implements 
MetaStorageManager {
 
     private final TopologyAwareRaftGroupServiceFactory 
topologyAwareRaftGroupServiceFactory;
 
+    private final MetricManager metricManager;
+
+    private final MetaStorageMetricSource metaStorageMetricSource;
+
     private volatile long appliedRevision = 0;
 
     private volatile MetaStorageConfiguration metaStorageConfiguration;
@@ -132,6 +138,7 @@ public class MetaStorageManagerImpl implements 
MetaStorageManager {
      * @param raftMgr Raft manager.
      * @param storage Storage. This component owns this resource and will 
manage its lifecycle.
      * @param clock A hybrid logical clock.
+     * @param metricManager Metric manager.
      */
     public MetaStorageManagerImpl(
             ClusterService clusterService,
@@ -140,7 +147,8 @@ public class MetaStorageManagerImpl implements 
MetaStorageManager {
             RaftManager raftMgr,
             KeyValueStorage storage,
             HybridClock clock,
-            TopologyAwareRaftGroupServiceFactory 
topologyAwareRaftGroupServiceFactory
+            TopologyAwareRaftGroupServiceFactory 
topologyAwareRaftGroupServiceFactory,
+            MetricManager metricManager
     ) {
         this.clusterService = clusterService;
         this.raftMgr = raftMgr;
@@ -148,7 +156,9 @@ public class MetaStorageManagerImpl implements 
MetaStorageManager {
         this.logicalTopologyService = logicalTopologyService;
         this.storage = storage;
         this.clusterTime = new ClusterTimeImpl(clusterService.nodeName(), 
busyLock, clock);
+        metaStorageMetricSource = new MetaStorageMetricSource(clusterTime);
         this.topologyAwareRaftGroupServiceFactory = 
topologyAwareRaftGroupServiceFactory;
+        this.metricManager = metricManager;
     }
 
     /**
@@ -163,9 +173,10 @@ public class MetaStorageManagerImpl implements 
MetaStorageManager {
             KeyValueStorage storage,
             HybridClock clock,
             TopologyAwareRaftGroupServiceFactory 
topologyAwareRaftGroupServiceFactory,
+            MetricManager metricManager,
             MetaStorageConfiguration configuration
     ) {
-        this(clusterService, cmgMgr, logicalTopologyService, raftMgr, storage, 
clock, topologyAwareRaftGroupServiceFactory);
+        this(clusterService, cmgMgr, logicalTopologyService, raftMgr, storage, 
clock, topologyAwareRaftGroupServiceFactory, metricManager);
 
         configure(configuration);
     }
@@ -371,6 +382,8 @@ public class MetaStorageManagerImpl implements 
MetaStorageManager {
                     }
                 });
 
+        metricManager.registerSource(metaStorageMetricSource);
+
         return nullCompletedFuture();
     }
 
@@ -388,6 +401,7 @@ public class MetaStorageManagerImpl implements 
MetaStorageManager {
 
         try {
             IgniteUtils.closeAllManually(
+                    () -> 
metricManager.unregisterSource(metaStorageMetricSource),
                     clusterTime,
                     () -> cancelOrConsume(metaStorageSvcFut, 
MetaStorageServiceImpl::close),
                     () -> raftMgr.stopRaftNodes(MetastorageGroupId.INSTANCE),
diff --git 
a/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/metrics/MetaStorageMetricSource.java
 
b/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/metrics/MetaStorageMetricSource.java
new file mode 100644
index 0000000000..bc12ba3eb2
--- /dev/null
+++ 
b/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/metrics/MetaStorageMetricSource.java
@@ -0,0 +1,77 @@
+/*
+ * 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.
+ */
+
+package org.apache.ignite.internal.metastorage.metrics;
+
+import java.util.HashMap;
+import org.apache.ignite.internal.metrics.LongGauge;
+import org.apache.ignite.internal.metrics.Metric;
+import org.apache.ignite.internal.metrics.MetricSet;
+import org.apache.ignite.internal.metrics.MetricSource;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Metric source which provides MetaStorage-related metrics.
+ */
+public class MetaStorageMetricSource implements MetricSource {
+    private static final String SOURCE_NAME = "metastorage";
+
+    private final MetaStorageMetrics metaStorageMetrics;
+
+    /** Enablement status. Accessed from different threads under 
synchronization on this object. */
+    private boolean enabled;
+
+    /**
+     * Constructor.
+     */
+    public MetaStorageMetricSource(MetaStorageMetrics metaStorageMetrics) {
+        this.metaStorageMetrics = metaStorageMetrics;
+    }
+
+    @Override
+    public String name() {
+        return SOURCE_NAME;
+    }
+
+    @Override
+    public synchronized @Nullable MetricSet enable() {
+        var metrics = new HashMap<String, Metric>();
+
+        metrics.put(
+                "SafeTimeLag",
+                new LongGauge(
+                        "SafeTimeLag",
+                        "Number of milliseconds the local MetaStorage SafeTime 
lags behind the local logical clock.",
+                        metaStorageMetrics::safeTimeLag
+                )
+        );
+
+        enabled = true;
+
+        return new MetricSet(SOURCE_NAME, metrics);
+    }
+
+    @Override
+    public synchronized void disable() {
+        enabled = false;
+    }
+
+    @Override
+    public synchronized boolean enabled() {
+        return enabled;
+    }
+}
diff --git 
a/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/metrics/MetaStorageMetrics.java
 
b/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/metrics/MetaStorageMetrics.java
new file mode 100644
index 0000000000..ec7dc420c6
--- /dev/null
+++ 
b/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/metrics/MetaStorageMetrics.java
@@ -0,0 +1,29 @@
+/*
+ * 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.
+ */
+
+package org.apache.ignite.internal.metastorage.metrics;
+
+/**
+ * Metrics related to the MetaStorage.
+ */
+@SuppressWarnings("InterfaceMayBeAnnotatedFunctional")
+public interface MetaStorageMetrics {
+    /**
+     * Returns number of milliseconds between the current time on the local 
logical clock and the local view of the MetaStorage SafeTime.
+     */
+    long safeTimeLag();
+}
diff --git 
a/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/server/time/ClusterTimeImpl.java
 
b/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/server/time/ClusterTimeImpl.java
index 0ce542a2a0..af74dcde63 100644
--- 
a/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/server/time/ClusterTimeImpl.java
+++ 
b/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/server/time/ClusterTimeImpl.java
@@ -32,6 +32,7 @@ import org.apache.ignite.internal.lang.NodeStoppingException;
 import org.apache.ignite.internal.logger.IgniteLogger;
 import org.apache.ignite.internal.logger.Loggers;
 import 
org.apache.ignite.internal.metastorage.configuration.MetaStorageConfiguration;
+import org.apache.ignite.internal.metastorage.metrics.MetaStorageMetrics;
 import org.apache.ignite.internal.thread.NamedThreadFactory;
 import org.apache.ignite.internal.util.IgniteSpinBusyLock;
 import org.apache.ignite.internal.util.IgniteUtils;
@@ -42,7 +43,7 @@ import org.jetbrains.annotations.TestOnly;
 /**
  * Cluster time implementation with additional methods to adjust time and 
update safe time.
  */
-public class ClusterTimeImpl implements ClusterTime, ManuallyCloseable {
+public class ClusterTimeImpl implements ClusterTime, MetaStorageMetrics, 
ManuallyCloseable {
     private static final IgniteLogger LOG = 
Loggers.forClass(ClusterTimeImpl.class);
 
     private final String nodeName;
@@ -63,6 +64,11 @@ public class ClusterTimeImpl implements ClusterTime, 
ManuallyCloseable {
      */
     private @Nullable SafeTimeScheduler safeTimeScheduler;
 
+    @Override
+    public long safeTimeLag() {
+        return clock.now().getPhysical() - safeTime.current().getPhysical();
+    }
+
     /** Action that issues a time sync command. */
     @FunctionalInterface
     public interface SyncTimeAction {
diff --git 
a/modules/metastorage/src/test/java/org/apache/ignite/internal/metastorage/impl/MetaStorageDeployWatchesCorrectnessTest.java
 
b/modules/metastorage/src/test/java/org/apache/ignite/internal/metastorage/impl/MetaStorageDeployWatchesCorrectnessTest.java
index 2d18f0c816..31881ffa06 100644
--- 
a/modules/metastorage/src/test/java/org/apache/ignite/internal/metastorage/impl/MetaStorageDeployWatchesCorrectnessTest.java
+++ 
b/modules/metastorage/src/test/java/org/apache/ignite/internal/metastorage/impl/MetaStorageDeployWatchesCorrectnessTest.java
@@ -37,6 +37,7 @@ import 
org.apache.ignite.internal.metastorage.MetaStorageManager;
 import 
org.apache.ignite.internal.metastorage.command.GetCurrentRevisionCommand;
 import 
org.apache.ignite.internal.metastorage.configuration.MetaStorageConfiguration;
 import 
org.apache.ignite.internal.metastorage.server.SimpleInMemoryKeyValueStorage;
+import org.apache.ignite.internal.metrics.NoOpMetricManager;
 import org.apache.ignite.internal.network.ClusterService;
 import org.apache.ignite.internal.raft.RaftManager;
 import org.apache.ignite.internal.raft.client.TopologyAwareRaftGroupService;
@@ -84,6 +85,7 @@ public class MetaStorageDeployWatchesCorrectnessTest extends 
IgniteAbstractTest
                         new SimpleInMemoryKeyValueStorage(mcNodeName),
                         clock,
                         mock(TopologyAwareRaftGroupServiceFactory.class),
+                        new NoOpMetricManager(),
                         metaStorageConfiguration
                 ),
                 StandaloneMetaStorageManager.create()
diff --git 
a/modules/metastorage/src/test/java/org/apache/ignite/internal/metastorage/impl/MetaStorageManagerRecoveryTest.java
 
b/modules/metastorage/src/test/java/org/apache/ignite/internal/metastorage/impl/MetaStorageManagerRecoveryTest.java
index 3e71355315..f4b7c0c19a 100644
--- 
a/modules/metastorage/src/test/java/org/apache/ignite/internal/metastorage/impl/MetaStorageManagerRecoveryTest.java
+++ 
b/modules/metastorage/src/test/java/org/apache/ignite/internal/metastorage/impl/MetaStorageManagerRecoveryTest.java
@@ -41,6 +41,7 @@ import 
org.apache.ignite.internal.metastorage.command.GetCurrentRevisionCommand;
 import 
org.apache.ignite.internal.metastorage.configuration.MetaStorageConfiguration;
 import org.apache.ignite.internal.metastorage.server.KeyValueStorage;
 import 
org.apache.ignite.internal.metastorage.server.SimpleInMemoryKeyValueStorage;
+import org.apache.ignite.internal.metrics.NoOpMetricManager;
 import org.apache.ignite.internal.network.ClusterService;
 import org.apache.ignite.internal.network.MessagingService;
 import 
org.apache.ignite.internal.network.serialization.MessageSerializationRegistry;
@@ -86,6 +87,7 @@ public class MetaStorageManagerRecoveryTest extends 
BaseIgniteAbstractTest {
                 kvs,
                 clock,
                 mock(TopologyAwareRaftGroupServiceFactory.class),
+                new NoOpMetricManager(),
                 metaStorageConfiguration
         );
     }
diff --git 
a/modules/metastorage/src/testFixtures/java/org/apache/ignite/internal/metastorage/impl/StandaloneMetaStorageManager.java
 
b/modules/metastorage/src/testFixtures/java/org/apache/ignite/internal/metastorage/impl/StandaloneMetaStorageManager.java
index aaa3cf7099..c9b02c071a 100644
--- 
a/modules/metastorage/src/testFixtures/java/org/apache/ignite/internal/metastorage/impl/StandaloneMetaStorageManager.java
+++ 
b/modules/metastorage/src/testFixtures/java/org/apache/ignite/internal/metastorage/impl/StandaloneMetaStorageManager.java
@@ -37,6 +37,7 @@ import org.apache.ignite.internal.lang.NodeStoppingException;
 import 
org.apache.ignite.internal.metastorage.configuration.MetaStorageConfiguration;
 import org.apache.ignite.internal.metastorage.server.KeyValueStorage;
 import 
org.apache.ignite.internal.metastorage.server.SimpleInMemoryKeyValueStorage;
+import org.apache.ignite.internal.metrics.NoOpMetricManager;
 import org.apache.ignite.internal.network.ClusterNodeImpl;
 import org.apache.ignite.internal.network.ClusterService;
 import org.apache.ignite.internal.raft.Command;
@@ -135,6 +136,7 @@ public class StandaloneMetaStorageManager extends 
MetaStorageManagerImpl {
                 storage,
                 clock,
                 raftServiceFactory,
+                new NoOpMetricManager(),
                 configuration
         );
     }
diff --git 
a/modules/metrics/src/integrationTest/java/org/apache/ignite/internal/metrics/exporters/ItOsMetricSourceTest.java
 
b/modules/metrics/src/integrationTest/java/org/apache/ignite/internal/metrics/exporters/ItOsMetricSourceTest.java
new file mode 100644
index 0000000000..c3627cd94d
--- /dev/null
+++ 
b/modules/metrics/src/integrationTest/java/org/apache/ignite/internal/metrics/exporters/ItOsMetricSourceTest.java
@@ -0,0 +1,73 @@
+/*
+ * 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.
+ */
+
+package org.apache.ignite.internal.metrics.exporters;
+
+import static 
org.apache.ignite.internal.testframework.matchers.CompletableFutureMatcher.willCompleteSuccessfully;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.greaterThan;
+
+import java.util.HashMap;
+import java.util.Map;
+import 
org.apache.ignite.internal.configuration.testframework.ConfigurationExtension;
+import 
org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
+import org.apache.ignite.internal.metrics.MetricManager;
+import org.apache.ignite.internal.metrics.MetricManagerImpl;
+import org.apache.ignite.internal.metrics.configuration.MetricConfiguration;
+import org.apache.ignite.internal.metrics.sources.OsMetricSource;
+import org.apache.ignite.internal.testframework.BaseIgniteAbstractTest;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+
+@ExtendWith(ConfigurationExtension.class)
+class ItOsMetricSourceTest extends BaseIgniteAbstractTest {
+    @InjectConfiguration(
+            value = "mock.exporters = {"
+                    + "simple = {exporterName = simple}"
+                    + "}",
+            polymorphicExtensions = {
+                    TestSimpleExporterConfigurationSchema.class
+            }
+    )
+    private MetricConfiguration simpleConfiguration;
+
+    @Test
+    void testOsMetrics() {
+        MetricManager metricManager = new MetricManagerImpl();
+        metricManager.configure(simpleConfiguration);
+
+        Map<String, MetricExporter> exporters = new HashMap<>();
+        TestSimpleExporter simpleExporter = new TestSimpleExporter();
+        exporters.put(simpleExporter.name(), simpleExporter);
+
+        metricManager.registerSource(new OsMetricSource());
+
+        metricManager.start(exporters);
+
+        metricManager.enable("os");
+
+        Map<String, String> osMetrics = simpleExporter.pull().get("os");
+
+        assertPositiveDoubleValue(osMetrics.get("LoadAverage"));
+
+        assertThat(metricManager.stopAsync(), willCompleteSuccessfully());
+    }
+
+    private static void assertPositiveDoubleValue(String metric) {
+        assertThat(Double.parseDouble(metric), greaterThan(0.0));
+    }
+}
diff --git 
a/modules/metrics/src/main/java/org/apache/ignite/internal/metrics/sources/JvmMetricSource.java
 
b/modules/metrics/src/main/java/org/apache/ignite/internal/metrics/sources/JvmMetricSource.java
index 0ffb02aa47..01e7abf8b9 100644
--- 
a/modules/metrics/src/main/java/org/apache/ignite/internal/metrics/sources/JvmMetricSource.java
+++ 
b/modules/metrics/src/main/java/org/apache/ignite/internal/metrics/sources/JvmMetricSource.java
@@ -17,10 +17,12 @@
 
 package org.apache.ignite.internal.metrics.sources;
 
+import java.lang.management.GarbageCollectorMXBean;
 import java.lang.management.ManagementFactory;
 import java.lang.management.MemoryMXBean;
 import java.lang.management.MemoryUsage;
 import java.util.HashMap;
+import java.util.List;
 import java.util.function.Supplier;
 import org.apache.ignite.internal.metrics.LongGauge;
 import org.apache.ignite.internal.metrics.Metric;
@@ -42,6 +44,8 @@ public class JvmMetricSource implements MetricSource {
     /** JVM standard MXBean to provide information about memory usage. */
     private final MemoryMXBean memoryMxBean;
 
+    private final List<GarbageCollectorMXBean> gcMxBeans;
+
     /** True, if source is enabled, false otherwise. */
     private boolean enabled;
 
@@ -49,9 +53,11 @@ public class JvmMetricSource implements MetricSource {
      * Constructor.
      *
      * @param memoryMxBean MXBean implementation to receive memory info.
+     * @param gcMxBeans MXBean implementation to receive GC info.
      */
-    JvmMetricSource(MemoryMXBean memoryMxBean) {
+    JvmMetricSource(MemoryMXBean memoryMxBean, List<GarbageCollectorMXBean> 
gcMxBeans) {
         this.memoryMxBean = memoryMxBean;
+        this.gcMxBeans = List.copyOf(gcMxBeans);
     }
 
     /**
@@ -59,6 +65,7 @@ public class JvmMetricSource implements MetricSource {
      */
     public JvmMetricSource() {
         memoryMxBean = ManagementFactory.getMemoryMXBean();
+        gcMxBeans = ManagementFactory.getGarbageCollectorMXBeans();
     }
 
     /** {@inheritDoc} */
@@ -117,11 +124,34 @@ public class JvmMetricSource implements MetricSource {
                         () -> nonHeapMemoryUsage.get().getMax()
                 ));
 
+        metrics.put(
+                "gc.CollectionTime",
+                new LongGauge(
+                        "gc.CollectionTime",
+                        "Approximate total time spent on garbage collection in 
milliseconds, summed across all collectors.",
+                        () -> totalCollectionTime()
+                )
+        );
+
         enabled = true;
 
         return new MetricSet(SOURCE_NAME, metrics);
     }
 
+    private long totalCollectionTime() {
+        long total = 0;
+
+        for (GarbageCollectorMXBean gcMxBean : gcMxBeans) {
+            long time = gcMxBean.getCollectionTime();
+
+            if (time > 0) {
+                total += time;
+            }
+        }
+
+        return total;
+    }
+
     /** {@inheritDoc} */
     @Override
     public synchronized void disable() {
diff --git 
a/modules/metrics/src/main/java/org/apache/ignite/internal/metrics/sources/OsMetricSource.java
 
b/modules/metrics/src/main/java/org/apache/ignite/internal/metrics/sources/OsMetricSource.java
new file mode 100644
index 0000000000..d8cd252141
--- /dev/null
+++ 
b/modules/metrics/src/main/java/org/apache/ignite/internal/metrics/sources/OsMetricSource.java
@@ -0,0 +1,92 @@
+/*
+ * 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.
+ */
+
+package org.apache.ignite.internal.metrics.sources;
+
+import java.lang.management.ManagementFactory;
+import java.lang.management.OperatingSystemMXBean;
+import java.util.HashMap;
+import org.apache.ignite.internal.metrics.DoubleGauge;
+import org.apache.ignite.internal.metrics.Metric;
+import org.apache.ignite.internal.metrics.MetricSet;
+import org.apache.ignite.internal.metrics.MetricSource;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Metric source which provides OS metrics like Load Average.
+ */
+public class OsMetricSource implements MetricSource {
+    private static final String SOURCE_NAME = "os";
+
+    private final OperatingSystemMXBean operatingSystemMxBean;
+
+    /** Enablement status. Accessed from different threads under 
synchronization on this object. */
+    private boolean enabled;
+
+    /**
+     * Constructor.
+     *
+     * @param operatingSystemMxBean MXBean implementation to receive OS info.
+     */
+    OsMetricSource(OperatingSystemMXBean operatingSystemMxBean) {
+        this.operatingSystemMxBean = operatingSystemMxBean;
+    }
+
+    /**
+     * Constructs new metric source with standard MemoryMXBean as metric 
provider.
+     */
+    public OsMetricSource() {
+        operatingSystemMxBean = ManagementFactory.getOperatingSystemMXBean();
+    }
+
+    @Override
+    public String name() {
+        return SOURCE_NAME;
+    }
+
+    @Override
+    public synchronized @Nullable MetricSet enable() {
+        var metrics = new HashMap<String, Metric>();
+
+        metrics.put(
+                "LoadAverage",
+                new DoubleGauge(
+                        "LoadAverage",
+                        "System load average for the last minute. System load 
average is the sum of the number of runnable entities "
+                                + "queued to the available processors and the 
number of runnable entities running on the available "
+                                + "processors averaged over a period of time. 
The way in which the load average is calculated depends on "
+                                + "the operating system. "
+                                + "If the load average is not available, a 
negative value is returned.",
+                        operatingSystemMxBean::getSystemLoadAverage
+                )
+        );
+
+        enabled = true;
+
+        return new MetricSet(SOURCE_NAME, metrics);
+    }
+
+    @Override
+    public synchronized void disable() {
+        enabled = false;
+    }
+
+    @Override
+    public synchronized boolean enabled() {
+        return enabled;
+    }
+}
diff --git 
a/modules/metrics/src/test/java/org/apache/ignite/internal/metrics/sources/JvmMetricSourceTest.java
 
b/modules/metrics/src/test/java/org/apache/ignite/internal/metrics/sources/JvmMetricSourceTest.java
index 814bcd3964..071c7fc703 100644
--- 
a/modules/metrics/src/test/java/org/apache/ignite/internal/metrics/sources/JvmMetricSourceTest.java
+++ 
b/modules/metrics/src/test/java/org/apache/ignite/internal/metrics/sources/JvmMetricSourceTest.java
@@ -21,8 +21,10 @@ import static java.util.concurrent.TimeUnit.SECONDS;
 import static org.awaitility.Awaitility.await;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
+import java.lang.management.GarbageCollectorMXBean;
 import java.lang.management.MemoryMXBean;
 import java.lang.management.MemoryUsage;
+import java.util.List;
 import javax.management.ObjectName;
 import org.apache.ignite.internal.metrics.LongMetric;
 import org.junit.jupiter.api.Test;
@@ -30,10 +32,11 @@ import org.junit.jupiter.api.Test;
 /** Tests for jvm system metrics. */
 public class JvmMetricSourceTest {
     @Test
-    void testMemoryMetric() {
+    void testMemoryMetrics() {
         var memoryBean = new MemoryBean(5, 15, 20, 90,
                 100, 115, 120, 200);
-        var metricSource = new JvmMetricSource(memoryBean);
+        var gcBean = new GarbageCollectorBean(10, 100);
+        var metricSource = new JvmMetricSource(memoryBean, List.of(gcBean));
 
         var metricSet = metricSource.enable();
 
@@ -72,6 +75,24 @@ public class JvmMetricSourceTest {
         assertEquals(memoryBean.nonHeapMax, 
metricSet.<LongMetric>get("memory.non-heap.Max").value());
     }
 
+    @Test
+    void testGcMetrics() {
+        var memoryBean = new MemoryBean(5, 15, 20, 90,
+                100, 115, 120, 200);
+        var gcBean1 = new GarbageCollectorBean(10, 100);
+        var gcBean2 = new GarbageCollectorBean(20, 200);
+        var metricSource = new JvmMetricSource(memoryBean, List.of(gcBean1, 
gcBean2));
+
+        var metricSet = metricSource.enable();
+
+        assertEquals(300, 
metricSet.<LongMetric>get("gc.CollectionTime").value());
+
+        gcBean1.changeCollectionMetrics(1, 10);
+        gcBean2.changeCollectionMetrics(1, 15);
+
+        assertEquals(325, 
metricSet.<LongMetric>get("gc.CollectionTime").value());
+    }
+
     /**
      * Test implementation of {@link java.lang.management.MemoryMXBean},
      * which open for mutations in scope of the current test.
@@ -136,4 +157,49 @@ public class JvmMetricSourceTest {
             throw new UnsupportedOperationException("Not supported in test 
implementation");
         }
     }
+
+    private static class GarbageCollectorBean implements 
GarbageCollectorMXBean {
+        private long collectionCount;
+        private long collectionTime;
+
+        private GarbageCollectorBean(long collectionCount, long 
collectionTime) {
+            this.collectionCount = collectionCount;
+            this.collectionTime = collectionTime;
+        }
+
+        @Override
+        public long getCollectionCount() {
+            return collectionCount;
+        }
+
+        @Override
+        public long getCollectionTime() {
+            return collectionTime;
+        }
+
+        @Override
+        public String getName() {
+            return "Fictional Collector";
+        }
+
+        @Override
+        public boolean isValid() {
+            return true;
+        }
+
+        @Override
+        public String[] getMemoryPoolNames() {
+            throw new UnsupportedOperationException();
+        }
+
+        @Override
+        public ObjectName getObjectName() {
+            throw new UnsupportedOperationException();
+        }
+
+        private void changeCollectionMetrics(int countDelta, int timeDelta) {
+            collectionCount += countDelta;
+            collectionTime += timeDelta;
+        }
+    }
 }
diff --git 
a/modules/metrics/src/test/java/org/apache/ignite/internal/metrics/sources/OsMetricSourceTest.java
 
b/modules/metrics/src/test/java/org/apache/ignite/internal/metrics/sources/OsMetricSourceTest.java
new file mode 100644
index 0000000000..167812d1ff
--- /dev/null
+++ 
b/modules/metrics/src/test/java/org/apache/ignite/internal/metrics/sources/OsMetricSourceTest.java
@@ -0,0 +1,79 @@
+/*
+ * 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.
+ */
+
+package org.apache.ignite.internal.metrics.sources;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import java.lang.management.OperatingSystemMXBean;
+import javax.management.ObjectName;
+import org.apache.ignite.internal.metrics.DoubleMetric;
+import org.junit.jupiter.api.Test;
+
+class OsMetricSourceTest {
+    @Test
+    void testOsMetrics() {
+        var osBean = new OperatingSystemBean(1.23);
+        var metricSource = new OsMetricSource(osBean);
+
+        var metricSet = metricSource.enable();
+
+        assertEquals(1.23, metricSet.<DoubleMetric>get("LoadAverage").value());
+
+        osBean.loadAverage = 2.34;
+
+        assertEquals(2.34, metricSet.<DoubleMetric>get("LoadAverage").value());
+    }
+
+    private static class OperatingSystemBean implements OperatingSystemMXBean {
+        private double loadAverage;
+
+        private OperatingSystemBean(double loadAverage) {
+            this.loadAverage = loadAverage;
+        }
+
+        @Override
+        public String getName() {
+            throw new UnsupportedOperationException();
+        }
+
+        @Override
+        public String getArch() {
+            throw new UnsupportedOperationException();
+        }
+
+        @Override
+        public String getVersion() {
+            throw new UnsupportedOperationException();
+        }
+
+        @Override
+        public int getAvailableProcessors() {
+            throw new UnsupportedOperationException();
+        }
+
+        @Override
+        public double getSystemLoadAverage() {
+            return loadAverage;
+        }
+
+        @Override
+        public ObjectName getObjectName() {
+            throw new UnsupportedOperationException();
+        }
+    }
+}
diff --git 
a/modules/placement-driver/src/integrationTest/java/org/apache/ignite/internal/placementdriver/MultiActorPlacementDriverTest.java
 
b/modules/placement-driver/src/integrationTest/java/org/apache/ignite/internal/placementdriver/MultiActorPlacementDriverTest.java
index fe784efb88..77a4e4b006 100644
--- 
a/modules/placement-driver/src/integrationTest/java/org/apache/ignite/internal/placementdriver/MultiActorPlacementDriverTest.java
+++ 
b/modules/placement-driver/src/integrationTest/java/org/apache/ignite/internal/placementdriver/MultiActorPlacementDriverTest.java
@@ -261,6 +261,7 @@ public class MultiActorPlacementDriverTest extends 
BasePlacementDriverTest {
                     storage,
                     nodeClock,
                     topologyAwareRaftGroupServiceFactory,
+                    new NoOpMetricManager(),
                     metaStorageConfiguration
             );
 
diff --git 
a/modules/placement-driver/src/integrationTest/java/org/apache/ignite/internal/placementdriver/PlacementDriverManagerTest.java
 
b/modules/placement-driver/src/integrationTest/java/org/apache/ignite/internal/placementdriver/PlacementDriverManagerTest.java
index 4171b9f9ac..f3b4b904a2 100644
--- 
a/modules/placement-driver/src/integrationTest/java/org/apache/ignite/internal/placementdriver/PlacementDriverManagerTest.java
+++ 
b/modules/placement-driver/src/integrationTest/java/org/apache/ignite/internal/placementdriver/PlacementDriverManagerTest.java
@@ -198,6 +198,7 @@ public class PlacementDriverManagerTest extends 
BasePlacementDriverTest {
                 storage,
                 nodeClock,
                 topologyAwareRaftGroupServiceFactory,
+                new NoOpMetricManager(),
                 metaStorageConfiguration
         );
 
diff --git 
a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/configuration/ItDistributedConfigurationPropertiesTest.java
 
b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/configuration/ItDistributedConfigurationPropertiesTest.java
index a8c311b84e..4ef7ae492c 100644
--- 
a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/configuration/ItDistributedConfigurationPropertiesTest.java
+++ 
b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/configuration/ItDistributedConfigurationPropertiesTest.java
@@ -201,6 +201,7 @@ public class ItDistributedConfigurationPropertiesTest 
extends BaseIgniteAbstract
                     new SimpleInMemoryKeyValueStorage(name()),
                     clock,
                     topologyAwareRaftGroupServiceFactory,
+                    new NoOpMetricManager(),
                     metaStorageConfiguration
             );
 
diff --git 
a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/configuration/storage/ItDistributedConfigurationStorageTest.java
 
b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/configuration/storage/ItDistributedConfigurationStorageTest.java
index ce8d0f5dd8..17cf8b3f03 100644
--- 
a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/configuration/storage/ItDistributedConfigurationStorageTest.java
+++ 
b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/configuration/storage/ItDistributedConfigurationStorageTest.java
@@ -173,6 +173,7 @@ public class ItDistributedConfigurationStorageTest extends 
BaseIgniteAbstractTes
                     new SimpleInMemoryKeyValueStorage(name()),
                     clock,
                     topologyAwareRaftGroupServiceFactory,
+                    new NoOpMetricManager(),
                     metaStorageConfiguration
             );
 
diff --git 
a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ItIgniteNodeRestartTest.java
 
b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ItIgniteNodeRestartTest.java
index 0c0ead5bf1..27ee1b97d5 100644
--- 
a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ItIgniteNodeRestartTest.java
+++ 
b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ItIgniteNodeRestartTest.java
@@ -394,6 +394,8 @@ public class ItIgniteNodeRestartTest extends 
BaseIgniteRestartTest {
 
         var logicalTopologyService = new 
LogicalTopologyServiceImpl(logicalTopology, cmgManager);
 
+        var metricManager = new MetricManagerImpl();
+
         var topologyAwareRaftGroupServiceFactory = new 
TopologyAwareRaftGroupServiceFactory(
                 clusterSvc,
                 logicalTopologyService,
@@ -413,6 +415,7 @@ public class ItIgniteNodeRestartTest extends 
BaseIgniteRestartTest {
                 metaStorage,
                 hybridClock,
                 topologyAwareRaftGroupServiceFactory,
+                metricManager,
                 metaStorageConfiguration
         ) {
             @Override
@@ -629,8 +632,6 @@ public class ItIgniteNodeRestartTest extends 
BaseIgniteRestartTest {
                 lowWatermark
         );
 
-        var metricManager = new MetricManagerImpl();
-
         SqlQueryProcessor qryEngine = new SqlQueryProcessor(
                 registry,
                 clusterSvc,
diff --git 
a/modules/runner/src/main/java/org/apache/ignite/internal/app/IgniteImpl.java 
b/modules/runner/src/main/java/org/apache/ignite/internal/app/IgniteImpl.java
index 76db87e606..ea4ecdea58 100644
--- 
a/modules/runner/src/main/java/org/apache/ignite/internal/app/IgniteImpl.java
+++ 
b/modules/runner/src/main/java/org/apache/ignite/internal/app/IgniteImpl.java
@@ -136,6 +136,7 @@ import org.apache.ignite.internal.metrics.MetricManager;
 import org.apache.ignite.internal.metrics.MetricManagerImpl;
 import org.apache.ignite.internal.metrics.configuration.MetricConfiguration;
 import org.apache.ignite.internal.metrics.sources.JvmMetricSource;
+import org.apache.ignite.internal.metrics.sources.OsMetricSource;
 import org.apache.ignite.internal.network.ChannelType;
 import org.apache.ignite.internal.network.ClusterService;
 import org.apache.ignite.internal.network.DefaultMessagingService;
@@ -568,7 +569,8 @@ public class IgniteImpl implements Ignite {
                 raftMgr,
                 new RocksDbKeyValueStorage(name, 
workDir.resolve(METASTORAGE_DB_PATH), failureProcessor),
                 clock,
-                topologyAwareRaftGroupServiceFactory
+                topologyAwareRaftGroupServiceFactory,
+                metricManager
         );
 
         this.cfgStorage = new DistributedConfigurationStorage(name, 
metaStorageMgr);
@@ -1019,6 +1021,7 @@ public class IgniteImpl implements Ignite {
 
         try {
             metricManager.registerSource(new JvmMetricSource());
+            metricManager.registerSource(new OsMetricSource());
 
             lifecycleManager.startComponent(longJvmPauseDetector);
 
diff --git 
a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/sqllogic/ItSqlLogicTest.java
 
b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/sqllogic/ItSqlLogicTest.java
index a110a4a82d..a1eb99444a 100644
--- 
a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/sqllogic/ItSqlLogicTest.java
+++ 
b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/sqllogic/ItSqlLogicTest.java
@@ -42,6 +42,7 @@ import org.apache.ignite.Ignite;
 import org.apache.ignite.IgnitionManager;
 import org.apache.ignite.InitParameters;
 import org.apache.ignite.internal.IgniteIntegrationTest;
+import org.apache.ignite.internal.app.IgniteImpl;
 import org.apache.ignite.internal.lang.IgniteStringFormatter;
 import org.apache.ignite.internal.lang.IgniteSystemProperties;
 import org.apache.ignite.internal.logger.IgniteLogger;
@@ -338,7 +339,9 @@ public class ItSqlLogicTest extends IgniteIntegrationTest {
                 .clusterName("cluster")
                 .clusterConfiguration("{"
                         + "gc.lowWatermark.dataAvailabilityTime: 1010,\n"
-                        + "gc.lowWatermark.updateFrequency: 3000\n"
+                        + "gc.lowWatermark.updateFrequency: 3000,\n"
+                        + "metrics.exporters.logPush.exporterName: logPush,\n"
+                        + "metrics.exporters.logPush.period: 5000\n"
                         + "}")
                 .build();
         TestIgnitionManager.init(initParameters);
@@ -346,7 +349,12 @@ public class ItSqlLogicTest extends IgniteIntegrationTest {
         for (CompletableFuture<Ignite> future : futures) {
             assertThat(future, willCompleteSuccessfully());
 
-            CLUSTER_NODES.add(await(future));
+            IgniteImpl ignite = (IgniteImpl) await(future);
+            CLUSTER_NODES.add(ignite);
+
+            ignite.metricManager().enable("jvm");
+            ignite.metricManager().enable("os");
+            ignite.metricManager().enable("metastorage");
         }
     }
 
diff --git 
a/modules/table/src/integrationTest/java/org/apache/ignite/internal/rebalance/ItRebalanceDistributedTest.java
 
b/modules/table/src/integrationTest/java/org/apache/ignite/internal/rebalance/ItRebalanceDistributedTest.java
index e08d866cd0..0633e3f5be 100644
--- 
a/modules/table/src/integrationTest/java/org/apache/ignite/internal/rebalance/ItRebalanceDistributedTest.java
+++ 
b/modules/table/src/integrationTest/java/org/apache/ignite/internal/rebalance/ItRebalanceDistributedTest.java
@@ -139,6 +139,7 @@ import 
org.apache.ignite.internal.metastorage.impl.MetaStorageManagerImpl;
 import org.apache.ignite.internal.metastorage.server.KeyValueStorage;
 import 
org.apache.ignite.internal.metastorage.server.SimpleInMemoryKeyValueStorage;
 import 
org.apache.ignite.internal.metastorage.server.persistence.RocksDbKeyValueStorage;
+import org.apache.ignite.internal.metrics.MetricManager;
 import org.apache.ignite.internal.metrics.NoOpMetricManager;
 import org.apache.ignite.internal.network.ClusterService;
 import org.apache.ignite.internal.network.DefaultMessagingService;
@@ -1033,11 +1034,13 @@ public class ItRebalanceDistributedTest extends 
BaseIgniteAbstractTest {
 
             lockManager = new HeapLockManager();
 
+            MetricManager metricManager = new NoOpMetricManager();
+
             var raftGroupEventsClientListener = new 
RaftGroupEventsClientListener();
 
             raftManager = spy(new Loza(
                     clusterService,
-                    new NoOpMetricManager(),
+                    metricManager,
                     raftConfiguration,
                     dir,
                     hybridClock,
@@ -1085,6 +1088,7 @@ public class ItRebalanceDistributedTest extends 
BaseIgniteAbstractTest {
                     keyValueStorage,
                     hybridClock,
                     topologyAwareRaftGroupServiceFactory,
+                    metricManager,
                     metaStorageConfiguration
             );
 

Reply via email to