From 9727329380e810e9066f940504632b5d4cc7401f Mon Sep 17 00:00:00 2001 From: Nimrod Shlagman Date: Tue, 21 Mar 2023 15:17:55 +0200 Subject: [PATCH 1/8] sync aws attr with sencov --- .../aws/aws-sdk-go-v2/otelaws/attributes.go | 14 ++++++++++---- .../aws/aws-sdk-go-v2/otelaws/attributes_test.go | 11 +++++++++-- .../github.com/aws/aws-sdk-go-v2/otelaws/aws.go | 1 + .../aws/aws-sdk-go-v2/otelaws/test/aws_test.go | 5 +++-- .../otelaws/test/dynamodbattributes_test.go | 9 +++++---- 5 files changed, 28 insertions(+), 12 deletions(-) diff --git a/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/attributes.go b/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/attributes.go index 29dc8b4ca54..2479dc428c6 100644 --- a/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/attributes.go +++ b/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/attributes.go @@ -27,10 +27,11 @@ import ( // AWS attributes. const ( - OperationKey attribute.Key = "aws.operation" + OperationKey attribute.Key = "rpc.method" RegionKey attribute.Key = "aws.region" - ServiceKey attribute.Key = "aws.service" + ServiceKey attribute.Key = "rpc.service" RequestIDKey attribute.Key = "aws.request_id" + RpcSystem attribute.Key = "rpc.system" ) var servicemap = map[string]AttributeSetter{ @@ -38,7 +39,12 @@ var servicemap = map[string]AttributeSetter{ sqs.ServiceID: SQSAttributeSetter, } -// OperationAttr returns the AWS operation attribute. +// SystemAttr return the RPC system attribute +func SystemAttr(operation string) attribute.KeyValue { + return RpcSystem.String(operation) +} + +// OperationAttr returns the RPC operation attribute. func OperationAttr(operation string) attribute.KeyValue { return OperationKey.String(operation) } @@ -48,7 +54,7 @@ func RegionAttr(region string) attribute.KeyValue { return RegionKey.String(region) } -// ServiceAttr returns the AWS service attribute. +// ServiceAttr returns the RPC service attribute. func ServiceAttr(service string) attribute.KeyValue { return ServiceKey.String(service) } diff --git a/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/attributes_test.go b/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/attributes_test.go index 8696583d8f7..6c404296f61 100644 --- a/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/attributes_test.go +++ b/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/attributes_test.go @@ -25,7 +25,7 @@ import ( func TestOperationAttr(t *testing.T) { operation := "test-operation" attr := OperationAttr(operation) - assert.Equal(t, attribute.String("aws.operation", operation), attr) + assert.Equal(t, attribute.String("rpc.method", operation), attr) } func TestRegionAttr(t *testing.T) { @@ -37,7 +37,7 @@ func TestRegionAttr(t *testing.T) { func TestServiceAttr(t *testing.T) { service := "test-service" attr := ServiceAttr(service) - assert.Equal(t, attribute.String("aws.service", service), attr) + assert.Equal(t, attribute.String("rpc.service", service), attr) } func TestRequestIDAttr(t *testing.T) { @@ -45,3 +45,10 @@ func TestRequestIDAttr(t *testing.T) { attr := RequestIDAttr(requestID) assert.Equal(t, attribute.String("aws.request_id", requestID), attr) } + +func TestSystemAttribute(t *testing.T) { + system := "test-system" + attr := SystemAttr(system) + assert.Equal(t, attribute.String("rpc.system", system), attr) + +} diff --git a/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/aws.go b/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/aws.go index 4bb01253b87..87d7b0b49dd 100644 --- a/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/aws.go +++ b/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/aws.go @@ -64,6 +64,7 @@ func (m otelMiddlewares) initializeMiddlewareAfter(stack *middleware.Stack) erro region := v2Middleware.GetRegion(ctx) attributes := []attribute.KeyValue{ + SystemAttr("aws-api"), ServiceAttr(serviceID), RegionAttr(region), OperationAttr(operation), diff --git a/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/test/aws_test.go b/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/test/aws_test.go index 382e607e6a5..0bc18e60c71 100644 --- a/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/test/aws_test.go +++ b/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/test/aws_test.go @@ -146,9 +146,10 @@ func TestAppendMiddlewares(t *testing.T) { if c.expectedRequestID != "" { assert.Contains(t, attrs, attribute.String("aws.request_id", c.expectedRequestID)) } - assert.Contains(t, attrs, attribute.String("aws.service", "Route 53")) + assert.Contains(t, attrs, attribute.String("rpc.system", "aws-api")) + assert.Contains(t, attrs, attribute.String("rpc.service", "Route 53")) assert.Contains(t, attrs, attribute.String("aws.region", c.expectedRegion)) - assert.Contains(t, attrs, attribute.String("aws.operation", "ChangeResourceRecordSets")) + assert.Contains(t, attrs, attribute.String("rpc.method", "ChangeResourceRecordSets")) }) srv.Close() diff --git a/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/test/dynamodbattributes_test.go b/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/test/dynamodbattributes_test.go index 7660499e733..10911eed949 100644 --- a/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/test/dynamodbattributes_test.go +++ b/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/test/dynamodbattributes_test.go @@ -97,9 +97,10 @@ func TestDynamodbTags(t *testing.T) { assert.Equal(t, trace.SpanKindClient, span.SpanKind()) attrs := span.Attributes() assert.Contains(t, attrs, attribute.Int("http.status_code", cases.expectedStatusCode)) - assert.Contains(t, attrs, attribute.String("aws.service", "DynamoDB")) + assert.Contains(t, attrs, attribute.String("rpc.service", "DynamoDB")) assert.Contains(t, attrs, attribute.String("aws.region", cases.expectedRegion)) - assert.Contains(t, attrs, attribute.String("aws.operation", "GetItem")) + assert.Contains(t, attrs, attribute.String("rpc.method", "GetItem")) + assert.Contains(t, attrs, attribute.String("rpc.system", "aws-api")) assert.Contains(t, attrs, attribute.StringSlice( "aws.dynamodb.table_names", []string{"table1"}, )) @@ -186,9 +187,9 @@ func TestDynamodbTagsCustomSetter(t *testing.T) { assert.Equal(t, trace.SpanKindClient, span.SpanKind()) attrs := span.Attributes() assert.Contains(t, attrs, attribute.Int("http.status_code", cases.expectedStatusCode)) - assert.Contains(t, attrs, attribute.String("aws.service", "DynamoDB")) + assert.Contains(t, attrs, attribute.String("rpc.service", "DynamoDB")) assert.Contains(t, attrs, attribute.String("aws.region", cases.expectedRegion)) - assert.Contains(t, attrs, attribute.String("aws.operation", "GetItem")) + assert.Contains(t, attrs, attribute.String("rpc.method", "GetItem")) assert.Contains(t, attrs, attribute.StringSlice( "aws.dynamodb.table_names", []string{"table1"}, )) From 7a3577d4006039596cfb9ea213d2a5cc41c39e12 Mon Sep 17 00:00:00 2001 From: Nimrod Shlagman Date: Tue, 21 Mar 2023 15:38:52 +0200 Subject: [PATCH 2/8] lint fixes --- .../github.com/aws/aws-sdk-go-v2/otelaws/attributes.go | 6 +++--- .../github.com/aws/aws-sdk-go-v2/otelaws/attributes_test.go | 1 - 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/attributes.go b/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/attributes.go index 2479dc428c6..4a7f3b1b691 100644 --- a/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/attributes.go +++ b/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/attributes.go @@ -31,7 +31,7 @@ const ( RegionKey attribute.Key = "aws.region" ServiceKey attribute.Key = "rpc.service" RequestIDKey attribute.Key = "aws.request_id" - RpcSystem attribute.Key = "rpc.system" + RPCSystem attribute.Key = "rpc.system" ) var servicemap = map[string]AttributeSetter{ @@ -39,9 +39,9 @@ var servicemap = map[string]AttributeSetter{ sqs.ServiceID: SQSAttributeSetter, } -// SystemAttr return the RPC system attribute +// SystemAttr return the RPC system attribute. func SystemAttr(operation string) attribute.KeyValue { - return RpcSystem.String(operation) + return RPCSystem.String(operation) } // OperationAttr returns the RPC operation attribute. diff --git a/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/attributes_test.go b/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/attributes_test.go index 6c404296f61..a2a8820c12b 100644 --- a/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/attributes_test.go +++ b/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/attributes_test.go @@ -50,5 +50,4 @@ func TestSystemAttribute(t *testing.T) { system := "test-system" attr := SystemAttr(system) assert.Equal(t, attribute.String("rpc.system", system), attr) - } From 058d4c43e37d0ad69f4614f063951e8a5ad02398 Mon Sep 17 00:00:00 2001 From: Nimrod Shlagman Date: Tue, 21 Mar 2023 15:58:09 +0200 Subject: [PATCH 3/8] Add CHANGELOG entry --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4361ef53fa5..a4fb46f0919 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,7 +15,8 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm ### Fixed -- - AWS SDK span name to be of the format `Service.Operation` in `go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws`. (#3582, #3521) +- AWS SDK rename attributes `aws.operation`, `aws.service` to `rpc.method`,`rpc.service`. Add `rpc.system` attribute in `go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws`. (#3617, #3521) +- AWS SDK span name to be of the format `Service.Operation` in `go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws`. (#3582, #3521) ## [1.16.0-rc.1/0.41.0-rc.1/0.9.0-rc.1] - 2023-03-02 From 80d11551230a7e73c30ae43939fab3992058a0db Mon Sep 17 00:00:00 2001 From: Nimrod Shlagman Date: Fri, 24 Mar 2023 15:05:28 +0300 Subject: [PATCH 4/8] use semconv consts, fix changelog entry. --- CHANGELOG.md | 3 ++- .../aws/aws-sdk-go-v2/otelaws/attributes.go | 14 ++++++-------- .../aws/aws-sdk-go-v2/otelaws/attributes_test.go | 5 +++-- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a4fb46f0919..e6627c8e76f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,12 +10,13 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm ### Added +- Add `rpc.system` attribute. (#3617) - Add the new `go.opentelemetry.io/contrib/instrgen` package to provide auto-generated source code instrumentation. (#3068) - The `WithPublicEndpoint` and `WithPublicEndpointFn` options in `go.opentelemetry.io/contrib/instrumentation/github.com/emicklei/go-restful/otelrestful`. (#3563) ### Fixed -- AWS SDK rename attributes `aws.operation`, `aws.service` to `rpc.method`,`rpc.service`. Add `rpc.system` attribute in `go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws`. (#3617, #3521) +- AWS SDK rename attributes `aws.operation`, `aws.service` to `rpc.method`,`rpc.service`. (#3617) - AWS SDK span name to be of the format `Service.Operation` in `go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws`. (#3582, #3521) ## [1.16.0-rc.1/0.41.0-rc.1/0.9.0-rc.1] - 2023-03-02 diff --git a/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/attributes.go b/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/attributes.go index 4a7f3b1b691..6d351d68d16 100644 --- a/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/attributes.go +++ b/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/attributes.go @@ -21,17 +21,15 @@ import ( "github.com/aws/aws-sdk-go-v2/service/dynamodb" "github.com/aws/aws-sdk-go-v2/service/sqs" "github.com/aws/smithy-go/middleware" + semconv "go.opentelemetry.io/otel/semconv/v1.17.0" "go.opentelemetry.io/otel/attribute" ) // AWS attributes. const ( - OperationKey attribute.Key = "rpc.method" RegionKey attribute.Key = "aws.region" - ServiceKey attribute.Key = "rpc.service" RequestIDKey attribute.Key = "aws.request_id" - RPCSystem attribute.Key = "rpc.system" ) var servicemap = map[string]AttributeSetter{ @@ -41,12 +39,12 @@ var servicemap = map[string]AttributeSetter{ // SystemAttr return the RPC system attribute. func SystemAttr(operation string) attribute.KeyValue { - return RPCSystem.String(operation) + return semconv.RPCSystemKey.String(operation) } -// OperationAttr returns the RPC operation attribute. +// OperationAttr returns the AWS operation attribute. func OperationAttr(operation string) attribute.KeyValue { - return OperationKey.String(operation) + return semconv.RPCMethod(operation) } // RegionAttr returns the AWS region attribute. @@ -54,9 +52,9 @@ func RegionAttr(region string) attribute.KeyValue { return RegionKey.String(region) } -// ServiceAttr returns the RPC service attribute. +// ServiceAttr returns the AWS service attribute. func ServiceAttr(service string) attribute.KeyValue { - return ServiceKey.String(service) + return semconv.RPCService(service) } // RequestIDAttr returns the AWS request ID attribute. diff --git a/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/attributes_test.go b/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/attributes_test.go index a2a8820c12b..e51f3b24b56 100644 --- a/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/attributes_test.go +++ b/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/attributes_test.go @@ -20,6 +20,7 @@ import ( "github.com/stretchr/testify/assert" "go.opentelemetry.io/otel/attribute" + semconv "go.opentelemetry.io/otel/semconv/v1.17.0" ) func TestOperationAttr(t *testing.T) { @@ -37,7 +38,7 @@ func TestRegionAttr(t *testing.T) { func TestServiceAttr(t *testing.T) { service := "test-service" attr := ServiceAttr(service) - assert.Equal(t, attribute.String("rpc.service", service), attr) + assert.Equal(t, semconv.RPCService(service), attr) } func TestRequestIDAttr(t *testing.T) { @@ -49,5 +50,5 @@ func TestRequestIDAttr(t *testing.T) { func TestSystemAttribute(t *testing.T) { system := "test-system" attr := SystemAttr(system) - assert.Equal(t, attribute.String("rpc.system", system), attr) + assert.Equal(t, semconv.RPCSystemKey.String(system), attr) } From 22f06c8bf93e5f343d91e679904fbededd5e109a Mon Sep 17 00:00:00 2001 From: Nimrod Shlagman Date: Fri, 24 Mar 2023 15:14:14 +0300 Subject: [PATCH 5/8] import fix --- .../github.com/aws/aws-sdk-go-v2/otelaws/attributes.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/attributes.go b/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/attributes.go index 6d351d68d16..1cd685a0935 100644 --- a/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/attributes.go +++ b/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/attributes.go @@ -21,9 +21,9 @@ import ( "github.com/aws/aws-sdk-go-v2/service/dynamodb" "github.com/aws/aws-sdk-go-v2/service/sqs" "github.com/aws/smithy-go/middleware" - semconv "go.opentelemetry.io/otel/semconv/v1.17.0" "go.opentelemetry.io/otel/attribute" + semconv "go.opentelemetry.io/otel/semconv/v1.17.0" ) // AWS attributes. From f2f47fc331db335fe01cec27ae598d353660c6a0 Mon Sep 17 00:00:00 2001 From: Nimrod Shlagman Date: Fri, 24 Mar 2023 15:23:24 +0300 Subject: [PATCH 6/8] changelog fix --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2c205804027..76918f461c6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,7 +10,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm ### Added -- Add `rpc.system` attribute. (#3617) +- AWS SDK add `rpc.system` attribute. (#3617) - Add the new `go.opentelemetry.io/contrib/instrgen` package to provide auto-generated source code instrumentation. (#3068) ## [1.16.0-rc.2/0.41.0-rc.2/0.10.0-rc.2] - 2023-03-23 From 9d5bbc2e644c9e6e1a9ce3a405f357b495e23c9d Mon Sep 17 00:00:00 2001 From: Nimrod Shlagman Date: Sun, 26 Mar 2023 11:42:33 +0300 Subject: [PATCH 7/8] add path to CHANGELOG entry --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 76918f461c6..dc11b750788 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,7 +10,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm ### Added -- AWS SDK add `rpc.system` attribute. (#3617) +- AWS SDK add `rpc.system` attribute in `go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws`. (#3582, #3617) - Add the new `go.opentelemetry.io/contrib/instrgen` package to provide auto-generated source code instrumentation. (#3068) ## [1.16.0-rc.2/0.41.0-rc.2/0.10.0-rc.2] - 2023-03-23 @@ -21,7 +21,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm ### Fixed -- AWS SDK rename attributes `aws.operation`, `aws.service` to `rpc.method`,`rpc.service`. (#3617) +- AWS SDK rename attributes `aws.operation`, `aws.service` to `rpc.method`,`rpc.service` in `go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws`. (#3582, #3617) - AWS SDK span name to be of the format `Service.Operation` in `go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws`. (#3582, #3521) - Prevent sampler configuration reset from erroneously sampling first span in `go.opentelemetry.io/contrib/samplers/jaegerremote`. (#3603, #3604) From f02681f0eb3b571e4e1c82dfcf541b6dd4310511 Mon Sep 17 00:00:00 2001 From: Nimrod Shlagman Date: Tue, 28 Mar 2023 11:25:20 +0300 Subject: [PATCH 8/8] const system rpc attribute --- .../github.com/aws/aws-sdk-go-v2/otelaws/attributes.go | 7 ++++--- .../aws/aws-sdk-go-v2/otelaws/attributes_test.go | 5 ++--- .../github.com/aws/aws-sdk-go-v2/otelaws/aws.go | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/attributes.go b/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/attributes.go index 1cd685a0935..bfe74ca6b86 100644 --- a/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/attributes.go +++ b/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/attributes.go @@ -30,6 +30,7 @@ import ( const ( RegionKey attribute.Key = "aws.region" RequestIDKey attribute.Key = "aws.request_id" + AWSSystemVal string = "aws-api" ) var servicemap = map[string]AttributeSetter{ @@ -37,9 +38,9 @@ var servicemap = map[string]AttributeSetter{ sqs.ServiceID: SQSAttributeSetter, } -// SystemAttr return the RPC system attribute. -func SystemAttr(operation string) attribute.KeyValue { - return semconv.RPCSystemKey.String(operation) +// SystemAttr return the AWS RPC system attribute. +func SystemAttr() attribute.KeyValue { + return semconv.RPCSystemKey.String(AWSSystemVal) } // OperationAttr returns the AWS operation attribute. diff --git a/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/attributes_test.go b/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/attributes_test.go index e51f3b24b56..455be3d9aef 100644 --- a/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/attributes_test.go +++ b/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/attributes_test.go @@ -48,7 +48,6 @@ func TestRequestIDAttr(t *testing.T) { } func TestSystemAttribute(t *testing.T) { - system := "test-system" - attr := SystemAttr(system) - assert.Equal(t, semconv.RPCSystemKey.String(system), attr) + attr := SystemAttr() + assert.Equal(t, semconv.RPCSystemKey.String("aws-api"), attr) } diff --git a/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/aws.go b/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/aws.go index 87d7b0b49dd..021baec234b 100644 --- a/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/aws.go +++ b/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws/aws.go @@ -64,7 +64,7 @@ func (m otelMiddlewares) initializeMiddlewareAfter(stack *middleware.Stack) erro region := v2Middleware.GetRegion(ctx) attributes := []attribute.KeyValue{ - SystemAttr("aws-api"), + SystemAttr(), ServiceAttr(serviceID), RegionAttr(region), OperationAttr(operation),