Skip to content

Commit

Permalink
feat(dogstatsd): activate Origin Detection with UDP (#1084)
Browse files Browse the repository at this point in the history
* feat(dogstatsd): activate Origin Detection with UDP

Signed-off-by: Wassim DHIF <wassim.dhif@datadoghq.com>

* fixup! feat(dogstatsd): activate Origin Detection with UDP

fix(dogstatsd): add missing envvar usage

Signed-off-by: Wassim DHIF <wassim.dhif@datadoghq.com>

---------

Signed-off-by: Wassim DHIF <wassim.dhif@datadoghq.com>
  • Loading branch information
wdhif committed Feb 15, 2024
1 parent 687b688 commit e0c2ee2
Show file tree
Hide file tree
Showing 7 changed files with 45 additions and 12 deletions.
2 changes: 2 additions & 0 deletions apis/datadoghq/common/const.go
Expand Up @@ -56,6 +56,8 @@ const (
DefaultAdmissionControllerTargetPort = 8000
// DefaultAdmissionControllerWebhookName default admission controller webhook name
DefaultAdmissionControllerWebhookName string = "datadog-webhook"
// DefaultDogstatsdOriginDetection default Origin Detection
DefaultDogstatsdOriginDetection = "false"
// DefaultDogstatsdPort default dogstatsd port
DefaultDogstatsdPort = 8125
// DefaultDogstatsdPortName default dogstatsd port name
Expand Down
1 change: 1 addition & 0 deletions apis/datadoghq/common/envvar.go
Expand Up @@ -48,6 +48,7 @@ const (
DDDogstatsdMapperProfiles = "DD_DOGSTATSD_MAPPER_PROFILES"
DDDogstatsdNonLocalTraffic = "DD_DOGSTATSD_NON_LOCAL_TRAFFIC"
DDDogstatsdOriginDetection = "DD_DOGSTATSD_ORIGIN_DETECTION"
DDDogstatsdOriginDetectionClient = "DD_DOGSTATSD_ORIGIN_DETECTION_CLIENT"
DDDogstatsdTagCardinality = "DD_DOGSTATSD_TAG_CARDINALITY"
DDDogstatsdPort = "DD_DOGSTATSD_PORT"
DDDogstatsdSocket = "DD_DOGSTATSD_SOCKET"
Expand Down
16 changes: 12 additions & 4 deletions controllers/datadogagent/agent_test.go
Expand Up @@ -841,8 +841,12 @@ func defaultEnvVars(extraEnv map[string]string) []corev1.EnvVar {
Value: fmt.Sprintf("%s-leader-election", testDdaName),
},
{
Name: "DD_DOGSTATSD_ORIGIN_DETECTION",
Value: "false",
Name: apicommon.DDDogstatsdOriginDetection,
Value: apicommon.DefaultDogstatsdOriginDetection,
},
{
Name: apicommon.DDDogstatsdOriginDetectionClient,
Value: apicommon.DefaultDogstatsdOriginDetection,
},
{
Name: "DD_DOGSTATSD_SOCKET",
Expand Down Expand Up @@ -1931,8 +1935,12 @@ func customKubeletConfigPodSpec(kubeletConfig *commonv1.KubeletConfig) corev1.Po
Value: fmt.Sprintf("%s-leader-election", testDdaName),
},
{
Name: "DD_DOGSTATSD_ORIGIN_DETECTION",
Value: "false",
Name: apicommon.DDDogstatsdOriginDetection,
Value: apicommon.DefaultDogstatsdOriginDetection,
},
{
Name: apicommon.DDDogstatsdOriginDetectionClient,
Value: apicommon.DefaultDogstatsdOriginDetection,
},
{
Name: "DD_DOGSTATSD_SOCKET",
Expand Down
4 changes: 4 additions & 0 deletions controllers/datadogagent/feature/dogstatsd/feature.go
Expand Up @@ -238,6 +238,10 @@ func (f *dogstatsdFeature) manageNodeAgent(agentContainerName apicommonv1.AgentC
Name: apicommon.DDDogstatsdOriginDetection,
Value: "true",
})
managers.EnvVar().AddEnvVarToContainer(agentContainerName, &corev1.EnvVar{
Name: apicommon.DDDogstatsdOriginDetectionClient,
Value: "true",
})
if f.udsEnabled {
managers.PodTemplateSpec().Spec.HostPID = true
}
Expand Down
14 changes: 11 additions & 3 deletions controllers/datadogagent/feature/dogstatsd/feature_test.go
Expand Up @@ -200,7 +200,7 @@ func Test_DogstatsdFeature_ConfigureV2(t *testing.T) {
WantConfigure: true,
Agent: test.NewDefaultComponentTest().WithWantFunc(
func(t testing.TB, mgrInterface feature.PodTemplateManagers) {
customEnvVars := append(getWantUDPEnvVars(), getOriginDetectionEnvVar())
customEnvVars := append(getWantUDPEnvVars(), getOriginDetectionEnvVar(), getOriginDetectionClientEnvVar())
assertWants(t, mgrInterface, "10", getWantVolumeMounts(), getWantVolumes(), customEnvVars, getWantUDSEnvVarsV2(), getWantHostPorts())
},
),
Expand Down Expand Up @@ -256,7 +256,7 @@ func Test_DogstatsdFeature_ConfigureV2(t *testing.T) {
func(t testing.TB, mgrInterface feature.PodTemplateManagers) {
mgr := mgrInterface.(*fake.PodTemplateManagers)
assert.True(t, mgr.Tpl.Spec.HostPID, "13. Host PID \ndiff = %s", cmp.Diff(mgr.Tpl.Spec.HostPID, true))
assertWants(t, mgrInterface, "13", getWantVolumeMounts(), getWantVolumes(), []*corev1.EnvVar{getOriginDetectionEnvVar()}, getWantUDSEnvVarsV2(), getWantContainerPorts())
assertWants(t, mgrInterface, "13", getWantVolumeMounts(), getWantVolumes(), []*corev1.EnvVar{getOriginDetectionEnvVar(), getOriginDetectionClientEnvVar()}, getWantUDSEnvVarsV2(), getWantContainerPorts())
},
),
},
Expand Down Expand Up @@ -289,7 +289,7 @@ func Test_DogstatsdFeature_ConfigureV2(t *testing.T) {
Name: apicommon.DDDogstatsdTagCardinality,
Value: "orchestrator",
}
customEnvVars := append(getWantUDPEnvVars(), getOriginDetectionEnvVar(), &wantTagCardinalityEnvVar)
customEnvVars := append(getWantUDPEnvVars(), getOriginDetectionEnvVar(), getOriginDetectionClientEnvVar(), &wantTagCardinalityEnvVar)
assertWants(t, mgrInterface, "15", getWantVolumeMounts(), getWantVolumes(), customEnvVars, getWantUDSEnvVarsV2(), getWantHostPorts())
},
),
Expand Down Expand Up @@ -335,6 +335,14 @@ func getOriginDetectionEnvVar() *corev1.EnvVar {
return &originDetectionEnvVar
}

func getOriginDetectionClientEnvVar() *corev1.EnvVar {
originDetectionClientEnvVar := corev1.EnvVar{
Name: apicommon.DDDogstatsdOriginDetectionClient,
Value: "true",
}
return &originDetectionClientEnvVar
}

func getCustomEnvVar() []*corev1.EnvVar {
customEnvVar := []*corev1.EnvVar{
{
Expand Down
Expand Up @@ -110,6 +110,12 @@ func Test_DogstatsdFeature_ConfigureV1(t *testing.T) {
Value: "true",
}

// origin detection client envvar
originDetectionClientEnvVar := corev1.EnvVar{
Name: apicommon.DDDogstatsdOriginDetectionClient,
Value: "true",
}

// mapper profiles envvar
mapperProfilesEnvVar := corev1.EnvVar{
Name: apicommon.DDDogstatsdMapperProfiles,
Expand Down Expand Up @@ -191,7 +197,7 @@ func Test_DogstatsdFeature_ConfigureV1(t *testing.T) {
volumes := mgr.VolumeMgr.Volumes
assert.True(t, apiutils.IsEqualStruct(volumes, []*corev1.Volume{}), "3. Volumes \ndiff = %s", cmp.Diff(volumes, []*corev1.Volume{}))
agentEnvVars := mgr.EnvVarMgr.EnvVarsByC[apicommonv1.CoreAgentContainerName]
customEnvVars := append([]*corev1.EnvVar{}, &originDetectionEnvVar)
customEnvVars := []*corev1.EnvVar{&originDetectionEnvVar, &originDetectionClientEnvVar}
assert.True(t, apiutils.IsEqualStruct(agentEnvVars, customEnvVars), "3. Agent envvars \ndiff = %s", cmp.Diff(agentEnvVars, customEnvVars))
coreAgentPorts := mgr.PortMgr.PortsByC[apicommonv1.CoreAgentContainerName]
assert.True(t, apiutils.IsEqualStruct(coreAgentPorts, wantContainerPorts), "3. Agent ports \ndiff = %s", cmp.Diff(coreAgentPorts, wantContainerPorts))
Expand Down Expand Up @@ -265,7 +271,7 @@ func Test_DogstatsdFeature_ConfigureV1(t *testing.T) {
volumes := mgr.VolumeMgr.Volumes
assert.True(t, apiutils.IsEqualStruct(volumes, wantVolumesV1), "6. Volumes \ndiff = %s", cmp.Diff(volumes, wantVolumesV1))
agentEnvVars := mgr.EnvVarMgr.EnvVarsByC[apicommonv1.CoreAgentContainerName]
assert.True(t, apiutils.IsEqualStruct(agentEnvVars, []*corev1.EnvVar{&originDetectionEnvVar}), "6. Agent envvars \ndiff = %s", cmp.Diff(agentEnvVars, []*corev1.EnvVar{&originDetectionEnvVar}))
assert.True(t, apiutils.IsEqualStruct(agentEnvVars, []*corev1.EnvVar{&originDetectionEnvVar, &originDetectionClientEnvVar}), "6. Agent envvars \ndiff = %s", cmp.Diff(agentEnvVars, []*corev1.EnvVar{&originDetectionEnvVar}))
allEnvVars := mgr.EnvVarMgr.EnvVarsByC[apicommonv1.AllContainers]
assert.True(t, apiutils.IsEqualStruct(allEnvVars, wantUDSEnvVarsV1), "6. All Containers envvars \ndiff = %s", cmp.Diff(agentEnvVars, wantUDSEnvVarsV2))
coreAgentPorts := mgr.PortMgr.PortsByC[apicommonv1.CoreAgentContainerName]
Expand Down
10 changes: 7 additions & 3 deletions controllers/datadogagent/utils.go
Expand Up @@ -884,12 +884,16 @@ func getEnvVarsForAgent(logger logr.Logger, dda *datadoghqv1alpha1.DatadogAgent)
envVars = append(envVars, commonEnvVars...)

if isDogstatsdConfigured(&spec) {
envVars = append(envVars,
corev1.EnvVar{
envVars = append(envVars, []corev1.EnvVar{
{
Name: apicommon.DDDogstatsdOriginDetection,
Value: strconv.FormatBool(*spec.Agent.Config.Dogstatsd.DogstatsdOriginDetection),
},
)
{
Name: apicommon.DDDogstatsdOriginDetectionClient,
Value: strconv.FormatBool(*spec.Agent.Config.Dogstatsd.DogstatsdOriginDetection),
},
}...)
// Always add DD_DOGSTATSD_SOCKET env var, to allow JMX-Fetch to use it inside pod's containers.
envVars = append(envVars, getEnvVarDogstatsdSocket(dda))

Expand Down

0 comments on commit e0c2ee2

Please sign in to comment.