Skip to content

Commit c15c64b

Browse files
wangzleiwyTrivail
authored andcommitted
awsxrayexporter: support aws plugins EC2/ECS/Beanstalk (#343)
Add AWS EC2/ECS/Beanstack resources support **Testing:** Verified in https://github.com/aws-samples/aws-xray-sdk-with-opentelemetry-sample/tree/both-otel-and-xray Can get AWS service resources in Span. **Documentation:** https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-java-configuration.html#xray-sdk-java-configuration-plugins
1 parent 2df6e1f commit c15c64b

File tree

3 files changed

+33
-8
lines changed

3 files changed

+33
-8
lines changed

exporter/awsxrayexporter/translator/aws.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ type AWSData struct {
5454
type EC2Metadata struct {
5555
InstanceID string `json:"instance_id"`
5656
AvailabilityZone string `json:"availability_zone"`
57+
InstanceSize string `json:"instance_size"`
58+
AmiID string `json:"ami_id"`
5759
}
5860

5961
// ECSMetadata provides the shape for unmarshalling ECS metadata.
@@ -74,9 +76,12 @@ func makeAws(attributes map[string]string, resource pdata.Resource) (map[string]
7476
account string
7577
zone string
7678
hostID string
79+
hostType string
80+
amiID string
7781
container string
7882
namespace string
7983
deployID string
84+
versionLabel string
8085
operation string
8186
remoteRegion string
8287
requestID string
@@ -99,6 +104,10 @@ func makeAws(attributes map[string]string, resource pdata.Resource) (map[string]
99104
zone = value.StringVal()
100105
case semconventions.AttributeHostID:
101106
hostID = value.StringVal()
107+
case semconventions.AttributeHostType:
108+
hostType = value.StringVal()
109+
case semconventions.AttributeHostImageID:
110+
amiID = value.StringVal()
102111
case semconventions.AttributeContainerName:
103112
if container == "" {
104113
container = value.StringVal()
@@ -109,6 +118,8 @@ func makeAws(attributes map[string]string, resource pdata.Resource) (map[string]
109118
namespace = value.StringVal()
110119
case semconventions.AttributeServiceInstance:
111120
deployID = value.StringVal()
121+
case semconventions.AttributeServiceVersion:
122+
versionLabel = value.StringVal()
112123
}
113124
})
114125
}
@@ -148,6 +159,8 @@ func makeAws(attributes map[string]string, resource pdata.Resource) (map[string]
148159
ec2 = &EC2Metadata{
149160
InstanceID: hostID,
150161
AvailabilityZone: zone,
162+
InstanceSize: hostType,
163+
AmiID: amiID,
151164
}
152165
}
153166
if container != "" {
@@ -163,6 +176,7 @@ func makeAws(attributes map[string]string, resource pdata.Resource) (map[string]
163176
ebs = &BeanstalkMetadata{
164177
Environment: namespace,
165178
DeploymentID: deployNum,
179+
VersionLabel: versionLabel,
166180
}
167181
}
168182
awsData := &AWSData{

exporter/awsxrayexporter/translator/aws_test.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,17 @@ import (
2424

2525
func TestAwsFromEc2Resource(t *testing.T) {
2626
instanceID := "i-00f7c0bcb26da2a99"
27+
hostType := "m5.xlarge"
28+
imageID := "ami-0123456789"
2729
resource := pdata.NewResource()
2830
resource.InitEmpty()
2931
attrs := pdata.NewAttributeMap()
3032
attrs.InsertString(semconventions.AttributeCloudProvider, "aws")
3133
attrs.InsertString(semconventions.AttributeCloudAccount, "123456789")
3234
attrs.InsertString(semconventions.AttributeCloudZone, "us-east-1c")
3335
attrs.InsertString(semconventions.AttributeHostID, instanceID)
34-
attrs.InsertString(semconventions.AttributeHostType, "m5.xlarge")
36+
attrs.InsertString(semconventions.AttributeHostType, hostType)
37+
attrs.InsertString(semconventions.AttributeHostImageID, imageID)
3538
attrs.CopyTo(resource.Attributes())
3639

3740
attributes := make(map[string]string)
@@ -47,6 +50,8 @@ func TestAwsFromEc2Resource(t *testing.T) {
4750
assert.Equal(t, &EC2Metadata{
4851
InstanceID: instanceID,
4952
AvailabilityZone: "us-east-1c",
53+
InstanceSize: hostType,
54+
AmiID: imageID,
5055
}, awsData.EC2Metadata)
5156
}
5257

@@ -86,6 +91,7 @@ func TestAwsFromEcsResource(t *testing.T) {
8691

8792
func TestAwsFromBeanstalkResource(t *testing.T) {
8893
deployID := "232"
94+
versionLabel := "4"
8995
resource := pdata.NewResource()
9096
resource.InitEmpty()
9197
attrs := pdata.NewAttributeMap()
@@ -94,6 +100,7 @@ func TestAwsFromBeanstalkResource(t *testing.T) {
94100
attrs.InsertString(semconventions.AttributeCloudZone, "us-east-1c")
95101
attrs.InsertString(semconventions.AttributeServiceNamespace, "production")
96102
attrs.InsertString(semconventions.AttributeServiceInstance, deployID)
103+
attrs.InsertString(semconventions.AttributeServiceVersion, versionLabel)
97104
attrs.CopyTo(resource.Attributes())
98105

99106
attributes := make(map[string]string)
@@ -107,7 +114,7 @@ func TestAwsFromBeanstalkResource(t *testing.T) {
107114
assert.NotNil(t, awsData.BeanstalkMetadata)
108115
assert.Equal(t, &BeanstalkMetadata{
109116
Environment: "production",
110-
VersionLabel: "",
117+
VersionLabel: versionLabel,
111118
DeploymentID: 232,
112119
}, awsData.BeanstalkMetadata)
113120
}

exporter/awsxrayexporter/translator/segment.go

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -241,15 +241,19 @@ func newSegmentID() pdata.SpanID {
241241
}
242242

243243
func determineAwsOrigin(resource pdata.Resource) string {
244-
origin := OriginEC2
244+
// EB > ECS > EC2
245245
if resource.IsNil() {
246-
return origin
246+
return OriginEC2
247247
}
248-
_, ok := resource.Attributes().Get(semconventions.AttributeContainerName)
249-
if ok {
250-
origin = OriginECS
248+
_, eb := resource.Attributes().Get(semconventions.AttributeServiceInstance)
249+
if eb {
250+
return OriginEB
251+
}
252+
_, ecs := resource.Attributes().Get(semconventions.AttributeContainerName)
253+
if ecs {
254+
return OriginECS
251255
}
252-
return origin
256+
return OriginEC2
253257
}
254258

255259
// convertToAmazonTraceID converts a trace ID to the Amazon format.

0 commit comments

Comments
 (0)