IGNITE-13060 Fixed package names + performance optimizations for NoopTracingSpi case

Signed-off-by: Ivan Rakov <ivan.glukos@gmail.com>
diff --git a/modules/core/src/main/java/org/apache/ignite/Ignite.java b/modules/core/src/main/java/org/apache/ignite/Ignite.java
index 03a1296..194a7e9 100644
--- a/modules/core/src/main/java/org/apache/ignite/Ignite.java
+++ b/modules/core/src/main/java/org/apache/ignite/Ignite.java
@@ -31,7 +31,8 @@
 import org.apache.ignite.configuration.DataStorageConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.configuration.NearCacheConfiguration;
-import org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationManager;
+import org.apache.ignite.lang.IgniteExperimental;
+import org.apache.ignite.spi.tracing.TracingConfigurationManager;
 import org.apache.ignite.internal.util.typedef.G;
 import org.apache.ignite.lang.IgniteProductVersion;
 import org.apache.ignite.plugin.IgnitePlugin;
@@ -755,5 +756,6 @@
      * </ul>
      * @return {@link TracingConfigurationManager} instance.
      */
+    @IgniteExperimental
     public @NotNull TracingConfigurationManager tracingConfiguration();
 }
diff --git a/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java b/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java
index abccc9c..d760dce 100644
--- a/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java
@@ -47,8 +47,8 @@
 import org.apache.ignite.failure.FailureHandler;
 import org.apache.ignite.internal.managers.eventstorage.GridEventStorageManager;
 import org.apache.ignite.internal.processors.odbc.ClientListenerProcessor;
+import org.apache.ignite.spi.tracing.TracingSpi;
 import org.apache.ignite.internal.util.typedef.internal.A;
-import org.apache.ignite.internal.processors.tracing.TracingSpi;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgniteAsyncCallback;
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
index 07eebef..f578f33 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
@@ -192,7 +192,7 @@
 import org.apache.ignite.internal.processors.subscription.GridInternalSubscriptionProcessor;
 import org.apache.ignite.internal.processors.task.GridTaskProcessor;
 import org.apache.ignite.internal.processors.timeout.GridTimeoutProcessor;
-import org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationManager;
+import org.apache.ignite.spi.tracing.TracingConfigurationManager;
 import org.apache.ignite.internal.suggestions.GridPerformanceSuggestions;
 import org.apache.ignite.internal.suggestions.JvmConfigurationSuggestions;
 import org.apache.ignite.internal.suggestions.OsConfigurationSuggestions;
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java b/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java
index 0ff39e6..b9e7621 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java
@@ -81,7 +81,7 @@
 import org.apache.ignite.internal.processors.igfs.IgfsThreadFactory;
 import org.apache.ignite.internal.processors.igfs.IgfsUtils;
 import org.apache.ignite.internal.processors.resource.GridSpringResourceContext;
-import org.apache.ignite.internal.processors.tracing.NoopTracingSpi;
+import org.apache.ignite.spi.tracing.NoopTracingSpi;
 import org.apache.ignite.internal.util.GridConcurrentHashSet;
 import org.apache.ignite.internal.util.IgniteUtils;
 import org.apache.ignite.internal.util.StripedExecutor;
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/commandline/TracingConfigurationCommand.java b/modules/core/src/main/java/org/apache/ignite/internal/commandline/TracingConfigurationCommand.java
index 3ac6380..cb87946 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/commandline/TracingConfigurationCommand.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/commandline/TracingConfigurationCommand.java
@@ -31,7 +31,7 @@
 import org.apache.ignite.internal.commandline.cache.argument.TracingConfigurationCommandArg;
 import org.apache.ignite.internal.commandline.tracing.configuration.TracingConfigurationArguments;
 import org.apache.ignite.internal.commandline.tracing.configuration.TracingConfigurationSubcommand;
-import org.apache.ignite.internal.processors.tracing.Scope;
+import org.apache.ignite.spi.tracing.Scope;
 import org.apache.ignite.internal.visor.tracing.configuration.VisorTracingConfigurationTask;
 import org.apache.ignite.internal.visor.tracing.configuration.VisorTracingConfigurationTaskArg;
 import org.apache.ignite.internal.visor.tracing.configuration.VisorTracingConfigurationTaskResult;
@@ -46,8 +46,8 @@
 import static org.apache.ignite.internal.commandline.tracing.configuration.TracingConfigurationSubcommand.GET_ALL;
 import static org.apache.ignite.internal.commandline.tracing.configuration.TracingConfigurationSubcommand.RESET_ALL;
 import static org.apache.ignite.internal.commandline.tracing.configuration.TracingConfigurationSubcommand.of;
-import static org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationParameters.SAMPLING_RATE_ALWAYS;
-import static org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationParameters.SAMPLING_RATE_NEVER;
+import static org.apache.ignite.spi.tracing.TracingConfigurationParameters.SAMPLING_RATE_ALWAYS;
+import static org.apache.ignite.spi.tracing.TracingConfigurationParameters.SAMPLING_RATE_NEVER;
 
 /**
  * Commands associated with tracing configuration functionality.
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/commandline/cache/argument/TracingConfigurationCommandArg.java b/modules/core/src/main/java/org/apache/ignite/internal/commandline/cache/argument/TracingConfigurationCommandArg.java
index 2ccd51c..65b2b39 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/commandline/cache/argument/TracingConfigurationCommandArg.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/commandline/cache/argument/TracingConfigurationCommandArg.java
@@ -19,9 +19,8 @@
 
 import org.apache.ignite.internal.commandline.CommandList;
 import org.apache.ignite.internal.commandline.argument.CommandArg;
-import org.apache.ignite.internal.processors.tracing.Scope;
+import org.apache.ignite.spi.tracing.Scope;
 import org.apache.ignite.internal.processors.tracing.Span;
-
 import java.util.Arrays;
 import java.util.Set;
 import java.util.stream.Collectors;
@@ -48,7 +47,7 @@
      * Set of {@link Scope} that defines which sub-traces will be included in given trace. In other words, if child's
      * span scope is equals to parent's scope or it belongs to the parent's span included scopes, then given child span
      * will be attached to the current trace, otherwise it'll be skipped. See {@link
-     * Span#isChainable(org.apache.ignite.internal.processors.tracing.Scope)} for more details.
+     * Span#isChainable(Scope)} for more details.
      */
     INCLUDED_SCOPES("--included-scopes");
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/commandline/tracing/configuration/TracingConfigurationArguments.java b/modules/core/src/main/java/org/apache/ignite/internal/commandline/tracing/configuration/TracingConfigurationArguments.java
index ac56974..e211942 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/commandline/tracing/configuration/TracingConfigurationArguments.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/commandline/tracing/configuration/TracingConfigurationArguments.java
@@ -19,7 +19,7 @@
 
 import java.util.Collections;
 import java.util.Set;
-import org.apache.ignite.internal.processors.tracing.Scope;
+import org.apache.ignite.spi.tracing.Scope;
 import org.apache.ignite.internal.processors.tracing.Span;
 import org.apache.ignite.internal.visor.tracing.configuration.VisorTracingConfigurationItem;
 import org.jetbrains.annotations.NotNull;
@@ -55,7 +55,7 @@
      *  In other words, if child's span scope is equals to parent's scope
      *  or it belongs to the parent's span included scopes, then given child span will be attached to the current trace,
      *  otherwise it'll be skipped.
-     *  See {@link Span#isChainable(org.apache.ignite.internal.processors.tracing.Scope)} for more details.
+     *  See {@link Span#isChainable(Scope)} for more details.
      */
     private TracingConfigurationArguments(
         TracingConfigurationSubcommand cmd,
@@ -153,7 +153,7 @@
          * In other words, if child's span scope is equals to parent's scope
          * or it belongs to the parent's span included scopes, then given child span will be attached to the current trace,
          * otherwise it'll be skipped.
-         * See {@link Span#isChainable(org.apache.ignite.internal.processors.tracing.Scope)} for more details.
+         * See {@link Span#isChainable(Scope)} for more details.
          * @return Builder
          */
         @SuppressWarnings("UnusedReturnValue")
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java
index c39342a..70fb45d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java
@@ -1369,7 +1369,7 @@
         Runnable c = new TraceRunnable(ctx.tracing(), COMMUNICATION_REGULAR_PROCESS) {
             @Override public void execute() {
                 try {
-                    MTC.span().addTag(SpanTags.MESSAGE, traceName(msg));
+                    MTC.span().addTag(SpanTags.MESSAGE, () -> traceName(msg));
 
                     threadProcessingMessage(true, msgC);
 
@@ -1387,7 +1387,7 @@
             }
         };
 
-        MTC.span().addLog("Regular process queued");
+        MTC.span().addLog(() -> "Regular process queued");
 
         if (msg.topicOrdinal() == TOPIC_IO_TEST.ordinal()) {
             IgniteIoTestMessage msg0 = (IgniteIoTestMessage)msg.message();
@@ -1790,7 +1790,7 @@
         };
 
         try {
-            MTC.span().addLog("Ordered process queued");
+            MTC.span().addLog(() -> "Ordered process queued");
 
             pools.poolForPolicy(plc).execute(c);
         }
@@ -1847,7 +1847,7 @@
      * @param secSubjId Security subject that will be used to open a security session.
      */
     private void invokeListener(Byte plc, GridMessageListener lsnr, UUID nodeId, Object msg, UUID secSubjId) {
-        MTC.span().addLog("Invoke listener");
+        MTC.span().addLog(() -> "Invoke listener");
 
         Byte oldPlc = CUR_PLC.get();
 
@@ -2022,7 +2022,7 @@
         assert topicOrd >= 0 || !(topic instanceof GridTopic) : msg;
 
         try (TraceSurroundings ignored = support(null)) {
-            MTC.span().addLog("Create communication msg - " + traceName(msg));
+            MTC.span().addLog(() -> "Create communication msg - " + traceName(msg));
 
             GridIoMessage ioMsg = createGridIoMessage(topic, topicOrd, msg, plc, ordered, timeout, skipOnTimeout);
 
@@ -3852,7 +3852,9 @@
                 try (TraceSurroundings ignore = support(ctx.tracing().create(
                     COMMUNICATION_ORDERED_PROCESS, mc.parentSpan))) {
                     try {
-                        MTC.span().addTag(SpanTags.MESSAGE, traceName(mc.message));
+                        OrderedMessageContainer fmc = mc;
+
+                        MTC.span().addTag(SpanTags.MESSAGE, () -> traceName(fmc.message));
 
                         invokeListener(plc, lsnr, nodeId, mc.message.message(), secSubjId(mc.message));
                     }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/tracing/GridTracingManager.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/tracing/GridTracingManager.java
index ea26c4c..9fb749e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/managers/tracing/GridTracingManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/tracing/GridTracingManager.java
@@ -29,25 +29,26 @@
 import org.apache.ignite.internal.processors.tracing.SpanImpl;
 import org.apache.ignite.internal.processors.tracing.configuration.GridTracingConfigurationManager;
 import org.apache.ignite.internal.processors.tracing.NoopSpan;
-import org.apache.ignite.internal.processors.tracing.NoopTracingSpi;
-import org.apache.ignite.internal.processors.tracing.Scope;
+import org.apache.ignite.spi.tracing.NoopTracingSpi;
+import org.apache.ignite.spi.tracing.Scope;
 import org.apache.ignite.internal.processors.tracing.Span;
 import org.apache.ignite.internal.processors.tracing.SpanTags;
 import org.apache.ignite.internal.processors.tracing.SpanType;
 import org.apache.ignite.internal.processors.tracing.Tracing;
-import org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationCoordinates;
-import org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationManager;
-import org.apache.ignite.internal.processors.tracing.TracingSpi;
-import org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationParameters;
+import org.apache.ignite.spi.tracing.TracingConfigurationCoordinates;
+import org.apache.ignite.spi.tracing.TracingConfigurationManager;
+import org.apache.ignite.spi.tracing.TracingSpi;
+import org.apache.ignite.spi.tracing.TracingConfigurationParameters;
 import org.apache.ignite.internal.processors.tracing.messages.TraceableMessagesHandler;
 import org.apache.ignite.internal.util.typedef.internal.LT;
+import org.apache.ignite.logger.NullLogger;
 import org.apache.ignite.spi.IgniteSpiException;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
 import static org.apache.ignite.internal.processors.tracing.SpanTags.NODE;
-import static org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationParameters.SAMPLING_RATE_ALWAYS;
-import static org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationParameters.SAMPLING_RATE_NEVER;
+import static org.apache.ignite.spi.tracing.TracingConfigurationParameters.SAMPLING_RATE_ALWAYS;
+import static org.apache.ignite.spi.tracing.TracingConfigurationParameters.SAMPLING_RATE_NEVER;
 import static org.apache.ignite.internal.util.GridClientByteUtils.bytesToInt;
 import static org.apache.ignite.internal.util.GridClientByteUtils.bytesToShort;
 import static org.apache.ignite.internal.util.GridClientByteUtils.intToBytes;
@@ -102,6 +103,13 @@
     /** Minor span serialization protocol version. */
     private static final byte MINOR_PROTOCOL_VERSION = 0;
 
+    /** Noop traceable message handler. */
+    private static final TraceableMessagesHandler NOOP_TRACEABLE_MSG_HANDLER =
+        new TraceableMessagesHandler(new NoopTracing(), new NullLogger());
+
+    /** Flag that indicates that noop tracing spi is used. */
+    private boolean noop = true;
+
     /**
      * Constructor.
      *
@@ -124,6 +132,8 @@
     @Override public void start() throws IgniteCheckedException {
         try {
             startSpi();
+
+            noop = getSpi() instanceof NoopTracingSpi;
         }
         catch (IgniteSpiException e) {
             log.warning("Failed to start tracing processor with spi: " + getSpi().getName()
@@ -156,18 +166,21 @@
         if (span == null)
             return null;
 
-        span.addTag(SpanTags.NODE_ID, ctx.localNodeId().toString());
-        span.addTag(SpanTags.tag(NODE, SpanTags.NAME), ctx.igniteInstanceName());
+        span.addTag(SpanTags.NODE_ID, () -> ctx.localNodeId().toString());
+        span.addTag(SpanTags.tag(NODE, SpanTags.NAME), ctx::igniteInstanceName);
 
         ClusterNode locNode = ctx.discovery().localNode();
         if (locNode != null && locNode.consistentId() != null)
-            span.addTag(SpanTags.tag(NODE, SpanTags.CONSISTENT_ID), locNode.consistentId().toString());
+            span.addTag(SpanTags.tag(NODE, SpanTags.CONSISTENT_ID), () -> locNode.consistentId().toString());
 
         return span;
     }
 
     /** {@inheritDoc} */
     @Override public Span create(@NotNull SpanType spanType, @Nullable Span parentSpan) {
+        if (noop)
+            return NoopSpan.INSTANCE;
+
         return enrichWithLocalNodeParameters(
             generateSpan(
                 parentSpan,
@@ -177,6 +190,9 @@
 
     /** {@inheritDoc} */
     @Override public Span create(@NotNull SpanType spanType, @Nullable byte[] serializedParentSpan) {
+        if (noop)
+            return NoopSpan.INSTANCE;
+
         // 1 byte: special flags;
         // 1 bytes: spi type;
         // 2 bytes: major protocol version;
@@ -305,14 +321,21 @@
         @Nullable Span parentSpan,
         @Nullable String lb
     ) {
-        return enrichWithLocalNodeParameters(generateSpan(
-            parentSpan,
-            spanType,
-            lb));
+        if (noop)
+            return NoopSpan.INSTANCE;
+
+        return enrichWithLocalNodeParameters(
+            generateSpan(
+                parentSpan,
+                spanType,
+                lb));
     }
 
     /** {@inheritDoc} */
     @Override public byte[] serialize(@NotNull Span span) {
+        if (noop)
+            return NoopTracing.NOOP_SERIALIZED_SPAN;
+
         // 1 byte: special flags;
         // 1 bytes: spi type;
         // 2 bytes: major protocol version;
@@ -465,6 +488,9 @@
 
     /** {@inheritDoc} */
     @Override public TraceableMessagesHandler messages() {
+        if (noop)
+            return NOOP_TRACEABLE_MSG_HANDLER;
+
         return msgHnd;
     }
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheAffinitySharedManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheAffinitySharedManager.java
index d59b286..40f071e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheAffinitySharedManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheAffinitySharedManager.java
@@ -2141,7 +2141,7 @@
                     return;
 
                 Span affCalcSpan = cctx.kernalContext().tracing().create(AFFINITY_CALCULATION, fut.span())
-                    .addTag("cache.group", desc.cacheOrGroupName());
+                    .addTag("cache.group", desc::cacheOrGroupName);
 
                 boolean latePrimary = cache.rebalanceEnabled;
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java
index 300b523..e9e0458 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java
@@ -666,19 +666,21 @@
             Span span = cctx.kernalContext().tracing().create(EXCHANGE_FUTURE, evt.span());
 
             if (exchId != null) {
-                span.addTag(SpanTags.tag(SpanTags.EVENT_NODE, SpanTags.ID), evt.eventNode().id().toString());
+                GridDhtPartitionExchangeId exchIdf = exchId;
+
+                span.addTag(SpanTags.tag(SpanTags.EVENT_NODE, SpanTags.ID), () -> evt.eventNode().id().toString());
                 span.addTag(SpanTags.tag(SpanTags.EVENT_NODE, SpanTags.CONSISTENT_ID),
-                    evt.eventNode().consistentId().toString());
-                span.addTag(SpanTags.tag(SpanTags.EVENT, SpanTags.TYPE), evt.type());
-                span.addTag(SpanTags.tag(SpanTags.EXCHANGE, SpanTags.ID), exchId.toString());
+                    () -> evt.eventNode().consistentId().toString());
+                span.addTag(SpanTags.tag(SpanTags.EVENT, SpanTags.TYPE), () -> String.valueOf(evt.type()));
+                span.addTag(SpanTags.tag(SpanTags.EXCHANGE, SpanTags.ID), () -> String.valueOf(exchIdf.toString()));
                 span.addTag(SpanTags.tag(SpanTags.INITIAL, SpanTags.TOPOLOGY_VERSION, SpanTags.MAJOR),
-                    exchId.topologyVersion().topologyVersion());
+                    () -> String.valueOf(exchIdf.topologyVersion().topologyVersion()));
                 span.addTag(SpanTags.tag(SpanTags.INITIAL, SpanTags.TOPOLOGY_VERSION, SpanTags.MINOR),
-                    exchId.topologyVersion().minorTopologyVersion());
+                    () -> String.valueOf(exchIdf.topologyVersion().minorTopologyVersion()));
             }
 
-            span.addTag(SpanTags.NODE_ID, cctx.localNodeId().toString());
-            span.addLog("Created");
+            span.addTag(SpanTags.NODE_ID, () -> cctx.localNodeId().toString());
+            span.addLog(() -> "Created");
 
             exchFut.span(span);
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsExchangeFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsExchangeFuture.java
index de27a5d..4bad231 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsExchangeFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsExchangeFuture.java
@@ -833,7 +833,7 @@
                     ", exchangeFreeSwitch=" + exchCtx.exchangeFreeSwitch() + ']');
             }
 
-            span.addLog("Exchange parameters initialization");
+            span.addLog(() -> "Exchange parameters initialization");
 
             timeBag.finishGlobalStage("Exchange parameters initialization");
 
@@ -2375,13 +2375,16 @@
 
         if (res != null) {
             span.addTag(SpanTags.tag(SpanTags.RESULT, SpanTags.TOPOLOGY_VERSION, SpanTags.MAJOR),
-                res.topologyVersion());
+                () -> String.valueOf(res.topologyVersion()));
             span.addTag(SpanTags.tag(SpanTags.RESULT, SpanTags.TOPOLOGY_VERSION, SpanTags.MINOR),
-                res.minorTopologyVersion());
+                () -> String.valueOf(res.minorTopologyVersion()));
         }
 
-        if (err != null)
-            span.addTag(SpanTags.ERROR, err.toString());
+        if (err != null) {
+            Throwable errf = err;
+
+            span.addTag(SpanTags.ERROR, errf::toString);
+        }
 
         try {
             waitUntilNewCachesAreRegistered();
@@ -2527,7 +2530,7 @@
         if (super.onDone(res, err)) {
             afterLsnrCompleteFut.onDone();
 
-            span.addLog("Completed partition exchange");
+            span.addLog(() -> "Completed partition exchange");
 
             span.end();
 
@@ -3604,7 +3607,7 @@
         try {
             initFut.get();
 
-            span.addLog("Waiting for all single messages");
+            span.addLog(() -> "Waiting for all single messages");
 
             timeBag.finishGlobalStage("Waiting for all single messages");
 
@@ -3722,7 +3725,7 @@
                     });
             }
 
-            span.addLog("Affinity recalculation (crd)");
+            span.addLog(() -> "Affinity recalculation (crd)");
 
             timeBag.finishGlobalStage("Affinity recalculation (crd)");
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTransactionsImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTransactionsImpl.java
index 593d623..b6ce2a0 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTransactionsImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTransactionsImpl.java
@@ -172,12 +172,12 @@
             null,
             lb));
 
-        MTC.span().addTag("isolation", isolation.name());
-        MTC.span().addTag("concurrency", concurrency.name());
-        MTC.span().addTag("timeout", timeout);
+        MTC.span().addTag("isolation", isolation::name);
+        MTC.span().addTag("concurrency", concurrency::name);
+        MTC.span().addTag("timeout", () -> String.valueOf(timeout));
 
         if (lb != null)
-            MTC.span().addTag("label", lb);
+            MTC.span().addTag("label", () -> lb);
 
         try {
             GridNearTxLocal tx = cctx.tm().userTx(sysCacheCtx);
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/DeferredSpan.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/DeferredSpan.java
index 83f41d5..af3da2a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/DeferredSpan.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/DeferredSpan.java
@@ -18,8 +18,10 @@
 package org.apache.ignite.internal.processors.tracing;
 
 import java.util.Collections;
-import java.util.Map;
 import java.util.Set;
+import java.util.function.Supplier;
+import org.apache.ignite.spi.tracing.Scope;
+import org.apache.ignite.spi.tracing.SpanStatus;
 
 /**
  * Encapsulates concept of a deferred-initialized span. It's used to overcome OpenCensus span implementation, that starts
@@ -34,6 +36,7 @@
      *
      * @param serializedSpan Serialized span bytes.
      */
+    @SuppressWarnings("AssignmentOrReturnOfFieldWithMutableType")
     public DeferredSpan(byte[] serializedSpan) {
         this.serializedSpan = serializedSpan;
     }
@@ -41,27 +44,18 @@
     /**
      * @return Serialized span.
      */
+    @SuppressWarnings("AssignmentOrReturnOfFieldWithMutableType")
     public byte[] serializedSpan() {
         return serializedSpan;
     }
 
     /** {@inheritDoc} */
-    @Override public Span addTag(String tagName, String tagVal) {
+    @Override public Span addTag(String tagName, Supplier<String> tagValSupplier) {
         return this;
     }
 
     /** {@inheritDoc} */
-    @Override public Span addTag(String tagName, long tagVal) {
-        return this;
-    }
-
-    /** {@inheritDoc} */
-    @Override public Span addLog(String logDesc) {
-        return this;
-    }
-
-    /** {@inheritDoc} */
-    @Override public Span addLog(String logDesc, Map<String, String> attrs) {
+    @Override public Span addLog(Supplier<String> logDescSupplier) {
         return this;
     }
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/NoopSpan.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/NoopSpan.java
index fc22c2f..b1eaa2a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/NoopSpan.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/NoopSpan.java
@@ -18,8 +18,10 @@
 package org.apache.ignite.internal.processors.tracing;
 
 import java.util.Collections;
-import java.util.Map;
 import java.util.Set;
+import java.util.function.Supplier;
+import org.apache.ignite.spi.tracing.Scope;
+import org.apache.ignite.spi.tracing.SpanStatus;
 
 /**
  * Noop and null-safe implementation of Span.
@@ -36,22 +38,12 @@
     }
 
     /** {@inheritDoc} */
-    @Override public Span addTag(String tagName, String tagVal) {
+    @Override public Span addTag(String tagName, Supplier<String> tagValSupplier) {
         return this;
     }
 
     /** {@inheritDoc} */
-    @Override public Span addTag(String tagName, long tagVal) {
-        return this;
-    }
-
-    /** {@inheritDoc} */
-    @Override public Span addLog(String logDesc) {
-        return this;
-    }
-
-    /** {@inheritDoc} */
-    @Override public Span addLog(String logDesc, Map<String, String> attrs) {
+    @Override public Span addLog(Supplier<String> logDescSupplier) {
         return this;
     }
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/NoopTracing.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/NoopTracing.java
index 2e976b5..0427bb0 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/NoopTracing.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/NoopTracing.java
@@ -18,7 +18,7 @@
 package org.apache.ignite.internal.processors.tracing;
 
 import org.apache.ignite.internal.processors.tracing.configuration.NoopTracingConfigurationManager;
-import org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationManager;
+import org.apache.ignite.spi.tracing.TracingConfigurationManager;
 import org.apache.ignite.internal.processors.tracing.messages.TraceableMessagesHandler;
 import org.apache.ignite.logger.NullLogger;
 import org.jetbrains.annotations.NotNull;
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/Span.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/Span.java
index 0da423e..3fbeb23 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/Span.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/Span.java
@@ -17,8 +17,10 @@
 
 package org.apache.ignite.internal.processors.tracing;
 
-import java.util.Map;
 import java.util.Set;
+import java.util.function.Supplier;
+import org.apache.ignite.spi.tracing.Scope;
+import org.apache.ignite.spi.tracing.SpanStatus;
 
 /**
  * Logical piece of a trace that represents a single operation.
@@ -28,37 +30,23 @@
  * You can use tracing to debug errors and latency issues in your applications.
  */
 public interface Span {
-
     /**
      * Adds tag to span with {@code String} value.
      *
      * @param tagName Tag name.
-     * @param tagVal Tag value.
+     * @param tagValSupplier Tag value supplier. Supplier is used instead of strict tag value cause of it's lazy nature.
+     *  So that it's possible not to generate String tag value in case of NoopSpan.
      */
-    Span addTag(String tagName, String tagVal);
-
-    /**
-     * Adds tag to span with {@code long} value.
-     *
-     * @param tagName Tag name.
-     * @param tagVal Tag value.
-     */
-    Span addTag(String tagName, long tagVal);
+    Span addTag(String tagName, Supplier<String> tagValSupplier);
 
     /**
      * Logs work to span.
      *
-     * @param logDesc Log description.
+     * @param logDescSupplier Log description supplier.
+     *  Supplier is used instead of strict log description cause of it's lazy nature.
+     *  So that it's possible not to generate String log description in case of NoopSpan.
      */
-    Span addLog(String logDesc);
-
-    /**
-     * Adds log to span with additional attributes.
-     *
-     * @param logDesc Log description.
-     * @param attrs Attributes.
-     */
-    Span addLog(String logDesc, Map<String, String> attrs);
+    Span addLog(Supplier<String> logDescSupplier);
 
     /**
      * Explicitly set status for span.
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/SpanImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/SpanImpl.java
index 7f34e56..bf98b79 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/SpanImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/SpanImpl.java
@@ -17,8 +17,11 @@
 
 package org.apache.ignite.internal.processors.tracing;
 
-import java.util.Map;
 import java.util.Set;
+import java.util.function.Supplier;
+import org.apache.ignite.spi.tracing.Scope;
+import org.apache.ignite.spi.tracing.SpanStatus;
+import org.apache.ignite.spi.tracing.SpiSpecificSpan;
 
 /**
  * Implementation of a {@link Span}
@@ -49,30 +52,14 @@
         this.includedScopes = includedScopes;
     }
 
-    /** {@inheritDoc} */
-    @Override public Span addTag(String tagName, String tagVal) {
-        spiSpecificSpan.addTag(tagName, tagVal);
+    @Override public Span addTag(String tagName, Supplier<String> tagValSupplier) {
+        spiSpecificSpan.addTag(tagName, tagValSupplier.get());
 
         return this;
     }
 
-    /** {@inheritDoc} */
-    @Override public Span addTag(String tagName, long tagVal) {
-        spiSpecificSpan.addTag(tagName, tagVal);
-
-        return this;
-    }
-
-    /** {@inheritDoc} */
-    @Override public Span addLog(String logDesc) {
-        spiSpecificSpan.addLog(logDesc);
-
-        return this;
-    }
-
-    /** {@inheritDoc} */
-    @Override public Span addLog(String logDesc, Map<String, String> attrs) {
-        spiSpecificSpan.addLog(logDesc, attrs);
+    @Override public Span addLog(Supplier<String> logDescSupplier) {
+        spiSpecificSpan.addLog(logDescSupplier.get());
 
         return this;
     }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/SpanType.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/SpanType.java
index d9df433..6aa282e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/SpanType.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/SpanType.java
@@ -17,6 +17,8 @@
 
 package org.apache.ignite.internal.processors.tracing;
 
+import org.apache.ignite.spi.tracing.Scope;
+
 /**
  * List of span type names used in appropriate sub-systems.
  */
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/Tracing.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/Tracing.java
index fd2f37e..7b18093 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/Tracing.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/Tracing.java
@@ -17,7 +17,7 @@
 
 package org.apache.ignite.internal.processors.tracing;
 
-import org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationManager;
+import org.apache.ignite.spi.tracing.TracingConfigurationManager;
 import org.apache.ignite.internal.processors.tracing.messages.TraceableMessagesHandler;
 import org.jetbrains.annotations.NotNull;
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/configuration/GridTracingConfigurationManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/configuration/GridTracingConfigurationManager.java
index 20fcb26..7e3fa08 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/configuration/GridTracingConfigurationManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/configuration/GridTracingConfigurationManager.java
@@ -26,9 +26,12 @@
 import org.apache.ignite.internal.GridKernalContext;
 import org.apache.ignite.internal.processors.metastorage.DistributedMetaStorage;
 import org.apache.ignite.internal.processors.metastorage.persistence.DistributedMetaStorageImpl;
-import org.apache.ignite.internal.processors.tracing.Scope;
+import org.apache.ignite.spi.tracing.Scope;
 import org.apache.ignite.internal.util.tostring.GridToStringExclude;
 import org.apache.ignite.internal.util.typedef.internal.LT;
+import org.apache.ignite.spi.tracing.TracingConfigurationCoordinates;
+import org.apache.ignite.spi.tracing.TracingConfigurationManager;
+import org.apache.ignite.spi.tracing.TracingConfigurationParameters;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/configuration/NoopTracingConfigurationManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/configuration/NoopTracingConfigurationManager.java
index 5fa18da..3345148 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/configuration/NoopTracingConfigurationManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/configuration/NoopTracingConfigurationManager.java
@@ -21,7 +21,10 @@
 import java.util.Map;
 
 import org.apache.ignite.IgniteException;
-import org.apache.ignite.internal.processors.tracing.Scope;
+import org.apache.ignite.spi.tracing.Scope;
+import org.apache.ignite.spi.tracing.TracingConfigurationCoordinates;
+import org.apache.ignite.spi.tracing.TracingConfigurationManager;
+import org.apache.ignite.spi.tracing.TracingConfigurationParameters;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/messages/TraceableMessagesHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/messages/TraceableMessagesHandler.java
index 27546e5..5189aed 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/messages/TraceableMessagesHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/messages/TraceableMessagesHandler.java
@@ -53,7 +53,7 @@
         if (msg.spanContainer().span() == NoopSpan.INSTANCE && msg.spanContainer().serializedSpanBytes() != null)
             msg.spanContainer().span(
                 spanMgr.create(TraceableMessagesTable.traceName(msg.getClass()), msg.spanContainer().serializedSpanBytes())
-                    .addLog("Received")
+                    .addLog(() -> "Received")
             );
     }
 
@@ -85,7 +85,7 @@
 
         msg.spanContainer().span(
             spanMgr.create(TraceableMessagesTable.traceName(msg.getClass()), parent.spanContainer().span())
-                .addLog("Created")
+                .addLog(() -> "Created")
         );
 
         return msg;
@@ -100,7 +100,7 @@
 
         if (!msg.spanContainer().span().isEnded())
             msg.spanContainer().span()
-                .addLog("Processed")
+                .addLog(() -> "Processed")
                 .end();
     }
 }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java
index 46cf0f2..ed208e1 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java
@@ -1570,7 +1570,7 @@
             Span span = tracing.create(SpanType.COMMUNICATION_SOCKET_WRITE, req.span());
 
             try (TraceSurroundings ignore = span.equals(NoopSpan.INSTANCE) ? null : MTC.support(span)) {
-                MTC.span().addTag(SpanTags.MESSAGE, traceName(msg));
+                MTC.span().addTag(SpanTags.MESSAGE, () -> traceName(msg));
 
                 assert msg != null;
 
@@ -1751,7 +1751,7 @@
             Span span = tracing.create(SpanType.COMMUNICATION_SOCKET_WRITE, req.span());
 
             try (TraceSurroundings ignore = span.equals(NoopSpan.INSTANCE) ? null : MTC.support(span)) {
-                MTC.span().addTag(SpanTags.MESSAGE, traceName(msg));
+                MTC.span().addTag(SpanTags.MESSAGE, () -> traceName(msg));
 
                 if (writer != null)
                     writer.setCurrentWriteClass(msg.getClass());
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridSelectorNioSessionImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridSelectorNioSessionImpl.java
index cc20748..7b8e6c0b 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridSelectorNioSessionImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridSelectorNioSessionImpl.java
@@ -309,7 +309,7 @@
 
         boolean res = queue.offerFirst(writeFut);
 
-        MTC.span().addLog("Added to system queue - " + traceName(writeFut.message()));
+        MTC.span().addLog(() -> "Added to system queue - " + traceName(writeFut.message()));
 
         assert res : "Future was not added to queue";
 
@@ -339,7 +339,7 @@
 
         boolean res = queue.offer(writeFut);
 
-        MTC.span().addLog("Added to queue - " + traceName(writeFut.message()));
+        MTC.span().addLog(() -> "Added to queue - " + traceName(writeFut.message()));
 
         assert res : "Future was not added to queue";
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/tracing/configuration/VisorTracingConfigurationItem.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/tracing/configuration/VisorTracingConfigurationItem.java
index 7ac1d4a..152233d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/tracing/configuration/VisorTracingConfigurationItem.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/tracing/configuration/VisorTracingConfigurationItem.java
@@ -22,7 +22,7 @@
 import java.io.ObjectOutput;
 import java.util.Set;
 import org.apache.ignite.internal.dto.IgniteDataTransferObject;
-import org.apache.ignite.internal.processors.tracing.Scope;
+import org.apache.ignite.spi.tracing.Scope;
 import org.apache.ignite.internal.processors.tracing.Span;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.util.typedef.internal.U;
@@ -56,7 +56,7 @@
      * Set of {@link Scope} that defines which sub-traces will be included in given trace. In other words, if child's
      * span scope is equals to parent's scope or it belongs to the parent's span included scopes, then given child span
      * will be attached to the current trace, otherwise it'll be skipped. See {@link
-     * Span#isChainable(org.apache.ignite.internal.processors.tracing.Scope)} for more details.
+     * Span#isChainable(Scope)} for more details.
      */
     private Set<Scope> includedScopes;
 
@@ -78,7 +78,7 @@
      *  In other words, if child's span scope is equals to parent's scope
      *  or it belongs to the parent's span included scopes, then given child span will be attached to the current trace,
      *  otherwise it'll be skipped.
-     *  See {@link Span#isChainable(org.apache.ignite.internal.processors.tracing.Scope)} for more details.
+     *  See {@link Span#isChainable(Scope)} for more details.
      */
     public VisorTracingConfigurationItem(
         Scope scope,
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/tracing/configuration/VisorTracingConfigurationTask.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/tracing/configuration/VisorTracingConfigurationTask.java
index 09b59d2..5be8d3f 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/tracing/configuration/VisorTracingConfigurationTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/tracing/configuration/VisorTracingConfigurationTask.java
@@ -22,9 +22,9 @@
 import org.apache.ignite.IgniteException;
 import org.apache.ignite.internal.processors.task.GridInternal;
 import org.apache.ignite.internal.processors.task.GridVisorManagementTask;
-import org.apache.ignite.internal.processors.tracing.Scope;
-import org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationCoordinates;
-import org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationParameters;
+import org.apache.ignite.spi.tracing.Scope;
+import org.apache.ignite.spi.tracing.TracingConfigurationCoordinates;
+import org.apache.ignite.spi.tracing.TracingConfigurationParameters;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.visor.VisorJob;
 import org.apache.ignite.internal.visor.VisorOneNodeTask;
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/tracing/configuration/VisorTracingConfigurationTaskArg.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/tracing/configuration/VisorTracingConfigurationTaskArg.java
index 1595807..972a0a1 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/tracing/configuration/VisorTracingConfigurationTaskArg.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/tracing/configuration/VisorTracingConfigurationTaskArg.java
@@ -21,7 +21,7 @@
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
 import java.util.Set;
-import org.apache.ignite.internal.processors.tracing.Scope;
+import org.apache.ignite.spi.tracing.Scope;
 import org.apache.ignite.internal.processors.tracing.Span;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.util.typedef.internal.U;
@@ -55,7 +55,7 @@
      *  In other words, if child's span scope is equals to parent's scope
      *  or it belongs to the parent's span included scopes, then given child span will be attached to the current trace,
      *  otherwise it'll be skipped.
-     *  See {@link Span#isChainable(org.apache.ignite.internal.processors.tracing.Scope)} for more details.
+     *  See {@link Span#isChainable(Scope)} for more details.
      */
     public VisorTracingConfigurationTaskArg(
         VisorTracingConfigurationOperation op,
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/tracing/configuration/VisorTracingConfigurationTaskResult.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/tracing/configuration/VisorTracingConfigurationTaskResult.java
index 34737e9..dd892b2 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/tracing/configuration/VisorTracingConfigurationTaskResult.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/tracing/configuration/VisorTracingConfigurationTaskResult.java
@@ -27,8 +27,8 @@
 import java.util.List;
 import java.util.function.Consumer;
 import org.apache.ignite.internal.dto.IgniteDataTransferObject;
-import org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationCoordinates;
-import org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationParameters;
+import org.apache.ignite.spi.tracing.TracingConfigurationCoordinates;
+import org.apache.ignite.spi.tracing.TracingConfigurationParameters;
 import org.apache.ignite.internal.util.typedef.internal.U;
 
 /**
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java b/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java
index 409c595..18d9ad8 100755
--- a/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java
@@ -848,8 +848,8 @@
             }
 
             @Override public void onMessage(final GridNioSession ses, Message msg) {
-                MTC.span().addLog("Communication received");
-                MTC.span().addTag(SpanTags.MESSAGE, traceName(msg));
+                MTC.span().addLog(() -> "Communication received");
+                MTC.span().addTag(SpanTags.MESSAGE, () -> traceName(msg));
 
                 ConnectionKey connKey = ses.meta(CONN_IDX_META);
 
@@ -4172,7 +4172,7 @@
     protected void notifyListener(UUID sndId, Message msg, IgniteRunnable msgC) {
         CommunicationListener<Message> lsnr = this.lsnr;
 
-        MTC.span().addLog("Communication listeners notified");
+        MTC.span().addLog(() -> "Communication listeners notified");
 
         if (lsnr != null)
             // Notify listener of a new message.
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ClientImpl.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ClientImpl.java
index 4a29a9b..4193306 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ClientImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ClientImpl.java
@@ -753,12 +753,14 @@
 
                     TcpDiscoveryJoinRequestMessage joinReqMsg = new TcpDiscoveryJoinRequestMessage(node, discoveryData);
 
+                    TcpDiscoveryNode nodef = node;
+
                     joinReqMsg.spanContainer().span(
                         tracing.create(TraceableMessagesTable.traceName(joinReqMsg.getClass()))
-                            .addTag(SpanTags.tag(SpanTags.EVENT_NODE, SpanTags.ID), node.id().toString())
+                            .addTag(SpanTags.tag(SpanTags.EVENT_NODE, SpanTags.ID), () -> nodef.id().toString())
                             .addTag(SpanTags.tag(SpanTags.EVENT_NODE, SpanTags.CONSISTENT_ID),
-                                node.consistentId().toString())
-                            .addLog("Created")
+                                () -> nodef.consistentId().toString())
+                            .addLog(() -> "Created")
                             .end()
                     );
 
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java
index d124224..f9f4208 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java
@@ -82,7 +82,7 @@
 import org.apache.ignite.internal.processors.security.SecurityContext;
 import org.apache.ignite.internal.processors.security.SecurityUtils;
 import org.apache.ignite.internal.processors.tracing.Span;
-import org.apache.ignite.internal.processors.tracing.SpanStatus;
+import org.apache.ignite.spi.tracing.SpanStatus;
 import org.apache.ignite.internal.processors.tracing.SpanTags;
 import org.apache.ignite.internal.processors.tracing.messages.SpanContainer;
 import org.apache.ignite.internal.processors.tracing.messages.TraceableMessage;
@@ -481,15 +481,16 @@
             TcpDiscoveryNodeLeftMessage nodeLeftMsg = new TcpDiscoveryNodeLeftMessage(locNode.id());
 
             Span rootSpan = tracing.create(TraceableMessagesTable.traceName(nodeLeftMsg.getClass()))
-                .addTag(SpanTags.tag(SpanTags.EVENT_NODE, SpanTags.ID), locNode.id().toString())
-                .addTag(SpanTags.tag(SpanTags.EVENT_NODE, SpanTags.CONSISTENT_ID), locNode.consistentId().toString())
-                .addLog("Created");
+                .addTag(SpanTags.tag(SpanTags.EVENT_NODE, SpanTags.ID), () -> locNode.id().toString())
+                .addTag(SpanTags.tag(SpanTags.EVENT_NODE, SpanTags.CONSISTENT_ID),
+                    () -> locNode.consistentId().toString())
+                .addLog(() -> "Created");
 
             nodeLeftMsg.spanContainer().serializedSpanBytes(tracing.serialize(rootSpan));
 
             msgWorker.addMessage(nodeLeftMsg);
 
-            rootSpan.addLog("Sent").end();
+            rootSpan.addLog(() -> "Sent").end();
 
             synchronized (mux) {
                 long timeout = spi.netTimeout;
@@ -969,17 +970,18 @@
                     U.marshal(spi.marshaller(), evt));
 
             Span rootSpan = tracing.create(TraceableMessagesTable.traceName(msg.getClass()))
-                .addTag(SpanTags.tag(SpanTags.EVENT_NODE, SpanTags.ID), getLocalNodeId().toString())
-                .addTag(SpanTags.tag(SpanTags.EVENT_NODE, SpanTags.CONSISTENT_ID), locNode.consistentId().toString())
-                .addTag(SpanTags.MESSAGE_CLASS, ((CustomMessageWrapper)evt).delegate().getClass().getSimpleName())
-                .addLog("Created");
+                .addTag(SpanTags.tag(SpanTags.EVENT_NODE, SpanTags.ID), () -> getLocalNodeId().toString())
+                .addTag(SpanTags.tag(SpanTags.EVENT_NODE, SpanTags.CONSISTENT_ID),
+                    () -> locNode.consistentId().toString())
+                .addTag(SpanTags.MESSAGE_CLASS, () -> ((CustomMessageWrapper)evt).delegate().getClass().getSimpleName())
+                .addLog(() -> "Created");
 
             // This root span will be parent both from local and remote nodes.
             msg.spanContainer().serializedSpanBytes(tracing.serialize(rootSpan));
 
             msgWorker.addMessage(msg);
 
-            rootSpan.addLog("Sent").end();
+            rootSpan.addLog(() -> "Sent").end();
         }
         catch (IgniteCheckedException e) {
             throw new IgniteSpiException("Failed to marshal custom event: " + evt, e);
@@ -1063,9 +1065,10 @@
 
         joinReqMsg.spanContainer().span(
             tracing.create(TraceableMessagesTable.traceName(joinReqMsg.getClass()))
-                .addTag(SpanTags.tag(SpanTags.EVENT_NODE, SpanTags.ID), locNode.id().toString())
-                .addTag(SpanTags.tag(SpanTags.EVENT_NODE, SpanTags.CONSISTENT_ID), locNode.consistentId().toString())
-                .addLog("Created")
+                .addTag(SpanTags.tag(SpanTags.EVENT_NODE, SpanTags.ID), () -> locNode.id().toString())
+                .addTag(SpanTags.tag(SpanTags.EVENT_NODE, SpanTags.CONSISTENT_ID),
+                    () -> locNode.consistentId().toString())
+                .addLog(() -> "Created")
         );
 
         tracing.messages().beforeSend(joinReqMsg);
@@ -1196,8 +1199,8 @@
             log.debug("Discovery SPI has been connected to topology with order: " + locNode.internalOrder());
 
         joinReqMsg.spanContainer().span()
-            .addTag(SpanTags.tag(SpanTags.NODE, SpanTags.ORDER), locNode.order())
-            .addLog("Joined to ring")
+            .addTag(SpanTags.tag(SpanTags.NODE, SpanTags.ORDER), () -> String.valueOf(locNode.order()))
+            .addLog(() -> "Joined to ring")
             .end();
     }
 
@@ -3165,7 +3168,7 @@
 
                     if (msg instanceof TraceableMessage)
                         ((TraceableMessage) msg).spanContainer().span()
-                            .addLog("Ring failed")
+                            .addLog(() -> "Ring failed")
                             .setStatus(SpanStatus.ABORTED)
                             .end();
 
@@ -3200,7 +3203,7 @@
 
                     if (msg instanceof TraceableMessage)
                         ((TraceableMessage) msg).spanContainer().span()
-                            .addLog("Local node order not initialized")
+                            .addLog(() -> "Local node order not initialized")
                             .setStatus(SpanStatus.ABORTED)
                             .end();
 
@@ -4065,15 +4068,16 @@
             final UUID locNodeId = getLocalNodeId();
 
             msg.spanContainer().span()
-                .addTag(SpanTags.tag(SpanTags.EVENT_NODE, SpanTags.ID), node.id().toString())
-                .addTag(SpanTags.tag(SpanTags.EVENT_NODE, SpanTags.CONSISTENT_ID), node.consistentId().toString());
+                .addTag(SpanTags.tag(SpanTags.EVENT_NODE, SpanTags.ID), () -> node.id().toString())
+                .addTag(SpanTags.tag(SpanTags.EVENT_NODE, SpanTags.CONSISTENT_ID),
+                    () -> node.consistentId().toString());
 
             if (locNodeId.equals(node.id())) {
                 if (log.isDebugEnabled())
                     log.debug("Received join request for local node, dropping: " + msg);
 
                 msg.spanContainer().span()
-                    .addLog("Dropped")
+                    .addLog(() -> "Dropped")
                     .setStatus(SpanStatus.ABORTED)
                     .end();
 
@@ -4119,7 +4123,7 @@
 
                     // Ignore join request.
                     msg.spanContainer().span()
-                        .addLog("Ignored")
+                        .addLog(() -> "Ignored")
                         .setStatus(SpanStatus.ABORTED)
                         .end();
 
@@ -4141,7 +4145,7 @@
                             // Ignore this join request since existing node is about to fail
                             // and new node can continue.
                             msg.spanContainer().span()
-                                .addLog("Ignored")
+                                .addLog(() -> "Ignored")
                                 .setStatus(SpanStatus.ABORTED)
                                 .end();
 
@@ -4167,7 +4171,7 @@
 
                         // Ignore join request.
                         msg.spanContainer().span()
-                            .addLog("Ignored")
+                            .addLog(() -> "Ignored")
                             .setStatus(SpanStatus.ABORTED)
                             .end();
 
@@ -4211,7 +4215,7 @@
                         log.debug("Ignoring join request message since node is already in topology: " + msg);
 
                     msg.spanContainer().span()
-                        .addLog("Ignored")
+                        .addLog(() -> "Ignored")
                         .setStatus(SpanStatus.ABORTED)
                         .end();
 
@@ -4233,7 +4237,7 @@
                             }
 
                             msg.spanContainer().span()
-                                .addLog("Ignored")
+                                .addLog(() -> "Ignored")
                                 .setStatus(SpanStatus.ABORTED)
                                 .end();
 
@@ -4276,7 +4280,7 @@
 
                             // Ignore join request.
                             msg.spanContainer().span()
-                                .addLog("Ignored")
+                                .addLog(() -> "Ignored")
                                 .setStatus(SpanStatus.ABORTED)
                                 .end();
 
@@ -4316,7 +4320,7 @@
 
                                 // Ignore join request.
                                 msg.spanContainer().span()
-                                    .addLog("Ignored")
+                                    .addLog(() -> "Ignored")
                                     .setStatus(SpanStatus.ABORTED)
                                     .end();
 
@@ -4344,7 +4348,7 @@
 
                         // Ignore join request.
                         msg.spanContainer().span()
-                            .addLog("Ignored")
+                            .addLog(() -> "Ignored")
                             .setStatus(SpanStatus.ABORTED)
                             .end();
 
@@ -4417,7 +4421,7 @@
 
                     // Ignore join request.
                     msg.spanContainer().span()
-                        .addLog("Ignored")
+                        .addLog(() -> "Ignored")
                         .setStatus(SpanStatus.ABORTED)
                         .end();
 
@@ -4471,7 +4475,7 @@
 
                     // Ignore join request.
                     msg.spanContainer().span()
-                        .addLog("Ignored")
+                        .addLog(() -> "Ignored")
                         .setStatus(SpanStatus.ABORTED)
                         .end();
 
@@ -4522,7 +4526,7 @@
 
                     // Ignore join request.
                     msg.spanContainer().span()
-                        .addLog("Ignored")
+                        .addLog(() -> "Ignored")
                         .setStatus(SpanStatus.ABORTED)
                         .end();
 
@@ -4565,7 +4569,7 @@
 
                     // Ignore join request.
                     msg.spanContainer().span()
-                        .addLog("Ignored")
+                        .addLog(() -> "Ignored")
                         .setStatus(SpanStatus.ABORTED)
                         .end();
 
@@ -4612,7 +4616,7 @@
 
                     // Ignore join request.
                     msg.spanContainer().span()
-                        .addLog("Ignored")
+                        .addLog(() -> "Ignored")
                         .setStatus(SpanStatus.ABORTED)
                         .end();
 
@@ -4644,7 +4648,7 @@
 
                     // Ignore join request.
                     msg.spanContainer().span()
-                        .addLog("Ignored")
+                        .addLog(() -> "Ignored")
                         .setStatus(SpanStatus.ABORTED)
                         .end();
 
@@ -4691,7 +4695,7 @@
 
                     // Ignore join request.
                     msg.spanContainer().span()
-                        .addLog("Ignored")
+                        .addLog(() -> "Ignored")
                         .setStatus(SpanStatus.ABORTED)
                         .end();
 
@@ -4883,8 +4887,9 @@
             assert node != null;
 
             msg.spanContainer().span()
-                .addTag(SpanTags.tag(SpanTags.EVENT_NODE, SpanTags.ID), node.id().toString())
-                .addTag(SpanTags.tag(SpanTags.EVENT_NODE, SpanTags.CONSISTENT_ID), node.consistentId().toString());
+                .addTag(SpanTags.tag(SpanTags.EVENT_NODE, SpanTags.ID), () -> node.id().toString())
+                .addTag(SpanTags.tag(SpanTags.EVENT_NODE, SpanTags.CONSISTENT_ID),
+                    () -> node.consistentId().toString());
 
             if (node.internalOrder() < locNode.internalOrder()) {
                 if (!locNode.id().equals(node.id())) {
@@ -4919,9 +4924,9 @@
                     addFinishMsg = tracing.messages().branch(addFinishMsg, msg);
 
                     addFinishMsg.spanContainer().span()
-                        .addTag(SpanTags.tag(SpanTags.EVENT_NODE, SpanTags.ID), node.id().toString())
+                        .addTag(SpanTags.tag(SpanTags.EVENT_NODE, SpanTags.ID), () -> node.id().toString())
                         .addTag(SpanTags.tag(SpanTags.EVENT_NODE, SpanTags.CONSISTENT_ID),
-                            node.consistentId().toString());
+                            () -> node.consistentId().toString());
 
                     processNodeAddFinishedMessage(addFinishMsg);
 
@@ -4935,7 +4940,7 @@
                 msg.verify(locNodeId);
 
                 msg.spanContainer().span()
-                    .addLog("Verified");
+                    .addLog(() -> "Verified");
             }
             else if (!locNodeId.equals(node.id()) && ring.node(node.id()) != null) {
                 // Local node already has node from message in local topology.
@@ -4956,7 +4961,7 @@
                 }
 
                 msg.spanContainer().span()
-                    .addLog("Bypassed to crd")
+                    .addLog(() -> "Bypassed to crd")
                     .setStatus(SpanStatus.OK)
                     .end();
 
@@ -4969,7 +4974,7 @@
                         "joining node in topology [node=" + node + ", locNode=" + locNode + ", msg=" + msg + ']');
 
                     msg.spanContainer().span()
-                        .addLog("Discarded")
+                        .addLog(() -> "Discarded")
                         .setStatus(SpanStatus.ABORTED)
                         .end();
 
@@ -4988,7 +4993,7 @@
                             ", msg=" + msg + ']');
 
                     msg.spanContainer().span()
-                        .addLog("Discarded")
+                        .addLog(() -> "Discarded")
                         .setStatus(SpanStatus.ABORTED)
                         .end();
 
@@ -5202,7 +5207,7 @@
                                 log.debug("Discarding node added message with empty topology: " + msg);
 
                             msg.spanContainer().span()
-                                .addLog("Discarded")
+                                .addLog(() -> "Discarded")
                                 .setStatus(SpanStatus.ABORTED)
                                 .end();
 
@@ -5217,7 +5222,7 @@
                                 ", locNode=" + locNode + ']');
 
                         msg.spanContainer().span()
-                            .addLog("Discarded")
+                            .addLog(() -> "Discarded")
                             .setStatus(SpanStatus.ABORTED)
                             .end();
 
@@ -5446,7 +5451,7 @@
             UUID leavingNodeId = msg.creatorNodeId();
 
             msg.spanContainer().span()
-                .addTag(SpanTags.tag(SpanTags.EVENT_NODE, SpanTags.ID), leavingNodeId.toString());
+                .addTag(SpanTags.tag(SpanTags.EVENT_NODE, SpanTags.ID), () -> leavingNodeId.toString());
 
             if (locNodeId.equals(leavingNodeId)) {
                 if (msg.senderNodeId() == null) {
@@ -5506,7 +5511,7 @@
                     log.debug("Discarding node left message since node was not found: " + msg);
 
                 msg.spanContainer().span()
-                    .addLog("Discarded")
+                    .addLog(() -> "Discarded")
                     .setStatus(SpanStatus.ABORTED)
                     .end();
 
@@ -5520,7 +5525,7 @@
                     spi.stats.onRingMessageReceived(msg);
 
                     msg.spanContainer().span()
-                        .addLog("Ring failed")
+                        .addLog(() -> "Ring failed")
                         .setStatus(SpanStatus.ABORTED)
                         .end();
 
@@ -5532,7 +5537,7 @@
                 msg.verify(locNodeId);
 
                 msg.spanContainer().span()
-                    .addLog("Verified");
+                    .addLog(() -> "Verified");
             }
 
             if (msg.verified() && !locNodeId.equals(leavingNodeId)) {
@@ -6219,7 +6224,7 @@
                     msg.verify(getLocalNodeId());
 
                     msg.spanContainer().span()
-                        .addLog("Verified");
+                        .addLog(() -> "Verified");
 
                     msg.topologyVersion(ring.topologyVersion());
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/NoopSpiSpecificSpan.java b/modules/core/src/main/java/org/apache/ignite/spi/tracing/NoopSpiSpecificSpan.java
similarity index 96%
rename from modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/NoopSpiSpecificSpan.java
rename to modules/core/src/main/java/org/apache/ignite/spi/tracing/NoopSpiSpecificSpan.java
index 75661a6..8a3eadf 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/NoopSpiSpecificSpan.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/tracing/NoopSpiSpecificSpan.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.processors.tracing;
+package org.apache.ignite.spi.tracing;
 
 import java.util.Map;
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/NoopTracingSpi.java b/modules/core/src/main/java/org/apache/ignite/spi/tracing/NoopTracingSpi.java
similarity index 97%
rename from modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/NoopTracingSpi.java
rename to modules/core/src/main/java/org/apache/ignite/spi/tracing/NoopTracingSpi.java
index 636bd840..9077ccd 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/NoopTracingSpi.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/tracing/NoopTracingSpi.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.processors.tracing;
+package org.apache.ignite.spi.tracing;
 
 import org.apache.ignite.spi.IgniteSpiAdapter;
 import org.apache.ignite.spi.IgniteSpiConsistencyChecked;
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/Scope.java b/modules/core/src/main/java/org/apache/ignite/spi/tracing/Scope.java
similarity index 96%
rename from modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/Scope.java
rename to modules/core/src/main/java/org/apache/ignite/spi/tracing/Scope.java
index b45ae00..3c5cc2c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/Scope.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/tracing/Scope.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.processors.tracing;
+package org.apache.ignite.spi.tracing;
 
 /**
  * Tracing span scope.
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/SpanStatus.java b/modules/core/src/main/java/org/apache/ignite/spi/tracing/SpanStatus.java
similarity index 94%
rename from modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/SpanStatus.java
rename to modules/core/src/main/java/org/apache/ignite/spi/tracing/SpanStatus.java
index 914adb1..05a52b5 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/SpanStatus.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/tracing/SpanStatus.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.processors.tracing;
+package org.apache.ignite.spi.tracing;
 
 /**
  * Various statuses for Spans execution.
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/SpiSpecificSpan.java b/modules/core/src/main/java/org/apache/ignite/spi/tracing/SpiSpecificSpan.java
similarity index 97%
rename from modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/SpiSpecificSpan.java
rename to modules/core/src/main/java/org/apache/ignite/spi/tracing/SpiSpecificSpan.java
index 73e45df..c8047bb 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/SpiSpecificSpan.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/tracing/SpiSpecificSpan.java
@@ -14,7 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.ignite.internal.processors.tracing;
+
+package org.apache.ignite.spi.tracing;
 
 import java.util.Map;
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/configuration/TracingConfigurationCoordinates.java b/modules/core/src/main/java/org/apache/ignite/spi/tracing/TracingConfigurationCoordinates.java
similarity index 96%
rename from modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/configuration/TracingConfigurationCoordinates.java
rename to modules/core/src/main/java/org/apache/ignite/spi/tracing/TracingConfigurationCoordinates.java
index ab6b631..697b340 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/configuration/TracingConfigurationCoordinates.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/tracing/TracingConfigurationCoordinates.java
@@ -15,9 +15,8 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.processors.tracing.configuration;
+package org.apache.ignite.spi.tracing;
 
-import org.apache.ignite.internal.processors.tracing.Scope;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/configuration/TracingConfigurationManager.java b/modules/core/src/main/java/org/apache/ignite/spi/tracing/TracingConfigurationManager.java
similarity index 97%
rename from modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/configuration/TracingConfigurationManager.java
rename to modules/core/src/main/java/org/apache/ignite/spi/tracing/TracingConfigurationManager.java
index 3b5ddeb..cfc2279 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/configuration/TracingConfigurationManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/tracing/TracingConfigurationManager.java
@@ -15,18 +15,19 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.processors.tracing.configuration;
+package org.apache.ignite.spi.tracing;
 
 import java.util.Collections;
 import java.util.Map;
 import org.apache.ignite.IgniteException;
-import org.apache.ignite.internal.processors.tracing.Scope;
+import org.apache.ignite.lang.IgniteExperimental;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
 /**
  * Allows to configure tracing, read the configuration and restore it to the defaults.
  */
+@IgniteExperimental
 public interface TracingConfigurationManager {
     /** Default transaction tracing configuration. */
     static final TracingConfigurationParameters DEFAULT_TX_CONFIGURATION =
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/configuration/TracingConfigurationParameters.java b/modules/core/src/main/java/org/apache/ignite/spi/tracing/TracingConfigurationParameters.java
similarity index 91%
rename from modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/configuration/TracingConfigurationParameters.java
rename to modules/core/src/main/java/org/apache/ignite/spi/tracing/TracingConfigurationParameters.java
index f10f22d..b4c90ac 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/configuration/TracingConfigurationParameters.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/tracing/TracingConfigurationParameters.java
@@ -15,12 +15,11 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.processors.tracing.configuration;
+package org.apache.ignite.spi.tracing;
 
 import java.io.Serializable;
 import java.util.Collections;
 import java.util.Set;
-import org.apache.ignite.internal.processors.tracing.Scope;
 import org.apache.ignite.internal.processors.tracing.Span;
 import org.jetbrains.annotations.NotNull;
 
@@ -48,7 +47,7 @@
      * In other words, if the child's span scope is equal to parent's scope
      * or it belongs to the parent's span included scopes, then the given child span will be attached to the current trace,
      * otherwise it'll be skipped.
-     * See {@link Span#isChainable(org.apache.ignite.internal.processors.tracing.Scope)} for more details.
+     * See {@link Span#isChainable(Scope)} for more details.
      */
     private final Set<Scope> includedScopes;
 
@@ -61,7 +60,7 @@
      *  In other words, if child's span scope is equals to parent's scope
      *  or it belongs to the parent's span included scopes, then given child span will be attached to the current trace,
      *  otherwise it'll be skipped.
-     *  See {@link Span#isChainable(org.apache.ignite.internal.processors.tracing.Scope)} for more details.
+     *  See {@link Span#isChainable(Scope)} for more details.
      */
     private TracingConfigurationParameters(double samplingRate,
         Set<Scope> includedScopes) {
@@ -82,7 +81,7 @@
      * In other words, if child's span scope is equals to parent's scope
      * or it belongs to the parent's span included scopes, then given child span will be attached to the current trace,
      * otherwise it'll be skipped.
-     * See {@link Span#isChainable(org.apache.ignite.internal.processors.tracing.Scope)} for more details.
+     * See {@link Span#isChainable(Scope)} for more details.
      * If no scopes are specified, empty set will be returned.
      */
     public @NotNull Set<Scope> includedScopes() {
@@ -137,7 +136,7 @@
          * In other words, if child's span scope is equals to parent's scope
          * or it belongs to the parent's span included scopes, then given child span will be attached to the current trace,
          * otherwise it'll be skipped.
-         * See {@link Span#isChainable(org.apache.ignite.internal.processors.tracing.Scope)} for more details.
+         * See {@link Span#isChainable(Scope)} for more details.
          * @return {@code TracingConfigurationParameters} instance.
          */
         public @NotNull Builder withIncludedScopes(Set<Scope> includedScopes) {
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/TracingSpi.java b/modules/core/src/main/java/org/apache/ignite/spi/tracing/TracingSpi.java
similarity index 97%
rename from modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/TracingSpi.java
rename to modules/core/src/main/java/org/apache/ignite/spi/tracing/TracingSpi.java
index 7ada904..aa93f2b 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/TracingSpi.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/tracing/TracingSpi.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.processors.tracing;
+package org.apache.ignite.spi.tracing;
 
 import org.apache.ignite.spi.IgniteSpi;
 import org.jetbrains.annotations.NotNull;
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/TracingSpiType.java b/modules/core/src/main/java/org/apache/ignite/spi/tracing/TracingSpiType.java
similarity index 95%
rename from modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/TracingSpiType.java
rename to modules/core/src/main/java/org/apache/ignite/spi/tracing/TracingSpiType.java
index 929e096..f09a9d9 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/TracingSpiType.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/tracing/TracingSpiType.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.processors.tracing;
+package org.apache.ignite.spi.tracing;
 
 /**
  * Type of the tracing spi.
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/SpanStatus.java b/modules/core/src/main/java/org/apache/ignite/spi/tracing/package-info.java
similarity index 78%
copy from modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/SpanStatus.java
copy to modules/core/src/main/java/org/apache/ignite/spi/tracing/package-info.java
index 914adb1..6322430 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/SpanStatus.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/tracing/package-info.java
@@ -15,16 +15,8 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.processors.tracing;
-
 /**
- * Various statuses for Spans execution.
+ * <!-- Package description. -->
+ * Contains common classes and interfaces for tracing SPI implementations.
  */
-public enum SpanStatus {
-    /** Ok. */
-    OK,
-    /** Cancelled. */
-    CANCELLED,
-    /** Aborted. */
-    ABORTED
-}
+package org.apache.ignite.spi.tracing;
diff --git a/modules/core/src/main/resources/META-INF/classnames.properties b/modules/core/src/main/resources/META-INF/classnames.properties
index 90120c0..7d0246f 100644
--- a/modules/core/src/main/resources/META-INF/classnames.properties
+++ b/modules/core/src/main/resources/META-INF/classnames.properties
@@ -1768,6 +1768,8 @@
 org.apache.ignite.internal.processors.task.GridTaskWorker$5
 org.apache.ignite.internal.processors.task.GridTaskWorker$State
 org.apache.ignite.internal.processors.timeout.GridTimeoutProcessor$2
+org.apache.ignite.spi.tracing.SpanStatus
+org.apache.ignite.internal.processors.tracing.messages.SpanContainer
 org.apache.ignite.internal.sql.SqlLexerTokenType
 org.apache.ignite.internal.sql.SqlParseException
 org.apache.ignite.internal.sql.SqlStrictParseException
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/commandline/CommandHandlerParsingTest.java b/modules/core/src/test/java/org/apache/ignite/internal/commandline/CommandHandlerParsingTest.java
index 87a97f0..6581e08 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/commandline/CommandHandlerParsingTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/commandline/CommandHandlerParsingTest.java
@@ -32,7 +32,7 @@
 import org.apache.ignite.internal.commandline.cache.CacheValidateIndexes;
 import org.apache.ignite.internal.commandline.cache.FindAndDeleteGarbage;
 import org.apache.ignite.internal.commandline.cache.argument.FindAndDeleteGarbageArg;
-import org.apache.ignite.internal.processors.tracing.Scope;
+import org.apache.ignite.spi.tracing.Scope;
 import org.apache.ignite.internal.util.typedef.T2;
 import org.apache.ignite.internal.visor.tx.VisorTxOperation;
 import org.apache.ignite.internal.visor.tx.VisorTxProjection;
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsIgniteMock.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsIgniteMock.java
index 02712ed..4c7e984 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsIgniteMock.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsIgniteMock.java
@@ -65,13 +65,13 @@
 import org.apache.ignite.internal.processors.cache.IgniteInternalCache;
 import org.apache.ignite.internal.processors.hadoop.Hadoop;
 import org.apache.ignite.internal.processors.tracing.configuration.NoopTracingConfigurationManager;
-import org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationManager;
 import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.lang.IgniteBiTuple;
 import org.apache.ignite.lang.IgnitePredicate;
 import org.apache.ignite.lang.IgniteProductVersion;
 import org.apache.ignite.plugin.IgnitePlugin;
 import org.apache.ignite.plugin.PluginNotFoundException;
+import org.apache.ignite.spi.tracing.TracingConfigurationManager;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/junits/IgniteMock.java b/modules/core/src/test/java/org/apache/ignite/testframework/junits/IgniteMock.java
index 9573f5e..5da2f72 100644
--- a/modules/core/src/test/java/org/apache/ignite/testframework/junits/IgniteMock.java
+++ b/modules/core/src/test/java/org/apache/ignite/testframework/junits/IgniteMock.java
@@ -68,7 +68,7 @@
 import org.apache.ignite.internal.binary.builder.BinaryObjectBuilderImpl;
 import org.apache.ignite.internal.processors.cacheobject.NoOpBinary;
 import org.apache.ignite.internal.processors.tracing.configuration.NoopTracingConfigurationManager;
-import org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationManager;
+import org.apache.ignite.spi.tracing.TracingConfigurationManager;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgniteProductVersion;
 import org.apache.ignite.logger.NullLogger;
diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/junits/multijvm/IgniteProcessProxy.java b/modules/core/src/test/java/org/apache/ignite/testframework/junits/multijvm/IgniteProcessProxy.java
index 5151d9e..344c31e 100644
--- a/modules/core/src/test/java/org/apache/ignite/testframework/junits/multijvm/IgniteProcessProxy.java
+++ b/modules/core/src/test/java/org/apache/ignite/testframework/junits/multijvm/IgniteProcessProxy.java
@@ -82,7 +82,7 @@
 import org.apache.ignite.internal.processors.cache.GridCacheUtilityKey;
 import org.apache.ignite.internal.processors.cache.IgniteInternalCache;
 import org.apache.ignite.internal.processors.hadoop.Hadoop;
-import org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationManager;
+import org.apache.ignite.spi.tracing.TracingConfigurationManager;
 import org.apache.ignite.internal.util.GridJavaProcess;
 import org.apache.ignite.internal.util.lang.IgnitePredicateX;
 import org.apache.ignite.internal.util.typedef.G;
diff --git a/modules/core/src/test/java/org/apache/ignite/util/GridCommandHandlerTracingConfigurationTest.java b/modules/core/src/test/java/org/apache/ignite/util/GridCommandHandlerTracingConfigurationTest.java
index a0963db..b507484 100644
--- a/modules/core/src/test/java/org/apache/ignite/util/GridCommandHandlerTracingConfigurationTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/util/GridCommandHandlerTracingConfigurationTest.java
@@ -24,18 +24,18 @@
 import java.util.Map;
 import org.apache.ignite.internal.IgniteEx;
 import org.apache.ignite.internal.commandline.CommandHandler;
-import org.apache.ignite.internal.processors.tracing.Scope;
-import org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationCoordinates;
-import org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationManager;
-import org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationParameters;
+import org.apache.ignite.spi.tracing.Scope;
+import org.apache.ignite.spi.tracing.TracingConfigurationCoordinates;
+import org.apache.ignite.spi.tracing.TracingConfigurationManager;
+import org.apache.ignite.spi.tracing.TracingConfigurationParameters;
 import org.apache.ignite.internal.commandline.TracingConfigurationCommand;
 import org.apache.ignite.internal.visor.tracing.configuration.VisorTracingConfigurationTaskResult;
 import org.junit.Test;
 
 import static org.apache.ignite.internal.commandline.CommandHandler.EXIT_CODE_OK;
-import static org.apache.ignite.internal.processors.tracing.Scope.COMMUNICATION;
-import static org.apache.ignite.internal.processors.tracing.Scope.EXCHANGE;
-import static org.apache.ignite.internal.processors.tracing.Scope.TX;
+import static org.apache.ignite.spi.tracing.Scope.COMMUNICATION;
+import static org.apache.ignite.spi.tracing.Scope.EXCHANGE;
+import static org.apache.ignite.spi.tracing.Scope.TX;
 
 /**
  * Tests for {@link TracingConfigurationCommand}
diff --git a/modules/core/src/test/resources/org.apache.ignite.util/GridCommandHandlerClusterByClassWithSSLTest_help.output b/modules/core/src/test/resources/org.apache.ignite.util/GridCommandHandlerClusterByClassWithSSLTest_help.output
index 2106289..4e024f6 100644
--- a/modules/core/src/test/resources/org.apache.ignite.util/GridCommandHandlerClusterByClassWithSSLTest_help.output
+++ b/modules/core/src/test/resources/org.apache.ignite.util/GridCommandHandlerClusterByClassWithSSLTest_help.output
@@ -113,6 +113,24 @@
     Parameters:
       snapshot_name  - Snapshot name.
 
+  Print tracing configuration:
+    control.(sh|bat) --tracing-configuration
+
+  Print tracing configuration:
+    control.(sh|bat) --tracing-configuration get_all [--scope DISCOVERY|EXCHANGE|COMMUNICATION|TX]
+
+  Print specific tracing configuration based on specified --scope and --label:
+    control.(sh|bat) --tracing-configuration get (--scope DISCOVERY|EXCHANGE|COMMUNICATION|TX) [--label]
+
+  Reset all specific tracing configuration the to default. If --scope is specified, then remove all label specific configuration for the given scope and reset given scope specific configuration to the default, if --scope is skipped then reset all tracing configurations to the default. Print tracing configuration.
+    control.(sh|bat) --tracing-configuration reset_all [--scope DISCOVERY|EXCHANGE|COMMUNICATION|TX]
+
+  Reset specific tracing configuration to the default. If both --scope and --label are specified then remove given configuration, if only --scope is specified then reset given configuration to the default. Print reseted configuration.
+    control.(sh|bat) --tracing-configuration reset (--scope DISCOVERY|EXCHANGE|COMMUNICATION|TX) [--label]
+
+  Set new tracing configuration. If both --scope and --label are specified then add or override label specific configuration, if only --scope is specified, then override scope specific configuration. Print applied configuration.
+    control.(sh|bat) --tracing-configuration set (--scope DISCOVERY|EXCHANGE|COMMUNICATION|TX [--label] [--sampling-rate Decimal value between 0 and 1, where 0 means never and 1 means always. More or less reflects the probability of sampling specific trace.] [--included-scopes Set of scopes with comma as separator  DISCOVERY|EXCHANGE|COMMUNICATION|TX])
+
 By default commands affecting the cluster require interactive confirmation.
 Use --yes option to disable it.
 
diff --git a/modules/opencensus/src/main/java/org/apache/ignite/spi/tracing/opencensus/OpenCensusSpanAdapter.java b/modules/opencensus/src/main/java/org/apache/ignite/spi/tracing/opencensus/OpenCensusSpanAdapter.java
index 6dd5a7e..62af892 100644
--- a/modules/opencensus/src/main/java/org/apache/ignite/spi/tracing/opencensus/OpenCensusSpanAdapter.java
+++ b/modules/opencensus/src/main/java/org/apache/ignite/spi/tracing/opencensus/OpenCensusSpanAdapter.java
@@ -21,9 +21,8 @@
 import java.util.stream.Collectors;
 import io.opencensus.trace.Annotation;
 import io.opencensus.trace.AttributeValue;
-import org.apache.ignite.internal.processors.tracing.SpanStatus;
-import org.apache.ignite.internal.processors.tracing.SpiSpecificSpan;
-import org.apache.ignite.opencensus.spi.tracing.StatusMatchTable;
+import org.apache.ignite.spi.tracing.SpanStatus;
+import org.apache.ignite.spi.tracing.SpiSpecificSpan;
 
 /**
  * Span implementation based on OpenCensus library.
diff --git a/modules/opencensus/src/main/java/org/apache/ignite/spi/tracing/opencensus/OpenCensusTracingSpi.java b/modules/opencensus/src/main/java/org/apache/ignite/spi/tracing/opencensus/OpenCensusTracingSpi.java
index a7ff4f8..243f1f8 100644
--- a/modules/opencensus/src/main/java/org/apache/ignite/spi/tracing/opencensus/OpenCensusTracingSpi.java
+++ b/modules/opencensus/src/main/java/org/apache/ignite/spi/tracing/opencensus/OpenCensusTracingSpi.java
@@ -25,9 +25,9 @@
 import io.opencensus.trace.Tracing;
 import io.opencensus.trace.export.SpanExporter;
 import io.opencensus.trace.samplers.Samplers;
-import org.apache.ignite.internal.processors.tracing.SpiSpecificSpan;
-import org.apache.ignite.internal.processors.tracing.TracingSpi;
-import org.apache.ignite.internal.processors.tracing.TracingSpiType;
+import org.apache.ignite.spi.tracing.SpiSpecificSpan;
+import org.apache.ignite.spi.tracing.TracingSpi;
+import org.apache.ignite.spi.tracing.TracingSpiType;
 import org.apache.ignite.internal.util.typedef.internal.LT;
 import org.apache.ignite.opencensus.spi.tracing.OpenCensusTraceExporter;
 import org.apache.ignite.spi.IgniteSpiAdapter;
@@ -37,8 +37,8 @@
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
-import static org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationParameters.SAMPLING_RATE_ALWAYS;
-import static org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationParameters.SAMPLING_RATE_NEVER;
+import static org.apache.ignite.spi.tracing.TracingConfigurationParameters.SAMPLING_RATE_ALWAYS;
+import static org.apache.ignite.spi.tracing.TracingConfigurationParameters.SAMPLING_RATE_NEVER;
 
 /**
  * Tracing SPI implementation based on OpenCensus library.
diff --git a/modules/opencensus/src/main/java/org/apache/ignite/opencensus/spi/tracing/StatusMatchTable.java b/modules/opencensus/src/main/java/org/apache/ignite/spi/tracing/opencensus/StatusMatchTable.java
similarity index 93%
rename from modules/opencensus/src/main/java/org/apache/ignite/opencensus/spi/tracing/StatusMatchTable.java
rename to modules/opencensus/src/main/java/org/apache/ignite/spi/tracing/opencensus/StatusMatchTable.java
index 949ab30..7530152 100644
--- a/modules/opencensus/src/main/java/org/apache/ignite/opencensus/spi/tracing/StatusMatchTable.java
+++ b/modules/opencensus/src/main/java/org/apache/ignite/spi/tracing/opencensus/StatusMatchTable.java
@@ -15,12 +15,12 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.opencensus.spi.tracing;
+package org.apache.ignite.spi.tracing.opencensus;
 
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import org.apache.ignite.IgniteException;
-import org.apache.ignite.internal.processors.tracing.SpanStatus;
+import org.apache.ignite.spi.tracing.SpanStatus;
 
 /**
  * Table to match OpenCensus span statuses with declared in Tracing SPI.
diff --git a/modules/opencensus/src/test/java/org/apache/ignite/TracingConfigurationValidationTest.java b/modules/opencensus/src/test/java/org/apache/ignite/TracingConfigurationValidationTest.java
index 60d5019..753311d3 100644
--- a/modules/opencensus/src/test/java/org/apache/ignite/TracingConfigurationValidationTest.java
+++ b/modules/opencensus/src/test/java/org/apache/ignite/TracingConfigurationValidationTest.java
@@ -23,17 +23,17 @@
 import java.util.Set;
 import java.util.stream.Stream;
 
-import org.apache.ignite.internal.processors.tracing.Scope;
-import org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationCoordinates;
-import org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationParameters;
+import org.apache.ignite.spi.tracing.Scope;
+import org.apache.ignite.spi.tracing.TracingConfigurationCoordinates;
+import org.apache.ignite.spi.tracing.TracingConfigurationParameters;
 import org.apache.ignite.testframework.GridTestUtils;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.junit.Test;
 
-import static org.apache.ignite.internal.processors.tracing.Scope.COMMUNICATION;
-import static org.apache.ignite.internal.processors.tracing.Scope.DISCOVERY;
-import static org.apache.ignite.internal.processors.tracing.Scope.EXCHANGE;
-import static org.apache.ignite.internal.processors.tracing.Scope.TX;
+import static org.apache.ignite.spi.tracing.Scope.COMMUNICATION;
+import static org.apache.ignite.spi.tracing.Scope.DISCOVERY;
+import static org.apache.ignite.spi.tracing.Scope.EXCHANGE;
+import static org.apache.ignite.spi.tracing.Scope.TX;
 
 /**
  * Tests for tracing configuration validation rules.
diff --git a/modules/opencensus/src/test/java/org/apache/ignite/internal/processors/monitoring/opencensus/AbstractTracingTest.java b/modules/opencensus/src/test/java/org/apache/ignite/internal/processors/monitoring/opencensus/AbstractTracingTest.java
index 386a822..03b0f39 100644
--- a/modules/opencensus/src/test/java/org/apache/ignite/internal/processors/monitoring/opencensus/AbstractTracingTest.java
+++ b/modules/opencensus/src/test/java/org/apache/ignite/internal/processors/monitoring/opencensus/AbstractTracingTest.java
@@ -39,12 +39,12 @@
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.internal.IgniteInterruptedCheckedException;
-import org.apache.ignite.internal.processors.tracing.Scope;
+import org.apache.ignite.spi.tracing.Scope;
 import org.apache.ignite.internal.processors.tracing.SpanType;
-import org.apache.ignite.internal.processors.tracing.TracingSpi;
-import org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationManager;
-import org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationCoordinates;
-import org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationParameters;
+import org.apache.ignite.spi.tracing.TracingSpi;
+import org.apache.ignite.spi.tracing.TracingConfigurationManager;
+import org.apache.ignite.spi.tracing.TracingConfigurationCoordinates;
+import org.apache.ignite.spi.tracing.TracingConfigurationParameters;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.opencensus.spi.tracing.OpenCensusTraceExporter;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
@@ -53,9 +53,9 @@
 import org.junit.BeforeClass;
 
 import static io.opencensus.trace.AttributeValue.stringAttributeValue;
-import static org.apache.ignite.internal.processors.tracing.Scope.COMMUNICATION;
-import static org.apache.ignite.internal.processors.tracing.Scope.EXCHANGE;
-import static org.apache.ignite.internal.processors.tracing.Scope.TX;
+import static org.apache.ignite.spi.tracing.Scope.COMMUNICATION;
+import static org.apache.ignite.spi.tracing.Scope.EXCHANGE;
+import static org.apache.ignite.spi.tracing.Scope.TX;
 
 /**
  * Abstract class for open census tracing tests.
diff --git a/modules/opencensus/src/test/java/org/apache/ignite/internal/processors/monitoring/opencensus/MixedTracingSpiTest.java b/modules/opencensus/src/test/java/org/apache/ignite/internal/processors/monitoring/opencensus/MixedTracingSpiTest.java
index 0cf46be..9cae7d5 100644
--- a/modules/opencensus/src/test/java/org/apache/ignite/internal/processors/monitoring/opencensus/MixedTracingSpiTest.java
+++ b/modules/opencensus/src/test/java/org/apache/ignite/internal/processors/monitoring/opencensus/MixedTracingSpiTest.java
@@ -18,7 +18,7 @@
 package org.apache.ignite.internal.processors.monitoring.opencensus;
 
 import java.util.List;
-import org.apache.ignite.internal.processors.tracing.NoopTracingSpi;
+import org.apache.ignite.spi.tracing.NoopTracingSpi;
 import org.apache.ignite.spi.tracing.opencensus.OpenCensusTracingSpi;
 import org.apache.ignite.testframework.ListeningTestLogger;
 import org.apache.ignite.testframework.LogListener;
diff --git a/modules/opencensus/src/test/java/org/apache/ignite/internal/processors/monitoring/opencensus/OpenCensusTracingConfigurationGetAllTest.java b/modules/opencensus/src/test/java/org/apache/ignite/internal/processors/monitoring/opencensus/OpenCensusTracingConfigurationGetAllTest.java
index 2913ac6..e2a9e84 100644
--- a/modules/opencensus/src/test/java/org/apache/ignite/internal/processors/monitoring/opencensus/OpenCensusTracingConfigurationGetAllTest.java
+++ b/modules/opencensus/src/test/java/org/apache/ignite/internal/processors/monitoring/opencensus/OpenCensusTracingConfigurationGetAllTest.java
@@ -19,15 +19,15 @@
 
 import java.util.HashMap;
 import java.util.Map;
-import org.apache.ignite.internal.processors.tracing.TracingSpi;
-import org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationCoordinates;
-import org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationParameters;
+import org.apache.ignite.spi.tracing.TracingSpi;
+import org.apache.ignite.spi.tracing.TracingConfigurationCoordinates;
+import org.apache.ignite.spi.tracing.TracingConfigurationParameters;
 import org.apache.ignite.spi.tracing.opencensus.OpenCensusTracingSpi;
-import org.apache.ignite.internal.processors.tracing.Scope;
-import org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationManager;
+import org.apache.ignite.spi.tracing.Scope;
+import org.apache.ignite.spi.tracing.TracingConfigurationManager;
 import org.junit.Test;
 
-import static org.apache.ignite.internal.processors.tracing.Scope.TX;
+import static org.apache.ignite.spi.tracing.Scope.TX;
 
 /**
  * Tests for OpenCensus based {@link TracingConfigurationManager#getAll(Scope)}.
diff --git a/modules/opencensus/src/test/java/org/apache/ignite/internal/processors/monitoring/opencensus/OpenCensusTracingConfigurationGetTest.java b/modules/opencensus/src/test/java/org/apache/ignite/internal/processors/monitoring/opencensus/OpenCensusTracingConfigurationGetTest.java
index d46229b..fcbe7e8 100644
--- a/modules/opencensus/src/test/java/org/apache/ignite/internal/processors/monitoring/opencensus/OpenCensusTracingConfigurationGetTest.java
+++ b/modules/opencensus/src/test/java/org/apache/ignite/internal/processors/monitoring/opencensus/OpenCensusTracingConfigurationGetTest.java
@@ -19,15 +19,15 @@
 
 import java.util.Collections;
 
-import org.apache.ignite.internal.processors.tracing.TracingSpi;
-import org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationManager;
-import org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationCoordinates;
-import org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationParameters;
+import org.apache.ignite.spi.tracing.TracingSpi;
+import org.apache.ignite.spi.tracing.TracingConfigurationManager;
+import org.apache.ignite.spi.tracing.TracingConfigurationCoordinates;
+import org.apache.ignite.spi.tracing.TracingConfigurationParameters;
 import org.apache.ignite.spi.tracing.opencensus.OpenCensusTracingSpi;
 import org.junit.Test;
 
-import static org.apache.ignite.internal.processors.tracing.Scope.COMMUNICATION;
-import static org.apache.ignite.internal.processors.tracing.Scope.TX;
+import static org.apache.ignite.spi.tracing.Scope.COMMUNICATION;
+import static org.apache.ignite.spi.tracing.Scope.TX;
 
 /**
  * Tests for OpenCensus based {@link TracingConfigurationManager#get(TracingConfigurationCoordinates)}.
diff --git a/modules/opencensus/src/test/java/org/apache/ignite/internal/processors/monitoring/opencensus/OpenCensusTracingConfigurationResetAllTest.java b/modules/opencensus/src/test/java/org/apache/ignite/internal/processors/monitoring/opencensus/OpenCensusTracingConfigurationResetAllTest.java
index 4827f13..ca3977d 100644
--- a/modules/opencensus/src/test/java/org/apache/ignite/internal/processors/monitoring/opencensus/OpenCensusTracingConfigurationResetAllTest.java
+++ b/modules/opencensus/src/test/java/org/apache/ignite/internal/processors/monitoring/opencensus/OpenCensusTracingConfigurationResetAllTest.java
@@ -19,15 +19,16 @@
 
 import java.util.HashMap;
 import java.util.Map;
-import org.apache.ignite.internal.processors.tracing.Scope;
-import org.apache.ignite.internal.processors.tracing.TracingSpi;
-import org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationCoordinates;
-import org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationParameters;
+
+import org.apache.ignite.spi.tracing.Scope;
+import org.apache.ignite.spi.tracing.TracingSpi;
+import org.apache.ignite.spi.tracing.TracingConfigurationCoordinates;
+import org.apache.ignite.spi.tracing.TracingConfigurationParameters;
 import org.apache.ignite.spi.tracing.opencensus.OpenCensusTracingSpi;
-import org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationManager;
+import org.apache.ignite.spi.tracing.TracingConfigurationManager;
 import org.junit.Test;
 
-import static org.apache.ignite.internal.processors.tracing.Scope.TX;
+import static org.apache.ignite.spi.tracing.Scope.TX;
 
 /**
  * Tests for OpenCensus based {@link TracingConfigurationManager#resetAll(Scope)}.
diff --git a/modules/opencensus/src/test/java/org/apache/ignite/internal/processors/monitoring/opencensus/OpenCensusTracingConfigurationResetTest.java b/modules/opencensus/src/test/java/org/apache/ignite/internal/processors/monitoring/opencensus/OpenCensusTracingConfigurationResetTest.java
index c415901..58a7b65 100644
--- a/modules/opencensus/src/test/java/org/apache/ignite/internal/processors/monitoring/opencensus/OpenCensusTracingConfigurationResetTest.java
+++ b/modules/opencensus/src/test/java/org/apache/ignite/internal/processors/monitoring/opencensus/OpenCensusTracingConfigurationResetTest.java
@@ -19,10 +19,11 @@
 
 import java.util.HashMap;
 import java.util.Map;
-import org.apache.ignite.internal.processors.tracing.TracingSpi;
-import org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationManager;
-import org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationCoordinates;
-import org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationParameters;
+
+import org.apache.ignite.spi.tracing.TracingSpi;
+import org.apache.ignite.spi.tracing.TracingConfigurationManager;
+import org.apache.ignite.spi.tracing.TracingConfigurationCoordinates;
+import org.apache.ignite.spi.tracing.TracingConfigurationParameters;
 import org.apache.ignite.spi.tracing.opencensus.OpenCensusTracingSpi;
 import org.junit.Test;
 
diff --git a/modules/opencensus/src/test/java/org/apache/ignite/internal/processors/monitoring/opencensus/OpenCensusTracingSpiTest.java b/modules/opencensus/src/test/java/org/apache/ignite/internal/processors/monitoring/opencensus/OpenCensusTracingSpiTest.java
index 7fea652..af3a15c 100644
--- a/modules/opencensus/src/test/java/org/apache/ignite/internal/processors/monitoring/opencensus/OpenCensusTracingSpiTest.java
+++ b/modules/opencensus/src/test/java/org/apache/ignite/internal/processors/monitoring/opencensus/OpenCensusTracingSpiTest.java
@@ -27,11 +27,11 @@
 import org.apache.ignite.internal.IgniteEx;
 import org.apache.ignite.internal.IgniteFeatures;
 import org.apache.ignite.internal.processors.tracing.MTC;
-import org.apache.ignite.internal.processors.tracing.Scope;
+import org.apache.ignite.spi.tracing.Scope;
 import org.apache.ignite.internal.processors.tracing.SpanTags;
-import org.apache.ignite.internal.processors.tracing.TracingSpi;
-import org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationCoordinates;
-import org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationParameters;
+import org.apache.ignite.spi.tracing.TracingSpi;
+import org.apache.ignite.spi.tracing.TracingConfigurationCoordinates;
+import org.apache.ignite.spi.tracing.TracingConfigurationParameters;
 import org.apache.ignite.spi.tracing.opencensus.OpenCensusTracingSpi;
 import org.junit.Assert;
 import org.junit.Test;
@@ -49,7 +49,7 @@
 import static org.apache.ignite.internal.processors.tracing.SpanType.DISCOVERY_NODE_JOIN_REQUEST;
 import static org.apache.ignite.internal.processors.tracing.SpanType.DISCOVERY_NODE_LEFT;
 import static org.apache.ignite.internal.processors.tracing.SpanType.EXCHANGE_FUTURE;
-import static org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationParameters.SAMPLING_RATE_ALWAYS;
+import static org.apache.ignite.spi.tracing.TracingConfigurationParameters.SAMPLING_RATE_ALWAYS;
 
 /**
  * Tests to check correctness of OpenCensus Tracing SPI implementation.
@@ -249,7 +249,7 @@
             List<SpanData> exchFutSpans = handler().spansReportedByNode(getTestIgniteInstanceName(i))
                 .filter(span -> EXCHANGE_FUTURE.spanName().equals(span.getName()))
                 .filter(span -> span.getStatus() == Status.OK)
-                .filter(span -> AttributeValue.longAttributeValue(EventType.EVT_NODE_LEFT).equals(
+                .filter(span -> AttributeValue.stringAttributeValue(String.valueOf(EventType.EVT_NODE_LEFT)).equals(
                     span.getAttributes().getAttributeMap().get(SpanTags.tag(SpanTags.EVENT, SpanTags.TYPE))))
                 .filter(span -> stringAttributeValue(leftNodeId).equals(
                     span.getAttributes().getAttributeMap().get(SpanTags.tag(SpanTags.EVENT_NODE, SpanTags.ID))))
@@ -280,13 +280,13 @@
                 );
                 Assert.assertEquals(
                     "Exchange future major topology version is invalid " + span,
-                    AttributeValue.longAttributeValue(curTopVer + 1),
+                    AttributeValue.stringAttributeValue(String.valueOf(curTopVer + 1)),
                     span.getAttributes().getAttributeMap().get(
                         SpanTags.tag(SpanTags.RESULT, SpanTags.TOPOLOGY_VERSION, SpanTags.MAJOR))
                 );
                 Assert.assertEquals(
                     "Exchange future minor version is invalid " + span,
-                    AttributeValue.longAttributeValue(0),
+                    AttributeValue.stringAttributeValue("0"),
                     span.getAttributes().getAttributeMap().get(
                         SpanTags.tag(SpanTags.RESULT, SpanTags.TOPOLOGY_VERSION, SpanTags.MINOR))
                 );
diff --git a/modules/opencensus/src/test/java/org/apache/ignite/internal/processors/monitoring/opencensus/OpenCensusTxTracingConfigurationTest.java b/modules/opencensus/src/test/java/org/apache/ignite/internal/processors/monitoring/opencensus/OpenCensusTxTracingConfigurationTest.java
index 617970b..d1fe8d1 100644
--- a/modules/opencensus/src/test/java/org/apache/ignite/internal/processors/monitoring/opencensus/OpenCensusTxTracingConfigurationTest.java
+++ b/modules/opencensus/src/test/java/org/apache/ignite/internal/processors/monitoring/opencensus/OpenCensusTxTracingConfigurationTest.java
@@ -24,18 +24,18 @@
 import io.opencensus.trace.SpanId;
 import io.opencensus.trace.export.SpanData;
 import org.apache.ignite.internal.IgniteEx;
-import org.apache.ignite.internal.processors.tracing.Scope;
+import org.apache.ignite.spi.tracing.Scope;
 import org.apache.ignite.internal.processors.tracing.SpanType;
-import org.apache.ignite.internal.processors.tracing.TracingSpi;
-import org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationCoordinates;
-import org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationParameters;
+import org.apache.ignite.spi.tracing.TracingSpi;
+import org.apache.ignite.spi.tracing.TracingConfigurationCoordinates;
+import org.apache.ignite.spi.tracing.TracingConfigurationParameters;
 import org.apache.ignite.spi.tracing.opencensus.OpenCensusTracingSpi;
 import org.apache.ignite.transactions.Transaction;
 import org.junit.Test;
 
-import static org.apache.ignite.internal.processors.tracing.Scope.TX;
-import static org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationParameters.SAMPLING_RATE_ALWAYS;
-import static org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationParameters.SAMPLING_RATE_NEVER;
+import static org.apache.ignite.spi.tracing.Scope.TX;
+import static org.apache.ignite.spi.tracing.TracingConfigurationParameters.SAMPLING_RATE_ALWAYS;
+import static org.apache.ignite.spi.tracing.TracingConfigurationParameters.SAMPLING_RATE_NEVER;
 import static org.apache.ignite.transactions.TransactionConcurrency.PESSIMISTIC;
 import static org.apache.ignite.transactions.TransactionIsolation.SERIALIZABLE;
 
diff --git a/modules/opencensus/src/test/java/org/apache/ignite/internal/processors/monitoring/opencensus/OpenCensusTxTracingTest.java b/modules/opencensus/src/test/java/org/apache/ignite/internal/processors/monitoring/opencensus/OpenCensusTxTracingTest.java
index 3a9864d..b99699d 100644
--- a/modules/opencensus/src/test/java/org/apache/ignite/internal/processors/monitoring/opencensus/OpenCensusTxTracingTest.java
+++ b/modules/opencensus/src/test/java/org/apache/ignite/internal/processors/monitoring/opencensus/OpenCensusTxTracingTest.java
@@ -21,10 +21,10 @@
 import com.google.common.collect.ImmutableMap;
 import io.opencensus.trace.SpanId;
 import org.apache.ignite.internal.IgniteEx;
-import org.apache.ignite.internal.processors.tracing.Scope;
-import org.apache.ignite.internal.processors.tracing.TracingSpi;
-import org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationCoordinates;
-import org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationParameters;
+import org.apache.ignite.spi.tracing.Scope;
+import org.apache.ignite.spi.tracing.TracingSpi;
+import org.apache.ignite.spi.tracing.TracingConfigurationCoordinates;
+import org.apache.ignite.spi.tracing.TracingConfigurationParameters;
 import org.apache.ignite.spi.tracing.opencensus.OpenCensusTracingSpi;
 import org.apache.ignite.transactions.Transaction;
 import org.junit.Test;
@@ -45,7 +45,7 @@
 import static org.apache.ignite.internal.processors.tracing.SpanType.TX_PROCESS_DHT_FINISH_REQ;
 import static org.apache.ignite.internal.processors.tracing.SpanType.TX_PROCESS_DHT_PREPARE_REQ;
 import static org.apache.ignite.internal.processors.tracing.SpanType.TX_PROCESS_DHT_PREPARE_RESP;
-import static org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationParameters.SAMPLING_RATE_ALWAYS;
+import static org.apache.ignite.spi.tracing.TracingConfigurationParameters.SAMPLING_RATE_ALWAYS;
 import static org.apache.ignite.internal.processors.tracing.SpanType.TX_ROLLBACK;
 import static org.apache.ignite.transactions.TransactionConcurrency.OPTIMISTIC;
 import static org.apache.ignite.transactions.TransactionConcurrency.PESSIMISTIC;
diff --git a/modules/spring/src/main/java/org/apache/ignite/IgniteSpringBean.java b/modules/spring/src/main/java/org/apache/ignite/IgniteSpringBean.java
index 26acf9d..1866706 100644
--- a/modules/spring/src/main/java/org/apache/ignite/IgniteSpringBean.java
+++ b/modules/spring/src/main/java/org/apache/ignite/IgniteSpringBean.java
@@ -30,7 +30,7 @@
 import org.apache.ignite.configuration.CollectionConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.configuration.NearCacheConfiguration;
-import org.apache.ignite.internal.processors.tracing.configuration.TracingConfigurationManager;
+import org.apache.ignite.spi.tracing.TracingConfigurationManager;
 import org.apache.ignite.internal.util.typedef.G;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.lang.IgniteProductVersion;
diff --git a/parent/pom.xml b/parent/pom.xml
index 929e7f7..f45cace 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -480,6 +480,10 @@
                                 <title>System view SPI</title>
                                 <packages>org.apache.ignite.spi.systemview*</packages>
                             </group>
+                            <group>
+                                <title>Tracing SPI</title>
+                                <packages>org.apache.ignite.spi.tracing*</packages>
+                            </group>
                         </groups>
                         <bottom>
                             <![CDATA[