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[
