diff --git a/cmd/amazon-cloudwatch-agent-target-allocator/config/config.go b/cmd/amazon-cloudwatch-agent-target-allocator/config/config.go index 26592946..6a10c457 100644 --- a/cmd/amazon-cloudwatch-agent-target-allocator/config/config.go +++ b/cmd/amazon-cloudwatch-agent-target-allocator/config/config.go @@ -13,8 +13,6 @@ import ( "os" "time" - "sigs.k8s.io/controller-runtime/pkg/certwatcher" - "github.com/go-logr/logr" "github.com/prometheus/common/model" promconfig "github.com/prometheus/prometheus/config" @@ -26,6 +24,7 @@ import ( "k8s.io/client-go/tools/clientcmd" "k8s.io/klog/v2" ctrl "sigs.k8s.io/controller-runtime" + "sigs.k8s.io/controller-runtime/pkg/certwatcher" "sigs.k8s.io/controller-runtime/pkg/log/zap" tamanifest "github.com/aws/amazon-cloudwatch-agent-operator/internal/manifests/targetallocator" diff --git a/internal/manifests/collector/adapters/config_from.go b/internal/manifests/collector/adapters/config_from.go index 12cc486f..e35e37fb 100644 --- a/internal/manifests/collector/adapters/config_from.go +++ b/internal/manifests/collector/adapters/config_from.go @@ -71,8 +71,10 @@ type LogMetricsCollected struct { } type TracesCollected struct { - XRay *xray `json:"xray,omitempty"` - OTLP *otlp `json:"otlp,omitempty"` + XRay *xray `json:"xray,omitempty"` + OTLP *otlp `json:"otlp,omitempty"` + ApplicationSignals *AppSignals `json:"application_signals,omitempty"` + AppSignals *AppSignals `json:"app_signals,omitempty"` } type statsD struct { @@ -126,7 +128,7 @@ func ConfigStructFromJSONString(configStr string) (*CwaConfig, error) { return config, nil } -func (c *CwaConfig) GetApplicationSignalsConfig() *AppSignals { +func (c *CwaConfig) GetApplicationSignalsMetricsConfig() *AppSignals { if c.Logs == nil { return nil } @@ -141,3 +143,19 @@ func (c *CwaConfig) GetApplicationSignalsConfig() *AppSignals { } return nil } + +func (c *CwaConfig) GetApplicationSignalsTracesConfig() *AppSignals { + if c.Traces == nil { + return nil + } + if c.Traces.TracesCollected == nil { + return nil + } + if c.Traces.TracesCollected.ApplicationSignals != nil { + return c.Traces.TracesCollected.ApplicationSignals + } + if c.Traces.TracesCollected.AppSignals != nil { + return c.Traces.TracesCollected.AppSignals + } + return nil +} diff --git a/internal/manifests/collector/config_replace.go b/internal/manifests/collector/config_replace.go index e2f31aaf..04903caa 100644 --- a/internal/manifests/collector/config_replace.go +++ b/internal/manifests/collector/config_replace.go @@ -10,9 +10,8 @@ import ( promconfig "github.com/prometheus/prometheus/config" _ "github.com/prometheus/prometheus/discovery/install" // Package install has the side-effect of registering all builtin. - "gopkg.in/yaml.v2" - "go.opentelemetry.io/collector/confmap" + "gopkg.in/yaml.v2" "github.com/aws/amazon-cloudwatch-agent-operator/apis/v1alpha1" "github.com/aws/amazon-cloudwatch-agent-operator/internal/manifests/collector/adapters" diff --git a/internal/manifests/collector/ports.go b/internal/manifests/collector/ports.go index 60099db4..082eece8 100644 --- a/internal/manifests/collector/ports.go +++ b/internal/manifests/collector/ports.go @@ -21,50 +21,36 @@ import ( ) const ( - StatsD = "statsd" - CollectD = "collectd" - XrayProxy = "aws-proxy" - XrayTraces = "aws-traces" - OtlpGrpc = "otlp-grpc" - OtlpHttp = "otlp-http" - AppSignalsGrpc = "appsig-grpc" - AppSignalsHttp = "appsig-http" - AppSignalsProxy = "appsig-xray" - AppSignalsGrpcSA = ":4315" - AppSignalsHttpSA = ":4316" - AppSignalsProxySA = ":2000" - AppSignalsServerSA = ":4311" - EMF = "emf" - EMFTcp = "emf-tcp" - EMFUdp = "emf-udp" - CWA = "cwa-" - JmxHttp = "jmx-http" - Server = "server" + StatsD = "statsd" + CollectD = "collectd" + XrayProxy = "aws-proxy" + XrayTraces = "aws-traces" + OtlpGrpc = "otlp-grpc" + OtlpHttp = "otlp-http" + AppSignalsGrpc = CWA + "appsig-grpc" + AppSignalsHttp = CWA + "appsig-http" + AppSignalsProxy = CWA + "appsig-xray" + EMF = "emf" + EMFTcp = "emf-tcp" + EMFUdp = "emf-udp" + CWA = "cwa-" + JmxHttp = "jmx-http" + Server = CWA + "server" ) var receiverDefaultPortsMap = map[string]int32{ - StatsD: 8125, - CollectD: 25826, - XrayTraces: 2000, - JmxHttp: 4314, - OtlpGrpc: 4317, - OtlpHttp: 4318, - EMF: 25888, -} - -var AppSignalsPortToServicePortMap = map[int32][]corev1.ServicePort{ - 4315: {{ - Name: AppSignalsGrpc, - Port: 4315, - }}, - 4316: {{ - Name: AppSignalsHttp, - Port: 4316, - }}, - 2000: {{ - Name: AppSignalsProxy, - Port: 2000, - }}, + StatsD: 8125, + CollectD: 25826, + XrayProxy: 2000, + XrayTraces: 2000, + OtlpGrpc: 4317, + OtlpHttp: 4318, + AppSignalsGrpc: 4315, + AppSignalsHttp: 4316, + AppSignalsProxy: 2000, + EMF: 25888, + JmxHttp: 4314, + Server: 4311, } func PortMapToServicePortList(portMap map[int32][]corev1.ServicePort) []corev1.ServicePort { @@ -148,8 +134,12 @@ func getServicePortsFromCWAgentConfig(logger logr.Logger, config *adapters.CwaCo return PortMapToServicePortList(servicePortsMap) } -func isAppSignalEnabled(config *adapters.CwaConfig) bool { - return config.GetApplicationSignalsConfig() != nil +func isAppSignalEnabledMetrics(config *adapters.CwaConfig) bool { + return config.GetApplicationSignalsMetricsConfig() != nil +} + +func isAppSignalEnabledTraces(config *adapters.CwaConfig) bool { + return config.GetApplicationSignalsTracesConfig() != nil } func getMetricsReceiversServicePorts(logger logr.Logger, config *adapters.CwaConfig, servicePortsMap map[int32][]corev1.ServicePort) { @@ -184,32 +174,41 @@ func getReceiverServicePort(logger logr.Logger, serviceAddress string, receiverN if err != nil { logger.Error(err, "error parsing port from endpoint for receiver", zap.String("endpoint", serviceAddress), zap.String("receiver", receiverName)) } else { - if _, ok := servicePortsMap[port]; ok { - logger.Info("Duplicate port has been configured in Agent Config for port", zap.Int32("port", port)) - } else { - name := CWA + receiverName - if receiverName == OtlpGrpc || receiverName == OtlpHttp { - name = fmt.Sprintf("%s-%d", receiverName, port) + if ports, exists := servicePortsMap[port]; exists { + for _, existingPort := range ports { + if existingPort.Protocol == protocol { + logger.Info("Duplicate port and protocol combination configured", zap.Int32("port", port), zap.String("protocol", string(protocol))) + return + } } - sp := corev1.ServicePort{ - Name: name, - Port: port, - Protocol: protocol, - } - servicePortsMap[port] = []corev1.ServicePort{sp} } - } - } else { - if _, ok := servicePortsMap[receiverDefaultPortsMap[receiverName]]; ok { - logger.Info("Duplicate port has been configured in Agent Config for port", zap.Int32("port", receiverDefaultPortsMap[receiverName])) - } else { + name := CWA + receiverName + if receiverName == OtlpGrpc || receiverName == OtlpHttp { + name = fmt.Sprintf("%s-%d", receiverName, port) + } sp := corev1.ServicePort{ - Name: receiverName, - Port: receiverDefaultPortsMap[receiverName], + Name: name, + Port: port, Protocol: protocol, } - servicePortsMap[receiverDefaultPortsMap[receiverName]] = []corev1.ServicePort{sp} + servicePortsMap[port] = append(servicePortsMap[port], sp) + } + } else { + defaultPort := receiverDefaultPortsMap[receiverName] + if ports, exists := servicePortsMap[defaultPort]; exists { + for _, existingPort := range ports { + if existingPort.Protocol == protocol { + logger.Info("Duplicate port and protocol combination configured", zap.Int32("port", defaultPort), zap.String("protocol", string(protocol))) + return + } + } + } + sp := corev1.ServicePort{ + Name: receiverName, + Port: defaultPort, + Protocol: protocol, } + servicePortsMap[defaultPort] = append(servicePortsMap[defaultPort], sp) } } @@ -278,22 +277,25 @@ func getTracesReceiversServicePorts(logger logr.Logger, config *adapters.CwaConf //Xray if config.Traces.TracesCollected.XRay != nil { getReceiverServicePort(logger, config.Traces.TracesCollected.XRay.BindAddress, XrayTraces, corev1.ProtocolUDP, servicePortsMap) + serviceAddress := "" if config.Traces.TracesCollected.XRay.TCPProxy != nil { - getReceiverServicePort(logger, config.Traces.TracesCollected.XRay.TCPProxy.BindAddress, XrayProxy, corev1.ProtocolTCP, servicePortsMap) + serviceAddress = config.Traces.TracesCollected.XRay.TCPProxy.BindAddress } + getReceiverServicePort(logger, serviceAddress, XrayProxy, corev1.ProtocolTCP, servicePortsMap) } return tracesPorts } func getApplicationSignalsReceiversServicePorts(logger logr.Logger, config *adapters.CwaConfig, servicePortsMap map[int32][]corev1.ServicePort) { - if !isAppSignalEnabled(config) { - return + if isAppSignalEnabledMetrics(config) || isAppSignalEnabledTraces(config) { + getReceiverServicePort(logger, "", AppSignalsGrpc, corev1.ProtocolTCP, servicePortsMap) + getReceiverServicePort(logger, "", AppSignalsHttp, corev1.ProtocolTCP, servicePortsMap) + getReceiverServicePort(logger, "", Server, corev1.ProtocolTCP, servicePortsMap) } - getReceiverServicePort(logger, AppSignalsGrpcSA, AppSignalsGrpc, corev1.ProtocolTCP, servicePortsMap) - getReceiverServicePort(logger, AppSignalsHttpSA, AppSignalsHttp, corev1.ProtocolTCP, servicePortsMap) - getReceiverServicePort(logger, AppSignalsProxySA, AppSignalsProxy, corev1.ProtocolTCP, servicePortsMap) - getReceiverServicePort(logger, AppSignalsServerSA, Server, corev1.ProtocolTCP, servicePortsMap) + if isAppSignalEnabledTraces(config) { + getReceiverServicePort(logger, "", AppSignalsProxy, corev1.ProtocolTCP, servicePortsMap) + } } func portFromEndpoint(endpoint string) (int32, error) { diff --git a/internal/manifests/collector/ports_test.go b/internal/manifests/collector/ports_test.go index 16c3944d..87c41c94 100644 --- a/internal/manifests/collector/ports_test.go +++ b/internal/manifests/collector/ports_test.go @@ -48,19 +48,100 @@ func TestDefaultCollectDGetContainerPorts(t *testing.T) { assert.Equal(t, corev1.ProtocolUDP, containerPorts[CollectD].Protocol) } -func TestApplicationSignals(t *testing.T) { - cfg := getStringFromFile("./test-resources/application_signals.json") +func TestApplicationSignalsMetrics(t *testing.T) { + cfg := getStringFromFile("./test-resources/applicationSignals.json") + containerPorts := getContainerPorts(logger, cfg, "", []corev1.ServicePort{}) + assert.Equal(t, 3, len(containerPorts)) + assert.Equal(t, int32(4311), containerPorts[Server].ContainerPort) + assert.Equal(t, Server, containerPorts[Server].Name) + assert.Equal(t, corev1.ProtocolTCP, containerPorts[Server].Protocol) + assert.Equal(t, int32(4315), containerPorts[AppSignalsGrpc].ContainerPort) + assert.Equal(t, AppSignalsGrpc, containerPorts[AppSignalsGrpc].Name) + assert.Equal(t, int32(4316), containerPorts[AppSignalsHttp].ContainerPort) + assert.Equal(t, AppSignalsHttp, containerPorts[AppSignalsHttp].Name) +} + +func TestApplicationSignalsTraces(t *testing.T) { + cfg := getStringFromFile("./test-resources/applicationSignalsOnlyTraces.json") containerPorts := getContainerPorts(logger, cfg, "", []corev1.ServicePort{}) assert.Equal(t, 4, len(containerPorts)) - assert.Equal(t, int32(4311), containerPorts[CWA+Server].ContainerPort) - assert.Equal(t, CWA+Server, containerPorts[CWA+Server].Name) - assert.Equal(t, corev1.ProtocolTCP, containerPorts[CWA+Server].Protocol) - assert.Equal(t, int32(4315), containerPorts[CWA+AppSignalsGrpc].ContainerPort) - assert.Equal(t, CWA+AppSignalsGrpc, containerPorts[CWA+AppSignalsGrpc].Name) - assert.Equal(t, int32(4316), containerPorts[CWA+AppSignalsHttp].ContainerPort) - assert.Equal(t, CWA+AppSignalsHttp, containerPorts[CWA+AppSignalsHttp].Name) - assert.Equal(t, int32(2000), containerPorts[CWA+AppSignalsProxy].ContainerPort) - assert.Equal(t, CWA+AppSignalsProxy, containerPorts[CWA+AppSignalsProxy].Name) + assert.Equal(t, int32(4311), containerPorts[Server].ContainerPort) + assert.Equal(t, Server, containerPorts[Server].Name) + assert.Equal(t, corev1.ProtocolTCP, containerPorts[Server].Protocol) + assert.Equal(t, int32(4315), containerPorts[AppSignalsGrpc].ContainerPort) + assert.Equal(t, AppSignalsGrpc, containerPorts[AppSignalsGrpc].Name) + assert.Equal(t, int32(4316), containerPorts[AppSignalsHttp].ContainerPort) + assert.Equal(t, AppSignalsHttp, containerPorts[AppSignalsHttp].Name) + assert.Equal(t, int32(2000), containerPorts[AppSignalsProxy].ContainerPort) + assert.Equal(t, AppSignalsProxy, containerPorts[AppSignalsProxy].Name) +} + +func TestApplicationSignalsMetricsAndTraces(t *testing.T) { + cfg := getStringFromFile("./test-resources/applicationSignalsWithTraces.json") + containerPorts := getContainerPorts(logger, cfg, "", []corev1.ServicePort{}) + assert.Equal(t, 4, len(containerPorts)) + assert.Equal(t, int32(4311), containerPorts[Server].ContainerPort) + assert.Equal(t, Server, containerPorts[Server].Name) + assert.Equal(t, corev1.ProtocolTCP, containerPorts[Server].Protocol) + assert.Equal(t, int32(4315), containerPorts[AppSignalsGrpc].ContainerPort) + assert.Equal(t, AppSignalsGrpc, containerPorts[AppSignalsGrpc].Name) + assert.Equal(t, int32(4316), containerPorts[AppSignalsHttp].ContainerPort) + assert.Equal(t, AppSignalsHttp, containerPorts[AppSignalsHttp].Name) + assert.Equal(t, int32(2000), containerPorts[AppSignalsProxy].ContainerPort) + assert.Equal(t, AppSignalsProxy, containerPorts[AppSignalsProxy].Name) +} + +func TestApplicationSignalsXRayTraces(t *testing.T) { + cfg := getStringFromFile("./test-resources/applicationSignalsXRayTraces.json") + containerPorts := getContainerPorts(logger, cfg, "", []corev1.ServicePort{}) + assert.Equal(t, 5, len(containerPorts)) + assert.Equal(t, int32(4311), containerPorts[Server].ContainerPort) + assert.Equal(t, Server, containerPorts[Server].Name) + assert.Equal(t, corev1.ProtocolTCP, containerPorts[Server].Protocol) + assert.Equal(t, int32(4315), containerPorts[AppSignalsGrpc].ContainerPort) + assert.Equal(t, AppSignalsGrpc, containerPorts[AppSignalsGrpc].Name) + assert.Equal(t, int32(4316), containerPorts[AppSignalsHttp].ContainerPort) + assert.Equal(t, AppSignalsHttp, containerPorts[AppSignalsHttp].Name) + assert.Equal(t, int32(2000), containerPorts[XrayTraces].ContainerPort) + assert.Equal(t, XrayTraces, containerPorts[XrayTraces].Name) + assert.Equal(t, corev1.ProtocolUDP, containerPorts[XrayTraces].Protocol) + assert.Equal(t, int32(2000), containerPorts[AppSignalsProxy].ContainerPort) + assert.Equal(t, AppSignalsProxy, containerPorts[AppSignalsProxy].Name) + assert.Equal(t, corev1.ProtocolTCP, containerPorts[AppSignalsProxy].Protocol) +} + +func TestApplicationSignalsXRayTracesCustom(t *testing.T) { + cfg := getStringFromFile("./test-resources/applicationSignalsXRayTracesCustom.json") + containerPorts := getContainerPorts(logger, cfg, "", []corev1.ServicePort{}) + assert.Equal(t, 6, len(containerPorts)) + assert.Equal(t, int32(4311), containerPorts[Server].ContainerPort) + assert.Equal(t, Server, containerPorts[Server].Name) + assert.Equal(t, corev1.ProtocolTCP, containerPorts[Server].Protocol) + assert.Equal(t, int32(4315), containerPorts[AppSignalsGrpc].ContainerPort) + assert.Equal(t, AppSignalsGrpc, containerPorts[AppSignalsGrpc].Name) + assert.Equal(t, int32(4316), containerPorts[AppSignalsHttp].ContainerPort) + assert.Equal(t, AppSignalsHttp, containerPorts[AppSignalsHttp].Name) + assert.Equal(t, int32(2800), containerPorts[CWA+XrayTraces].ContainerPort) + assert.Equal(t, CWA+XrayTraces, containerPorts[CWA+XrayTraces].Name) + assert.Equal(t, corev1.ProtocolUDP, containerPorts[CWA+XrayTraces].Protocol) + assert.Equal(t, int32(2900), containerPorts[CWA+XrayProxy].ContainerPort) + assert.Equal(t, CWA+XrayProxy, containerPorts[CWA+XrayProxy].Name) + assert.Equal(t, corev1.ProtocolTCP, containerPorts[CWA+XrayProxy].Protocol) + assert.Equal(t, int32(2000), containerPorts[AppSignalsProxy].ContainerPort) + assert.Equal(t, AppSignalsProxy, containerPorts[AppSignalsProxy].Name) + assert.Equal(t, corev1.ProtocolTCP, containerPorts[AppSignalsProxy].Protocol) +} + +func TestXRayCustomUDP(t *testing.T) { + cfg := getStringFromFile("./test-resources/xRayCustomUDP.json") + containerPorts := getContainerPorts(logger, cfg, "", []corev1.ServicePort{}) + assert.Equal(t, 2, len(containerPorts)) + assert.Equal(t, int32(2800), containerPorts[CWA+XrayTraces].ContainerPort) + assert.Equal(t, CWA+XrayTraces, containerPorts[CWA+XrayTraces].Name) + assert.Equal(t, corev1.ProtocolUDP, containerPorts[CWA+XrayTraces].Protocol) + assert.Equal(t, int32(2000), containerPorts[XrayProxy].ContainerPort) + assert.Equal(t, XrayProxy, containerPorts[XrayProxy].Name) + assert.Equal(t, corev1.ProtocolTCP, containerPorts[XrayProxy].Protocol) } func TestEMFGetContainerPorts(t *testing.T) { @@ -82,6 +163,11 @@ func TestXrayAndOTLPGetContainerPorts(t *testing.T) { Protocol: corev1.ProtocolUDP, ContainerPort: int32(2000), }, + { + Name: CWA + XrayProxy, + Protocol: corev1.ProtocolTCP, + ContainerPort: int32(2000), + }, { Name: OtlpGrpc + "-4327", Protocol: corev1.ProtocolTCP, @@ -100,9 +186,13 @@ func TestXrayAndOTLPGetContainerPorts(t *testing.T) { func TestDefaultXRayAndOTLPGetContainerPorts(t *testing.T) { cfg := getStringFromFile("./test-resources/xrayAndOTLPDefaultAgentConfig.json") containerPorts := getContainerPorts(logger, cfg, "", []corev1.ServicePort{}) - assert.Equal(t, 3, len(containerPorts)) + assert.Equal(t, 4, len(containerPorts)) assert.Equal(t, int32(2000), containerPorts[XrayTraces].ContainerPort) assert.Equal(t, XrayTraces, containerPorts[XrayTraces].Name) + assert.Equal(t, corev1.ProtocolUDP, containerPorts[XrayTraces].Protocol) + assert.Equal(t, int32(2000), containerPorts[XrayTraces].ContainerPort) + assert.Equal(t, XrayProxy, containerPorts[XrayProxy].Name) + assert.Equal(t, corev1.ProtocolTCP, containerPorts[XrayProxy].Protocol) assert.Equal(t, int32(4317), containerPorts[OtlpGrpc].ContainerPort) assert.Equal(t, OtlpGrpc, containerPorts[OtlpGrpc].Name) assert.Equal(t, corev1.ProtocolTCP, containerPorts[OtlpGrpc].Protocol) @@ -158,25 +248,20 @@ func TestMultipleReceiversGetContainerPorts(t *testing.T) { cfg = strings.Replace(cfg, "2900", "2000", 1) // set Xray proxy to port 2000 wantPorts := []corev1.ContainerPort{ { - Name: CWA + Server, + Name: Server, Protocol: corev1.ProtocolTCP, ContainerPort: int32(4311), }, { - Name: CWA + AppSignalsGrpc, + Name: AppSignalsGrpc, Protocol: corev1.ProtocolTCP, ContainerPort: int32(4315), }, { - Name: CWA + AppSignalsHttp, + Name: AppSignalsHttp, Protocol: corev1.ProtocolTCP, ContainerPort: int32(4316), }, - { - Name: CWA + AppSignalsProxy, - Protocol: corev1.ProtocolTCP, - ContainerPort: int32(2000), - }, { Name: CWA + StatsD, Protocol: corev1.ProtocolUDP, @@ -202,6 +287,11 @@ func TestMultipleReceiversGetContainerPorts(t *testing.T) { Protocol: corev1.ProtocolUDP, ContainerPort: int32(2800), }, + { + Name: CWA + XrayProxy, + Protocol: corev1.ProtocolTCP, + ContainerPort: int32(2000), + }, { Name: OtlpGrpc + "-4327", Protocol: corev1.ProtocolTCP, @@ -312,67 +402,63 @@ func TestValidOTLPLogsAndMetricsPort(t *testing.T) { } func TestValidJSONAndValidOtelConfig(t *testing.T) { - cfg := getStringFromFile("./test-resources/application_signals.json") + cfg := getStringFromFile("./test-resources/applicationSignals.json") otelCfg := getStringFromFile("./test-resources/otelConfigs/otlpOtelConfig.yaml") containerPorts := getContainerPorts(logger, cfg, otelCfg, []corev1.ServicePort{}) - assert.Equal(t, 5, len(containerPorts)) - assert.Equal(t, int32(4311), containerPorts[CWA+Server].ContainerPort) - assert.Equal(t, CWA+Server, containerPorts[CWA+Server].Name) - assert.Equal(t, int32(4315), containerPorts[CWA+AppSignalsGrpc].ContainerPort) - assert.Equal(t, CWA+AppSignalsGrpc, containerPorts[CWA+AppSignalsGrpc].Name) - assert.Equal(t, int32(4316), containerPorts[CWA+AppSignalsHttp].ContainerPort) - assert.Equal(t, CWA+AppSignalsHttp, containerPorts[CWA+AppSignalsHttp].Name) - assert.Equal(t, int32(2000), containerPorts[CWA+AppSignalsProxy].ContainerPort) - assert.Equal(t, CWA+AppSignalsProxy, containerPorts[CWA+AppSignalsProxy].Name) + assert.Equal(t, 4, len(containerPorts)) + assert.Equal(t, int32(4311), containerPorts[Server].ContainerPort) + assert.Equal(t, Server, containerPorts[Server].Name) + assert.Equal(t, int32(4315), containerPorts[AppSignalsGrpc].ContainerPort) + assert.Equal(t, AppSignalsGrpc, containerPorts[AppSignalsGrpc].Name) + assert.Equal(t, int32(4316), containerPorts[AppSignalsHttp].ContainerPort) + assert.Equal(t, AppSignalsHttp, containerPorts[AppSignalsHttp].Name) assert.Equal(t, int32(4317), containerPorts[OtlpGrpc].ContainerPort) assert.Equal(t, OtlpGrpc, containerPorts[OtlpGrpc].Name) } func TestValidJSONAndInvalidOtelConfig(t *testing.T) { - cfg := getStringFromFile("./test-resources/application_signals.json") + cfg := getStringFromFile("./test-resources/applicationSignals.json") otelCfg := getStringFromFile("./test-resources/otelConfigs/invalidOtlpConfig.yaml") containerPorts := getContainerPorts(logger, cfg, otelCfg, []corev1.ServicePort{}) - assert.Equal(t, 4, len(containerPorts)) - assert.Equal(t, int32(4311), containerPorts[CWA+Server].ContainerPort) - assert.Equal(t, CWA+Server, containerPorts[CWA+Server].Name) - assert.Equal(t, int32(4315), containerPorts[CWA+AppSignalsGrpc].ContainerPort) - assert.Equal(t, CWA+AppSignalsGrpc, containerPorts[CWA+AppSignalsGrpc].Name) - assert.Equal(t, int32(4316), containerPorts[CWA+AppSignalsHttp].ContainerPort) - assert.Equal(t, CWA+AppSignalsHttp, containerPorts[CWA+AppSignalsHttp].Name) - assert.Equal(t, int32(2000), containerPorts[CWA+AppSignalsProxy].ContainerPort) - assert.Equal(t, CWA+AppSignalsProxy, containerPorts[CWA+AppSignalsProxy].Name) + assert.Equal(t, 3, len(containerPorts)) + assert.Equal(t, int32(4311), containerPorts[Server].ContainerPort) + assert.Equal(t, Server, containerPorts[Server].Name) + assert.Equal(t, int32(4315), containerPorts[AppSignalsGrpc].ContainerPort) + assert.Equal(t, AppSignalsGrpc, containerPorts[AppSignalsGrpc].Name) + assert.Equal(t, int32(4316), containerPorts[AppSignalsHttp].ContainerPort) + assert.Equal(t, AppSignalsHttp, containerPorts[AppSignalsHttp].Name) } func TestValidJSONAndConflictingOtelConfig(t *testing.T) { - cfg := getStringFromFile("./test-resources/application_signals.json") + cfg := getStringFromFile("./test-resources/applicationSignals.json") otelCfg := getStringFromFile("./test-resources/otelConfigs/conflictingPortOtlpConfig.yaml") containerPorts := getContainerPorts(logger, cfg, otelCfg, []corev1.ServicePort{}) - assert.Equal(t, 4, len(containerPorts)) - assert.Equal(t, int32(4311), containerPorts[CWA+Server].ContainerPort) - assert.Equal(t, CWA+Server, containerPorts[CWA+Server].Name) - assert.Equal(t, int32(4315), containerPorts[CWA+AppSignalsGrpc].ContainerPort) - assert.Equal(t, CWA+AppSignalsGrpc, containerPorts[CWA+AppSignalsGrpc].Name) - assert.Equal(t, int32(4316), containerPorts[CWA+AppSignalsHttp].ContainerPort) - assert.Equal(t, CWA+AppSignalsHttp, containerPorts[CWA+AppSignalsHttp].Name) - assert.Equal(t, int32(2000), containerPorts[CWA+AppSignalsProxy].ContainerPort) - assert.Equal(t, CWA+AppSignalsProxy, containerPorts[CWA+AppSignalsProxy].Name) + assert.Equal(t, 3, len(containerPorts)) + assert.Equal(t, int32(4311), containerPorts[Server].ContainerPort) + assert.Equal(t, Server, containerPorts[Server].Name) + assert.Equal(t, int32(4315), containerPorts[AppSignalsGrpc].ContainerPort) + assert.Equal(t, AppSignalsGrpc, containerPorts[AppSignalsGrpc].Name) + assert.Equal(t, int32(4316), containerPorts[AppSignalsHttp].ContainerPort) + assert.Equal(t, AppSignalsHttp, containerPorts[AppSignalsHttp].Name) } func TestValidJSONAndConflictingOtelConfigForXray(t *testing.T) { - cfg := getStringFromFile("./test-resources/application_signals_with_traces.json") + cfg := getStringFromFile("./test-resources/applicationSignalsWithTraces.json") otelCfg := getStringFromFile("./test-resources/otelConfigs/xrayOtelConfig.yaml") containerPorts := getContainerPorts(logger, cfg, otelCfg, []corev1.ServicePort{}) assert.Equal(t, 7, len(containerPorts)) - assert.Equal(t, int32(4311), containerPorts[CWA+Server].ContainerPort) - assert.Equal(t, CWA+Server, containerPorts[CWA+Server].Name) - assert.Equal(t, int32(4315), containerPorts[CWA+AppSignalsGrpc].ContainerPort) - assert.Equal(t, CWA+AppSignalsGrpc, containerPorts[CWA+AppSignalsGrpc].Name) - assert.Equal(t, int32(4316), containerPorts[CWA+AppSignalsHttp].ContainerPort) - assert.Equal(t, CWA+AppSignalsHttp, containerPorts[CWA+AppSignalsHttp].Name) - assert.Equal(t, int32(2000), containerPorts[CWA+AppSignalsProxy].ContainerPort) - assert.Equal(t, CWA+AppSignalsProxy, containerPorts[CWA+AppSignalsProxy].Name) + assert.Equal(t, int32(4311), containerPorts[Server].ContainerPort) + assert.Equal(t, Server, containerPorts[Server].Name) + assert.Equal(t, int32(4315), containerPorts[AppSignalsGrpc].ContainerPort) + assert.Equal(t, AppSignalsGrpc, containerPorts[AppSignalsGrpc].Name) + assert.Equal(t, int32(4316), containerPorts[AppSignalsHttp].ContainerPort) + assert.Equal(t, AppSignalsHttp, containerPorts[AppSignalsHttp].Name) + assert.Equal(t, int32(2000), containerPorts[AppSignalsProxy].ContainerPort) + assert.Equal(t, AppSignalsProxy, containerPorts[AppSignalsProxy].Name) + assert.Equal(t, corev1.ProtocolTCP, containerPorts[AppSignalsProxy].Protocol) assert.Equal(t, int32(2000), containerPorts["awsxray"].ContainerPort) assert.Equal(t, "awsxray", containerPorts["awsxray"].Name) + assert.Equal(t, corev1.ProtocolUDP, containerPorts["awsxray"].Protocol) assert.Equal(t, int32(4317), containerPorts["otlp-grpc"].ContainerPort) assert.Equal(t, "otlp-grpc", containerPorts["otlp-grpc"].Name) assert.Equal(t, int32(4318), containerPorts["otlp-http"].ContainerPort) diff --git a/internal/manifests/collector/test-resources/application_signals.json b/internal/manifests/collector/test-resources/applicationSignals.json similarity index 100% rename from internal/manifests/collector/test-resources/application_signals.json rename to internal/manifests/collector/test-resources/applicationSignals.json diff --git a/internal/manifests/collector/test-resources/applicationSignalsOnlyTraces.json b/internal/manifests/collector/test-resources/applicationSignalsOnlyTraces.json new file mode 100644 index 00000000..478b2211 --- /dev/null +++ b/internal/manifests/collector/test-resources/applicationSignalsOnlyTraces.json @@ -0,0 +1,7 @@ +{ + "traces": { + "traces_collected": { + "application_signals": { } + } + } +} \ No newline at end of file diff --git a/internal/manifests/collector/test-resources/application_signals_with_traces.json b/internal/manifests/collector/test-resources/applicationSignalsWithTraces.json similarity index 100% rename from internal/manifests/collector/test-resources/application_signals_with_traces.json rename to internal/manifests/collector/test-resources/applicationSignalsWithTraces.json diff --git a/internal/manifests/collector/test-resources/applicationSignalsXRayTraces.json b/internal/manifests/collector/test-resources/applicationSignalsXRayTraces.json new file mode 100644 index 00000000..84c5b0b3 --- /dev/null +++ b/internal/manifests/collector/test-resources/applicationSignalsXRayTraces.json @@ -0,0 +1,8 @@ +{ + "traces": { + "traces_collected": { + "application_signals": { }, + "xray": { } + } + } +} \ No newline at end of file diff --git a/internal/manifests/collector/test-resources/applicationSignalsXRayTracesCustom.json b/internal/manifests/collector/test-resources/applicationSignalsXRayTracesCustom.json new file mode 100644 index 00000000..0058de9e --- /dev/null +++ b/internal/manifests/collector/test-resources/applicationSignalsXRayTracesCustom.json @@ -0,0 +1,13 @@ +{ + "traces": { + "traces_collected": { + "application_signals": { }, + "xray": { + "bind_address": "127.0.0.1:2800", + "tcp_proxy": { + "bind_address": "127.0.0.1:2900" + } + } + } + } +} \ No newline at end of file diff --git a/internal/manifests/collector/test-resources/xRayCustomUDP.json b/internal/manifests/collector/test-resources/xRayCustomUDP.json new file mode 100644 index 00000000..3af10b8f --- /dev/null +++ b/internal/manifests/collector/test-resources/xRayCustomUDP.json @@ -0,0 +1,9 @@ +{ + "traces": { + "traces_collected": { + "xray": { + "bind_address": "127.0.0.1:2800" + } + } + } +} \ No newline at end of file diff --git a/pkg/instrumentation/defaultinstrumentation.go b/pkg/instrumentation/defaultinstrumentation.go index 0a9ef6df..478ba373 100644 --- a/pkg/instrumentation/defaultinstrumentation.go +++ b/pkg/instrumentation/defaultinstrumentation.go @@ -77,10 +77,10 @@ func getDefaultInstrumentation(agentConfig *adapters.CwaConfig, additionalEnvs m // set protocol by checking cloudwatch agent config for tls setting exporterPrefix := http - isApplicationSignalsEnabled := agentConfig != nil && agentConfig.GetApplicationSignalsConfig() != nil + isApplicationSignalsEnabled := agentConfig != nil && agentConfig.GetApplicationSignalsMetricsConfig() != nil if isApplicationSignalsEnabled { - if agentConfig.GetApplicationSignalsConfig().TLS != nil { + if agentConfig.GetApplicationSignalsMetricsConfig().TLS != nil { exporterPrefix = https } }