This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package org.example.functions; | |
import com.azure.core.models.CloudEvent; | |
import com.azure.core.util.serializer.TypeReference; | |
import com.azure.messaging.eventgrid.EventGridEvent; | |
import com.fasterxml.jackson.core.JsonProcessingException; | |
import com.fasterxml.jackson.databind.ObjectMapper; | |
import com.microsoft.azure.functions.ExecutionContext; | |
import com.microsoft.azure.functions.HttpMethod; | |
import com.microsoft.azure.functions.HttpRequestMessage; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public static void main(String[] args) { | |
// first call in not instrumented... | |
doSomething(); | |
doSomething().transform(t -> { | |
Span s = GlobalOpenTelemetry.getTracer("test") | |
.spanBuilder("span") | |
.startSpan(); | |
return t.doFinally(signal -> s.end()) |
- P0 - Define span modelling conventions for HTTP client spans #1747
- Replace http.target with http.path and http.query? #2056
- Remove http.XX_content_length* semantic attributes #2028
- P0 - Confirm that HTTP instrumentations can provide sampling-relevant attributes at creation time #2011
- P? - required/optional #2114
- Semantic convention around retry attempts? #1306
- Adding semantic conventions for setting attributes to record retry behavior [#729](https://github.com/open-telemetry/opentelemetry-sp
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
private static final Method SET_REACTOR_CONTEXT_METHOD = getStoreContextMethod(); | |
static Method getStoreContextMethod() { | |
try { | |
Class<?> contextPropagationOperatorClass = Class.forName("io.opentelemetry.javaagent.shaded.instrumentation.reactor.ContextPropagationOperator"); | |
Class<?> oteContextShaded = Class.forName("io.opentelemetry.javaagent.shaded.io.opentelemetry.context.Context"); | |
if (contextPropagationOperatorClass != null && oteContextShaded != null) { | |
Method storeMethod = contextPropagationOperatorClass.getDeclaredMethod("storeOpenTelemetryContext", reactor.util.context.Context.class, oteContextShaded); | |
if (storeMethod.getReturnType() == reactor.util.context.Context.class) { | |
return storeMethod; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package org.example; | |
import io.opentelemetry.api.trace.Span; | |
import io.opentelemetry.api.trace.StatusCode; | |
import io.opentelemetry.api.trace.Tracer; | |
import io.opentelemetry.context.Scope; | |
import io.opentelemetry.exporter.jaeger.JaegerGrpcSpanExporter; | |
import io.opentelemetry.sdk.OpenTelemetrySdk; | |
import io.opentelemetry.sdk.common.CompletableResultCode; | |
import io.opentelemetry.sdk.trace.ReadableSpan; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.example.http; | |
import com.squareup.okhttp.Interceptor; | |
import com.squareup.okhttp.OkHttpClient; | |
import com.squareup.okhttp.Request; | |
import com.squareup.okhttp.Response; | |
import java.io.IOException; | |
import io.opentelemetry.api.trace.SpanKind; |
Same operation may be instrumented multiple times (manual + auto or library-native + auto) because of multiple reasons (below). This usually affects protocol instrumentation (HTTP/gRCP/etc) as they are auto-instrumented already and quite popular. It manifests as duplicated spans that fights for context injection on RPC calls, double performance impact and increase telemetry bills. Here are some cases when it happens:
- specialized instrumentation: native library instrumentaion can provide more rich data, better quality/performance + auto-instrumentation thats always on
- new library behavior (user manually instrumented and then new version brings auto-instrumentation)
- configuration error
While p1 is valid case, and p2/p3 are not, but we'd still would rather communicate the need to remove extra instrumentation instead of duplicating data.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class ResourceIdProcessor : ActivityProcessor | |
{ | |
private readonly AsyncLocal<string> resourceId = new AsyncLocal<string>(); | |
private readonly IHttpContextAccessor httpContextAccessor; | |
public ResourceIdProcessor(IHttpContextAccessor httpContextAccessor) | |
{ | |
resourceId = null; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class ClientIpHeaderTelemetryInitializerCopy : TelemetryInitializerBase | |
{ | |
private const string HeaderNameDefault = "X-Forwarded-For"; | |
private readonly char[] headerValuesSeparatorDefault = { ',' }; | |
private char[] headerValueSeparators; | |
/// <summary> | |
/// Initializes a new instance of the <see cref="ClientIpHeaderTelemetryInitializer" /> class. | |
/// </summary> |