Skip to content

Commit d47479f

Browse files
committed
minimal trace init for custom service name
Signed-off-by: sallyom <[email protected]>
1 parent b4041d4 commit d47479f

File tree

2 files changed

+83
-2
lines changed

2 files changed

+83
-2
lines changed

pkg/kvcache/indexer.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,14 @@ import (
2020
"context"
2121
"fmt"
2222

23-
"go.opentelemetry.io/otel"
2423
"go.opentelemetry.io/otel/attribute"
2524
"k8s.io/apimachinery/pkg/util/sets"
2625
"k8s.io/klog/v2"
2726

2827
"github.com/llm-d/llm-d-kv-cache-manager/pkg/kvcache/kvblock"
2928
"github.com/llm-d/llm-d-kv-cache-manager/pkg/tokenization"
3029
"github.com/llm-d/llm-d-kv-cache-manager/pkg/tokenization/prefixstore"
30+
"github.com/llm-d/llm-d-kv-cache-manager/pkg/tracing"
3131
"github.com/llm-d/llm-d-kv-cache-manager/pkg/utils/logging"
3232
)
3333

@@ -119,7 +119,7 @@ func (k *Indexer) KVBlockIndex() kvblock.Index {
119119
func (k *Indexer) GetPodScores(ctx context.Context, prompt, modelName string,
120120
podIdentifiers []string,
121121
) (map[string]int, error) {
122-
tracer := otel.GetTracerProvider().Tracer("llm-d-kv-cache")
122+
tracer := tracing.GetTracer()
123123
ctx, span := tracer.Start(ctx, "kv-cache-manager.GetPodScores")
124124
defer span.End()
125125

pkg/tracing/tracing.go

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
/*
2+
Copyright 2025 The llm-d Authors.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package tracing
18+
19+
import (
20+
"context"
21+
"os"
22+
"sync"
23+
24+
"go.opentelemetry.io/otel"
25+
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp"
26+
"go.opentelemetry.io/otel/sdk/resource"
27+
"go.opentelemetry.io/otel/sdk/trace"
28+
semconv "go.opentelemetry.io/otel/semconv/v1.21.0"
29+
oteltrace "go.opentelemetry.io/otel/trace"
30+
)
31+
32+
var (
33+
customProvider oteltrace.TracerProvider
34+
once sync.Once
35+
)
36+
37+
// GetTracer returns a tracer for the KV cache component
38+
func GetTracer() oteltrace.Tracer {
39+
// If auto-instrumentation is detected, create custom provider with different service name
40+
if os.Getenv("OTEL_SERVICE_NAME") != "" {
41+
return getCustomTracerProvider().Tracer("llm-d-kv-cache-manager")
42+
}
43+
// Fallback to global provider
44+
return otel.GetTracerProvider().Tracer("llm-d-kv-cache")
45+
}
46+
47+
func getCustomTracerProvider() oteltrace.TracerProvider {
48+
once.Do(func() {
49+
customProvider = createCustomTracerProvider()
50+
})
51+
return customProvider
52+
}
53+
54+
func createCustomTracerProvider() oteltrace.TracerProvider {
55+
ctx := context.Background()
56+
// Use same endpoint as auto-instrumentation
57+
endpoint := os.Getenv("OTEL_EXPORTER_OTLP_ENDPOINT")
58+
if endpoint == "" {
59+
return otel.GetTracerProvider()
60+
}
61+
exporter, err := otlptracehttp.New(ctx,
62+
otlptracehttp.WithEndpoint(endpoint),
63+
otlptracehttp.WithInsecure(),
64+
)
65+
if err != nil {
66+
return otel.GetTracerProvider()
67+
}
68+
// Create resource with different service name
69+
res, err := resource.New(ctx,
70+
resource.WithAttributes(
71+
semconv.ServiceNameKey.String("llm-d-kv-cache"),
72+
),
73+
)
74+
if err != nil {
75+
return otel.GetTracerProvider()
76+
}
77+
return trace.NewTracerProvider(
78+
trace.WithBatcher(exporter),
79+
trace.WithResource(res),
80+
)
81+
}

0 commit comments

Comments
 (0)