Skip to content

Commit 1021458

Browse files
committed
feat(aap): update api gateway inferred span tags for better correlation
1 parent ed75966 commit 1021458

File tree

2 files changed

+33
-39
lines changed

2 files changed

+33
-39
lines changed

datadog_lambda/tracing.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1061,6 +1061,8 @@ def create_inferred_span_from_api_gateway_event(
10611061
event, context, decode_authorizer_context: bool = True
10621062
):
10631063
request_context = event.get("requestContext")
1064+
identity = request_context.get("identity")
1065+
10641066
domain = request_context.get("domainName", "")
10651067
api_id = request_context.get("apiId")
10661068
service_name = determine_service_name(
@@ -1072,11 +1074,11 @@ def create_inferred_span_from_api_gateway_event(
10721074
resource_path = _get_resource_path(event, request_context)
10731075
resource = f"{method} {resource_path}"
10741076
tags = {
1075-
"operation_name": "aws.apigateway.rest",
10761077
"http.url": http_url,
10771078
"endpoint": path,
10781079
"http.method": method,
10791080
"resource_names": resource,
1081+
"http.useragent": identity.get("userAgent"),
10801082
"span.kind": "server",
10811083
"apiid": api_id,
10821084
"apiname": api_id,
@@ -1091,7 +1093,7 @@ def create_inferred_span_from_api_gateway_event(
10911093
args = {
10921094
"service": service_name,
10931095
"resource": resource,
1094-
"span_type": "http",
1096+
"span_type": "web",
10951097
}
10961098
tracer.set_tags(_dd_origin)
10971099
upstream_authorizer_span = None
@@ -1140,13 +1142,12 @@ def create_inferred_span_from_http_api_event(
11401142
resource_path = _get_resource_path(event, request_context)
11411143
resource = f"{method} {resource_path}"
11421144
tags = {
1143-
"operation_name": "aws.httpapi",
11441145
"endpoint": path,
11451146
"http.url": http_url,
11461147
"http.method": http.get("method"),
11471148
"http.protocol": http.get("protocol"),
11481149
"http.source_ip": http.get("sourceIp"),
1149-
"http.user_agent": http.get("userAgent"),
1150+
"http.useragent": http.get("userAgent"),
11501151
"resource_names": resource,
11511152
"request_id": context.aws_request_id,
11521153
"apiid": api_id,
@@ -1167,7 +1168,7 @@ def create_inferred_span_from_http_api_event(
11671168
Headers.Parent_Span_Finish_Time
11681169
)
11691170
span = tracer.trace(
1170-
"aws.httpapi", service=service_name, resource=resource, span_type="http"
1171+
"aws.httpapi", service=service_name, resource=resource, span_type="web"
11711172
)
11721173
if span:
11731174
span.set_tags(tags)
@@ -1424,7 +1425,7 @@ def create_inferred_span_from_eventbridge_event(event, context):
14241425
span.start = dt.replace(tzinfo=timezone.utc).timestamp()
14251426

14261427
# Since inferred span will later parent Lambda, preserve Lambda's current parent
1427-
if dd_trace_context.span_id:
1428+
if dd_trace_context and getattr(dd_trace_context, "span_id", None):
14281429
span.parent_id = dd_trace_context.span_id
14291430

14301431
return span

tests/test_tracing.py

Lines changed: 26 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1380,7 +1380,6 @@ def test_remaps_all_inferred_span_service_names_from_api_gateway_event(self):
13801380
ctx.aws_request_id = "123"
13811381

13821382
span1 = create_inferred_span(original_event, ctx)
1383-
self.assertEqual(span1.get_tag("operation_name"), "aws.apigateway.rest")
13841383
self.assertEqual(span1.service, "new-name")
13851384

13861385
# Testing the second event
@@ -1389,7 +1388,6 @@ def test_remaps_all_inferred_span_service_names_from_api_gateway_event(self):
13891388
"domainName"
13901389
] = "different.execute-api.us-east-2.amazonaws.com"
13911390
span2 = create_inferred_span(event2, ctx)
1392-
self.assertEqual(span2.get_tag("operation_name"), "aws.apigateway.rest")
13931391
self.assertEqual(span2.service, "new-name")
13941392

13951393
def test_remaps_specific_inferred_span_service_names_from_api_gateway_event(
@@ -1406,14 +1404,12 @@ def test_remaps_specific_inferred_span_service_names_from_api_gateway_event(
14061404
ctx.aws_request_id = "123"
14071405

14081406
span1 = create_inferred_span(original_event, ctx)
1409-
self.assertEqual(span1.get_tag("operation_name"), "aws.apigateway.rest")
14101407
self.assertEqual(span1.service, "new-name")
14111408

14121409
# Testing the second event
14131410
event2 = copy.deepcopy(original_event)
14141411
event2["requestContext"]["apiId"] = "different"
14151412
span2 = create_inferred_span(event2, ctx)
1416-
self.assertEqual(span2.get_tag("operation_name"), "aws.apigateway.rest")
14171413
self.assertEqual(
14181414
span2.service, "70ixmpl4fl.execute-api.us-east-2.amazonaws.com"
14191415
)
@@ -1456,14 +1452,12 @@ def test_remaps_specific_inferred_span_service_names_from_api_gateway_http_event
14561452
ctx.aws_request_id = "123"
14571453

14581454
span1 = create_inferred_span(original_event, ctx)
1459-
self.assertEqual(span1.get_tag("operation_name"), "aws.httpapi")
14601455
self.assertEqual(span1.service, "new-name")
14611456

14621457
# Testing the second event
14631458
event2 = copy.deepcopy(original_event)
14641459
event2["requestContext"]["apiId"] = "different"
14651460
span2 = create_inferred_span(event2, ctx)
1466-
self.assertEqual(span2.get_tag("operation_name"), "aws.httpapi")
14671461
self.assertEqual(
14681462
span2.service, "x02yirxc7a.execute-api.eu-west-1.amazonaws.com"
14691463
)
@@ -1804,7 +1798,7 @@ def __init__(self, service, start, span_type, parent_name=None, tags=None):
18041798
_Span(
18051799
service="70ixmpl4fl.execute-api.us-east-2.amazonaws.com",
18061800
start=1428582896.0,
1807-
span_type="http",
1801+
span_type="web",
18081802
tags={
18091803
"_dd.origin": "lambda",
18101804
"_inferred_span.synchronicity": "sync",
@@ -1814,7 +1808,7 @@ def __init__(self, service, start, span_type, parent_name=None, tags=None):
18141808
"endpoint": "/path/to/resource",
18151809
"http.method": "POST",
18161810
"http.url": "https://70ixmpl4fl.execute-api.us-east-2.amazonaws.com/path/to/resource",
1817-
"operation_name": "aws.apigateway.rest",
1811+
"http.useragent": "Custom User Agent String",
18181812
"request_id": "123",
18191813
"resource_names": "POST /{proxy+}",
18201814
"stage": "prod",
@@ -1826,7 +1820,7 @@ def __init__(self, service, start, span_type, parent_name=None, tags=None):
18261820
_Span(
18271821
service="lgxbo6a518.execute-api.eu-west-1.amazonaws.com",
18281822
start=1631210915.2510002,
1829-
span_type="http",
1823+
span_type="web",
18301824
tags={
18311825
"_dd.origin": "lambda",
18321826
"_inferred_span.synchronicity": "async",
@@ -1836,7 +1830,7 @@ def __init__(self, service, start, span_type, parent_name=None, tags=None):
18361830
"endpoint": "/http/get",
18371831
"http.method": "GET",
18381832
"http.url": "https://lgxbo6a518.execute-api.eu-west-1.amazonaws.com/http/get",
1839-
"operation_name": "aws.apigateway.rest",
1833+
"http.useragent": "curl/7.64.1",
18401834
"request_id": "123",
18411835
"resource_names": "GET /http/get",
18421836
"stage": "dev",
@@ -1848,7 +1842,7 @@ def __init__(self, service, start, span_type, parent_name=None, tags=None):
18481842
_Span(
18491843
service="lgxbo6a518.execute-api.eu-west-1.amazonaws.com",
18501844
start=1631210915.2510002,
1851-
span_type="http",
1845+
span_type="web",
18521846
tags={
18531847
"_dd.origin": "lambda",
18541848
"_inferred_span.synchronicity": "sync",
@@ -1858,7 +1852,7 @@ def __init__(self, service, start, span_type, parent_name=None, tags=None):
18581852
"endpoint": "/http/get",
18591853
"http.method": "GET",
18601854
"http.url": "https://lgxbo6a518.execute-api.eu-west-1.amazonaws.com/http/get",
1861-
"operation_name": "aws.apigateway.rest",
1855+
"http.useragent": "curl/7.64.1",
18621856
"request_id": "123",
18631857
"resource_names": "GET /http/get",
18641858
"stage": "dev",
@@ -1870,7 +1864,7 @@ def __init__(self, service, start, span_type, parent_name=None, tags=None):
18701864
_Span(
18711865
service="x02yirxc7a.execute-api.eu-west-1.amazonaws.com",
18721866
start=1631212283.738,
1873-
span_type="http",
1867+
span_type="web",
18741868
tags={
18751869
"_dd.origin": "lambda",
18761870
"_inferred_span.synchronicity": "sync",
@@ -1882,8 +1876,7 @@ def __init__(self, service, start, span_type, parent_name=None, tags=None):
18821876
"http.protocol": "HTTP/1.1",
18831877
"http.source_ip": "38.122.226.210",
18841878
"http.url": "https://x02yirxc7a.execute-api.eu-west-1.amazonaws.com/httpapi/get",
1885-
"http.user_agent": "curl/7.64.1",
1886-
"operation_name": "aws.httpapi",
1879+
"http.useragent": "curl/7.64.1",
18871880
"request_id": "123",
18881881
"resource_names": "GET /httpapi/get",
18891882
"stage": "$default",
@@ -1895,7 +1888,7 @@ def __init__(self, service, start, span_type, parent_name=None, tags=None):
18951888
_Span(
18961889
service="mcwkra0ya4.execute-api.sa-east-1.amazonaws.com",
18971890
start=1710529824.52,
1898-
span_type="http",
1891+
span_type="web",
18991892
tags={
19001893
"_dd.origin": "lambda",
19011894
"_inferred_span.synchronicity": "sync",
@@ -1905,7 +1898,7 @@ def __init__(self, service, start, span_type, parent_name=None, tags=None):
19051898
"endpoint": "/user/42",
19061899
"http.method": "GET",
19071900
"http.url": "https://mcwkra0ya4.execute-api.sa-east-1.amazonaws.com/user/42",
1908-
"operation_name": "aws.apigateway.rest",
1901+
"http.useragent": "curl/8.1.2",
19091902
"request_id": "123",
19101903
"resource_names": "GET /user/{id}",
19111904
"stage": "dev",
@@ -1917,7 +1910,7 @@ def __init__(self, service, start, span_type, parent_name=None, tags=None):
19171910
_Span(
19181911
service="9vj54we5ih.execute-api.sa-east-1.amazonaws.com",
19191912
start=1710529905.066,
1920-
span_type="http",
1913+
span_type="web",
19211914
tags={
19221915
"_dd.origin": "lambda",
19231916
"_inferred_span.synchronicity": "sync",
@@ -1927,7 +1920,7 @@ def __init__(self, service, start, span_type, parent_name=None, tags=None):
19271920
"endpoint": "/user/42",
19281921
"http.method": "GET",
19291922
"http.url": "https://9vj54we5ih.execute-api.sa-east-1.amazonaws.com/user/42",
1930-
"operation_name": "aws.httpapi",
1923+
"http.useragent": "curl/8.1.2",
19311924
"request_id": "123",
19321925
"resource_names": "GET /user/{id}",
19331926
"stage": "$default",
@@ -2186,7 +2179,7 @@ def __init__(self, service, start, span_type, parent_name=None, tags=None):
21862179
_Span(
21872180
service="70ixmpl4fl.execute-api.us-east-2.amazonaws.com",
21882181
start=1428582896.0,
2189-
span_type="http",
2182+
span_type="web",
21902183
tags={
21912184
"_dd.origin": "lambda",
21922185
"_inferred_span.synchronicity": "sync",
@@ -2196,7 +2189,7 @@ def __init__(self, service, start, span_type, parent_name=None, tags=None):
21962189
"endpoint": "/path/to/resource",
21972190
"http.method": "POST",
21982191
"http.url": "https://70ixmpl4fl.execute-api.us-east-2.amazonaws.com/path/to/resource",
2199-
"operation_name": "aws.apigateway.rest",
2192+
"http.useragent": "Custom User Agent String",
22002193
"request_id": "123",
22012194
"resource_names": "POST /{proxy+}",
22022195
"stage": "prod",
@@ -2208,7 +2201,7 @@ def __init__(self, service, start, span_type, parent_name=None, tags=None):
22082201
_Span(
22092202
service="amddr1rix9.execute-api.eu-west-1.amazonaws.com",
22102203
start=1663295021.832,
2211-
span_type="http",
2204+
span_type="web",
22122205
parent_name="aws.apigateway.authorizer",
22132206
tags={
22142207
"_dd.origin": "lambda",
@@ -2219,7 +2212,7 @@ def __init__(self, service, start, span_type, parent_name=None, tags=None):
22192212
"endpoint": "/hello",
22202213
"http.method": "GET",
22212214
"http.url": "https://amddr1rix9.execute-api.eu-west-1.amazonaws.com/hello",
2222-
"operation_name": "aws.apigateway.rest",
2215+
"http.useragent": "PostmanRuntime/7.29.2",
22232216
"request_id": "123",
22242217
"resource_names": "GET /hello",
22252218
"stage": "dev",
@@ -2231,7 +2224,7 @@ def __init__(self, service, start, span_type, parent_name=None, tags=None):
22312224
_Span(
22322225
service="amddr1rix9.execute-api.eu-west-1.amazonaws.com",
22332226
start=1666714653.636,
2234-
span_type="http",
2227+
span_type="web",
22352228
tags={
22362229
"_dd.origin": "lambda",
22372230
"_inferred_span.synchronicity": "sync",
@@ -2241,7 +2234,7 @@ def __init__(self, service, start, span_type, parent_name=None, tags=None):
22412234
"endpoint": "/hello",
22422235
"http.method": "GET",
22432236
"http.url": "https://amddr1rix9.execute-api.eu-west-1.amazonaws.com/hello",
2244-
"operation_name": "aws.apigateway.rest",
2237+
"http.useragent": "PostmanRuntime/7.29.2",
22452238
"request_id": "123",
22462239
"resource_names": "GET /hello",
22472240
"stage": "dev",
@@ -2253,7 +2246,7 @@ def __init__(self, service, start, span_type, parent_name=None, tags=None):
22532246
_Span(
22542247
service="amddr1rix9.execute-api.eu-west-1.amazonaws.com",
22552248
start=1663295021.832,
2256-
span_type="http",
2249+
span_type="web",
22572250
parent_name="aws.apigateway.authorizer",
22582251
tags={
22592252
"_dd.origin": "lambda",
@@ -2264,7 +2257,7 @@ def __init__(self, service, start, span_type, parent_name=None, tags=None):
22642257
"endpoint": "/hello",
22652258
"http.method": "GET",
22662259
"http.url": "https://amddr1rix9.execute-api.eu-west-1.amazonaws.com/hello",
2267-
"operation_name": "aws.apigateway.rest",
2260+
"http.useragent": "PostmanRuntime/7.29.2",
22682261
"request_id": "123",
22692262
"resource_names": "GET /hello",
22702263
"stage": "dev",
@@ -2276,7 +2269,7 @@ def __init__(self, service, start, span_type, parent_name=None, tags=None):
22762269
_Span(
22772270
service="amddr1rix9.execute-api.eu-west-1.amazonaws.com",
22782271
start=1666803622.99,
2279-
span_type="http",
2272+
span_type="web",
22802273
tags={
22812274
"_dd.origin": "lambda",
22822275
"_inferred_span.synchronicity": "sync",
@@ -2286,7 +2279,7 @@ def __init__(self, service, start, span_type, parent_name=None, tags=None):
22862279
"endpoint": "/hello",
22872280
"http.method": "GET",
22882281
"http.url": "https://amddr1rix9.execute-api.eu-west-1.amazonaws.com/hello",
2289-
"operation_name": "aws.apigateway.rest",
2282+
"http.useragent": "PostmanRuntime/7.29.2",
22902283
"request_id": "123",
22912284
"resource_names": "GET /hello",
22922285
"stage": "dev",
@@ -2298,7 +2291,7 @@ def __init__(self, service, start, span_type, parent_name=None, tags=None):
22982291
_Span(
22992292
service="amddr1rix9.execute-api.eu-west-1.amazonaws.com",
23002293
start=1664228639.5337753,
2301-
span_type="http",
2294+
span_type="web",
23022295
tags={
23032296
"_dd.origin": "lambda",
23042297
"_inferred_span.synchronicity": "sync",
@@ -2308,7 +2301,7 @@ def __init__(self, service, start, span_type, parent_name=None, tags=None):
23082301
"endpoint": "/hello",
23092302
"http.method": "GET",
23102303
"http.url": "https://amddr1rix9.execute-api.eu-west-1.amazonaws.com/hello",
2311-
"operation_name": "aws.httpapi",
2304+
"http.useragent": "curl/7.64.1",
23122305
"request_id": "123",
23132306
"resource_names": "GET /hello",
23142307
"stage": "dev",
@@ -2320,7 +2313,7 @@ def __init__(self, service, start, span_type, parent_name=None, tags=None):
23202313
_Span(
23212314
service="amddr1rix9.execute-api.eu-west-1.amazonaws.com",
23222315
start=1666715429.349,
2323-
span_type="http",
2316+
span_type="web",
23242317
tags={
23252318
"_dd.origin": "lambda",
23262319
"_inferred_span.synchronicity": "sync",
@@ -2330,7 +2323,7 @@ def __init__(self, service, start, span_type, parent_name=None, tags=None):
23302323
"endpoint": "/hello",
23312324
"http.method": "GET",
23322325
"http.url": "https://amddr1rix9.execute-api.eu-west-1.amazonaws.com/hello",
2333-
"operation_name": "aws.httpapi",
2326+
"http.useragent": "PostmanRuntime/7.29.2",
23342327
"request_id": "123",
23352328
"resource_names": "GET /hello",
23362329
"stage": "dev",

0 commit comments

Comments
 (0)