Skip to content

Commit 85fdbd8

Browse files
authored
Fix service instance id if Pod Name not empty (#3158)
* Fix service.instance.id if Pod.Name not empty Signed-off-by: dominicqi <[email protected]> * add changelog (#3157) Signed-off-by: dominic.qi <[email protected]> --------- Signed-off-by: dominicqi <[email protected]> Signed-off-by: dominic.qi <[email protected]>
1 parent 934c1d8 commit 85fdbd8

File tree

4 files changed

+72
-16
lines changed

4 files changed

+72
-16
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix'
2+
change_type: bug_fix
3+
4+
# The name of the component, or a single word describing the area of concern, (e.g. collector, target allocator, auto-instrumentation, opamp, github action)
5+
component: auto-instrumentation
6+
7+
# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
8+
note: Fixes a bug statefulSet wrong service.instance.id
9+
10+
# One or more tracking issues related to the change
11+
issues: [3157]
12+
13+
# (Optional) One or more lines of additional information to render under the primary note.
14+
# These lines will be padded with 2 spaces and then inserted directly into the document.
15+
# Use pipe (|) for multiline entries.
16+
subtext:

pkg/instrumentation/podmutator_test.go

+9-1
Original file line numberDiff line numberDiff line change
@@ -3192,6 +3192,14 @@ func TestMutatePod(t *testing.T) {
31923192
Name: "OTEL_EXPORTER_OTLP_ENDPOINT",
31933193
Value: "http://otlp-endpoint:4317",
31943194
},
3195+
{
3196+
Name: "OTEL_RESOURCE_ATTRIBUTES_POD_NAME",
3197+
ValueFrom: &corev1.EnvVarSource{
3198+
FieldRef: &corev1.ObjectFieldSelector{
3199+
FieldPath: "metadata.name",
3200+
},
3201+
},
3202+
},
31953203
{
31963204
Name: "OTEL_RESOURCE_ATTRIBUTES_NODE_NAME",
31973205
ValueFrom: &corev1.EnvVarSource{
@@ -3202,7 +3210,7 @@ func TestMutatePod(t *testing.T) {
32023210
},
32033211
{
32043212
Name: "OTEL_RESOURCE_ATTRIBUTES",
3205-
Value: "k8s.container.name=nginx,k8s.namespace.name=req-namespace,k8s.node.name=$(OTEL_RESOURCE_ATTRIBUTES_NODE_NAME),k8s.pod.name=my-nginx-6c44bcbdd,service.instance.id=req-namespace.$(OTEL_RESOURCE_ATTRIBUTES_POD_NAME).nginx",
3213+
Value: "k8s.container.name=nginx,k8s.namespace.name=req-namespace,k8s.node.name=$(OTEL_RESOURCE_ATTRIBUTES_NODE_NAME),k8s.pod.name=$(OTEL_RESOURCE_ATTRIBUTES_POD_NAME),service.instance.id=req-namespace.$(OTEL_RESOURCE_ATTRIBUTES_POD_NAME).nginx",
32063214
},
32073215
},
32083216
},

pkg/instrumentation/sdk.go

+11-11
Original file line numberDiff line numberDiff line change
@@ -295,18 +295,18 @@ func (i *sdkInjector) injectCommonSDKConfig(ctx context.Context, otelinst v1alph
295295
}
296296
}
297297

298-
// Some attributes might be empty, we should get them via k8s downward API
299-
if resourceMap[string(semconv.K8SPodNameKey)] == "" {
300-
container.Env = append(container.Env, corev1.EnvVar{
301-
Name: constants.EnvPodName,
302-
ValueFrom: &corev1.EnvVarSource{
303-
FieldRef: &corev1.ObjectFieldSelector{
304-
FieldPath: "metadata.name",
305-
},
298+
// Always retrieve the pod name from the Downward API. Ensure that the OTEL_RESOURCE_ATTRIBUTES_POD_NAME env exists.
299+
container.Env = append(container.Env, corev1.EnvVar{
300+
Name: constants.EnvPodName,
301+
ValueFrom: &corev1.EnvVarSource{
302+
FieldRef: &corev1.ObjectFieldSelector{
303+
FieldPath: "metadata.name",
306304
},
307-
})
308-
resourceMap[string(semconv.K8SPodNameKey)] = fmt.Sprintf("$(%s)", constants.EnvPodName)
309-
}
305+
},
306+
})
307+
resourceMap[string(semconv.K8SPodNameKey)] = fmt.Sprintf("$(%s)", constants.EnvPodName)
308+
309+
// Some attributes might be empty, we should get them via k8s downward API
310310
if otelinst.Spec.Resource.AddK8sUIDAttributes {
311311
if resourceMap[string(semconv.K8SPodUIDKey)] == "" {
312312
container.Env = append(container.Env, corev1.EnvVar{

pkg/instrumentation/sdk_test.go

+36-4
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,14 @@ func TestSDKInjection(t *testing.T) {
190190
Name: "OTEL_EXPORTER_OTLP_ENDPOINT",
191191
Value: "https://collector:4317",
192192
},
193+
{
194+
Name: "OTEL_RESOURCE_ATTRIBUTES_POD_NAME",
195+
ValueFrom: &corev1.EnvVarSource{
196+
FieldRef: &corev1.ObjectFieldSelector{
197+
FieldPath: "metadata.name",
198+
},
199+
},
200+
},
193201
{
194202
Name: "OTEL_RESOURCE_ATTRIBUTES_NODE_NAME",
195203
ValueFrom: &corev1.EnvVarSource{
@@ -212,7 +220,7 @@ func TestSDKInjection(t *testing.T) {
212220
},
213221
{
214222
Name: "OTEL_RESOURCE_ATTRIBUTES",
215-
Value: "k8s.container.name=application-name,k8s.deployment.name=my-deployment,k8s.deployment.uid=depuid,k8s.namespace.name=project1,k8s.node.name=$(OTEL_RESOURCE_ATTRIBUTES_NODE_NAME),k8s.pod.name=app,k8s.pod.uid=pod-uid,k8s.replicaset.name=my-replicaset,k8s.replicaset.uid=rsuid,service.instance.id=project1.$(OTEL_RESOURCE_ATTRIBUTES_POD_NAME).application-name,service.version=latest",
223+
Value: "k8s.container.name=application-name,k8s.deployment.name=my-deployment,k8s.deployment.uid=depuid,k8s.namespace.name=project1,k8s.node.name=$(OTEL_RESOURCE_ATTRIBUTES_NODE_NAME),k8s.pod.name=$(OTEL_RESOURCE_ATTRIBUTES_POD_NAME),k8s.pod.uid=pod-uid,k8s.replicaset.name=my-replicaset,k8s.replicaset.uid=rsuid,service.instance.id=project1.$(OTEL_RESOURCE_ATTRIBUTES_POD_NAME).application-name,service.version=latest",
216224
},
217225
},
218226
},
@@ -300,6 +308,14 @@ func TestSDKInjection(t *testing.T) {
300308
Name: "OTEL_TRACES_SAMPLER",
301309
Value: "always_on",
302310
},
311+
{
312+
Name: "OTEL_RESOURCE_ATTRIBUTES_POD_NAME",
313+
ValueFrom: &corev1.EnvVarSource{
314+
FieldRef: &corev1.ObjectFieldSelector{
315+
FieldPath: "metadata.name",
316+
},
317+
},
318+
},
303319
{
304320
Name: "OTEL_RESOURCE_ATTRIBUTES_NODE_NAME",
305321
ValueFrom: &corev1.EnvVarSource{
@@ -310,7 +326,7 @@ func TestSDKInjection(t *testing.T) {
310326
},
311327
{
312328
Name: "OTEL_RESOURCE_ATTRIBUTES",
313-
Value: "foo=bar,k8s.container.name=other,service.version=explicitly_set,fromcr=val,k8s.namespace.name=project1,k8s.node.name=$(OTEL_RESOURCE_ATTRIBUTES_NODE_NAME),k8s.pod.name=app",
329+
Value: "foo=bar,k8s.container.name=other,service.version=explicitly_set,fromcr=val,k8s.namespace.name=project1,k8s.node.name=$(OTEL_RESOURCE_ATTRIBUTES_NODE_NAME),k8s.pod.name=$(OTEL_RESOURCE_ATTRIBUTES_POD_NAME)",
314330
},
315331
},
316332
},
@@ -370,6 +386,14 @@ func TestSDKInjection(t *testing.T) {
370386
Name: "OTEL_SERVICE_NAME",
371387
Value: "my-deployment",
372388
},
389+
{
390+
Name: "OTEL_RESOURCE_ATTRIBUTES_POD_NAME",
391+
ValueFrom: &corev1.EnvVarSource{
392+
FieldRef: &corev1.ObjectFieldSelector{
393+
FieldPath: "metadata.name",
394+
},
395+
},
396+
},
373397
{
374398
Name: "OTEL_RESOURCE_ATTRIBUTES_NODE_NAME",
375399
ValueFrom: &corev1.EnvVarSource{
@@ -380,7 +404,7 @@ func TestSDKInjection(t *testing.T) {
380404
},
381405
{
382406
Name: "OTEL_RESOURCE_ATTRIBUTES",
383-
Value: "k8s.container.name=application-name,k8s.deployment.name=my-deployment,k8s.namespace.name=project1,k8s.node.name=$(OTEL_RESOURCE_ATTRIBUTES_NODE_NAME),k8s.pod.name=app,k8s.pod.uid=pod-uid,k8s.replicaset.name=my-replicaset,service.instance.id=project1.$(OTEL_RESOURCE_ATTRIBUTES_POD_NAME).application-name,service.version=latest",
407+
Value: "k8s.container.name=application-name,k8s.deployment.name=my-deployment,k8s.namespace.name=project1,k8s.node.name=$(OTEL_RESOURCE_ATTRIBUTES_NODE_NAME),k8s.pod.name=$(OTEL_RESOURCE_ATTRIBUTES_POD_NAME),k8s.pod.uid=pod-uid,k8s.replicaset.name=my-replicaset,service.instance.id=project1.$(OTEL_RESOURCE_ATTRIBUTES_POD_NAME).application-name,service.version=latest",
384408
},
385409
},
386410
},
@@ -1660,6 +1684,14 @@ func TestInjectNginx(t *testing.T) {
16601684
Name: "OTEL_EXPORTER_OTLP_ENDPOINT",
16611685
Value: "http://otlp-endpoint:4317",
16621686
},
1687+
{
1688+
Name: "OTEL_RESOURCE_ATTRIBUTES_POD_NAME",
1689+
ValueFrom: &corev1.EnvVarSource{
1690+
FieldRef: &corev1.ObjectFieldSelector{
1691+
FieldPath: "metadata.name",
1692+
},
1693+
},
1694+
},
16631695
{
16641696
Name: "OTEL_RESOURCE_ATTRIBUTES_NODE_NAME",
16651697
ValueFrom: &corev1.EnvVarSource{
@@ -1670,7 +1702,7 @@ func TestInjectNginx(t *testing.T) {
16701702
},
16711703
{
16721704
Name: "OTEL_RESOURCE_ATTRIBUTES",
1673-
Value: "k8s.container.name=app,k8s.namespace.name=ns,k8s.node.name=$(OTEL_RESOURCE_ATTRIBUTES_NODE_NAME),k8s.pod.name=my-nginx-6c44bcbdd,service.instance.id=ns.$(OTEL_RESOURCE_ATTRIBUTES_POD_NAME).app",
1705+
Value: "k8s.container.name=app,k8s.namespace.name=ns,k8s.node.name=$(OTEL_RESOURCE_ATTRIBUTES_NODE_NAME),k8s.pod.name=$(OTEL_RESOURCE_ATTRIBUTES_POD_NAME),service.instance.id=ns.$(OTEL_RESOURCE_ATTRIBUTES_POD_NAME).app",
16741706
},
16751707
},
16761708
},

0 commit comments

Comments
 (0)