Skip to content

Commit c81f43f

Browse files
authored
[enrichments]Allow overriding host name with k8s node name (#108)
1 parent e1296f2 commit c81f43f

File tree

3 files changed

+58
-4
lines changed

3 files changed

+58
-4
lines changed

enrichments/trace/config/config.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,9 @@ type Config struct {
2828

2929
// ResourceConfig configures the enrichment of resource attributes.
3030
type ResourceConfig struct {
31-
AgentName AttributeConfig `mapstructure:"agent_name"`
32-
AgentVersion AttributeConfig `mapstructure:"agent_version"`
31+
AgentName AttributeConfig `mapstructure:"agent_name"`
32+
AgentVersion AttributeConfig `mapstructure:"agent_version"`
33+
OverrideHostName AttributeConfig `mapstructure:"override_host_name"`
3334
}
3435

3536
// ScopeConfig configures the enrichment of scope attributes.
@@ -100,8 +101,9 @@ type AttributeConfig struct {
100101
func Enabled() Config {
101102
return Config{
102103
Resource: ResourceConfig{
103-
AgentName: AttributeConfig{Enabled: true},
104-
AgentVersion: AttributeConfig{Enabled: true},
104+
AgentName: AttributeConfig{Enabled: true},
105+
AgentVersion: AttributeConfig{Enabled: true},
106+
OverrideHostName: AttributeConfig{Enabled: true},
105107
},
106108
Scope: ScopeConfig{
107109
ServiceFrameworkName: AttributeConfig{Enabled: true},

enrichments/trace/internal/elastic/resource.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ func EnrichResource(resource pcommon.Resource, cfg config.Config) {
3232
}
3333

3434
type resourceEnrichmentContext struct {
35+
hostName string
36+
k8sNodeName string
37+
3538
telemetrySDKName string
3639
telemetrySDKLanguage string
3740
telemetrySDKVersion string
@@ -42,6 +45,10 @@ type resourceEnrichmentContext struct {
4245
func (s *resourceEnrichmentContext) Enrich(resource pcommon.Resource, cfg config.ResourceConfig) {
4346
resource.Attributes().Range(func(k string, v pcommon.Value) bool {
4447
switch k {
48+
case semconv.AttributeHostName:
49+
s.hostName = v.Str()
50+
case semconv.AttributeK8SNodeName:
51+
s.k8sNodeName = v.Str()
4552
case semconv.AttributeTelemetrySDKName:
4653
s.telemetrySDKName = v.Str()
4754
case semconv.AttributeTelemetrySDKLanguage:
@@ -62,6 +69,9 @@ func (s *resourceEnrichmentContext) Enrich(resource pcommon.Resource, cfg config
6269
if cfg.AgentVersion.Enabled {
6370
s.setAgentVersion(resource)
6471
}
72+
if cfg.OverrideHostName.Enabled {
73+
s.overrideHostNameWithK8sNodeName(resource)
74+
}
6575
}
6676

6777
func (s *resourceEnrichmentContext) setAgentName(resource pcommon.Resource) {
@@ -105,3 +115,14 @@ func (s *resourceEnrichmentContext) setAgentVersion(resource pcommon.Resource) {
105115
}
106116
resource.Attributes().PutStr(AttributeAgentVersion, agentVersion)
107117
}
118+
119+
func (s *resourceEnrichmentContext) overrideHostNameWithK8sNodeName(resource pcommon.Resource) {
120+
if s.k8sNodeName == "" {
121+
return
122+
}
123+
// Host name is set same as k8s node name. In case, both host name
124+
// and k8s node name are set then host name is overridden as this is
125+
// considered an invalid configuration/smell and k8s node name is
126+
// given higher preference.
127+
resource.Attributes().PutStr(semconv.AttributeHostName, s.k8sNodeName)
128+
}

enrichments/trace/internal/elastic/resource_test.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,37 @@ func TestResourceEnrich(t *testing.T) {
162162
AttributeAgentVersion: "1.2.3",
163163
},
164164
},
165+
{
166+
name: "host_name_override_with_k8s_node_name",
167+
input: func() pcommon.Resource {
168+
res := pcommon.NewResource()
169+
res.Attributes().PutStr(semconv.AttributeHostName, "test-host")
170+
res.Attributes().PutStr(semconv.AttributeK8SNodeName, "k8s-node")
171+
return res
172+
}(),
173+
config: config.Enabled().Resource,
174+
enrichedAttrs: map[string]any{
175+
semconv.AttributeHostName: "k8s-node",
176+
semconv.AttributeK8SNodeName: "k8s-node",
177+
AttributeAgentName: "otlp",
178+
AttributeAgentVersion: "unknown",
179+
},
180+
},
181+
{
182+
name: "host_name_if_empty_set_from_k8s_node_name",
183+
input: func() pcommon.Resource {
184+
res := pcommon.NewResource()
185+
res.Attributes().PutStr(semconv.AttributeK8SNodeName, "k8s-node")
186+
return res
187+
}(),
188+
config: config.Enabled().Resource,
189+
enrichedAttrs: map[string]any{
190+
semconv.AttributeHostName: "k8s-node",
191+
semconv.AttributeK8SNodeName: "k8s-node",
192+
AttributeAgentName: "otlp",
193+
AttributeAgentVersion: "unknown",
194+
},
195+
},
165196
} {
166197
t.Run(tc.name, func(t *testing.T) {
167198
// Merge existing resource attrs with the attrs added

0 commit comments

Comments
 (0)