Skip to content

Commit 9aba56f

Browse files
authored
[SLS-1713] Add tag for whether span should inherit service from lambda (#196)
* Use service arg rather than service.name tag * Refactor inferred span metadata tags
1 parent fc9a93a commit 9aba56f

12 files changed

+148
-147
lines changed

datadog_lambda/constants.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,4 +43,6 @@ class XrayDaemon(object):
4343
FUNCTION_NAME_HEADER_NAME = "AWS_LAMBDA_FUNCTION_NAME"
4444

4545

46-
IS_ASYNC_TAG = "is_async"
46+
class InferredSpanTags(object):
47+
IS_ASYNC_TAG = "inferred_span.is_async"
48+
INHERIT_LAMBDA_TAG = "inferred_span.inherit_lambda"

datadog_lambda/tracing.py

Lines changed: 28 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
TraceHeader,
1414
TraceContextSource,
1515
XrayDaemon,
16-
IS_ASYNC_TAG,
16+
InferredSpanTags,
1717
)
1818
from datadog_lambda.xray import (
1919
send_segment,
@@ -32,10 +32,6 @@
3232

3333
logger = logging.getLogger(__name__)
3434

35-
36-
SPAN_TYPE_TAG = "span_type"
37-
SPAN_TYPE_INFERRED = "inferred"
38-
3935
dd_trace_context = {}
4036
dd_tracing_enabled = os.environ.get("DD_TRACE_ENABLED", "false").lower() == "true"
4137

@@ -450,17 +446,17 @@ def create_inferred_span_from_api_gateway_websocket_event(event, context):
450446
endpoint = event["requestContext"]["routeKey"]
451447
tags = {
452448
"operation_name": "aws.apigateway.websocket",
453-
"service.name": domain,
454449
"http.url": domain + endpoint,
455450
"endpoint": endpoint,
456451
"resource_names": domain + endpoint,
457452
"request_id": context.aws_request_id,
458453
"connection_id": event["requestContext"]["connectionId"],
459-
SPAN_TYPE_TAG: SPAN_TYPE_INFERRED,
460-
IS_ASYNC_TAG: is_api_gateway_invocation_async(event),
454+
InferredSpanTags.INHERIT_LAMBDA_TAG: False,
455+
InferredSpanTags.IS_ASYNC_TAG: is_api_gateway_invocation_async(event),
461456
}
462457
request_time_epoch = event["requestContext"]["requestTimeEpoch"]
463458
args = {
459+
"service": domain,
464460
"resource": domain + endpoint,
465461
"span_type": "web",
466462
}
@@ -477,17 +473,17 @@ def create_inferred_span_from_api_gateway_event(event, context):
477473
path = event["path"]
478474
tags = {
479475
"operation_name": "aws.apigateway.rest",
480-
"service.name": domain,
481476
"http.url": domain + path,
482477
"endpoint": path,
483478
"http.method": event["httpMethod"],
484479
"resource_names": domain + path,
485480
"request_id": context.aws_request_id,
486-
SPAN_TYPE_TAG: SPAN_TYPE_INFERRED,
487-
IS_ASYNC_TAG: is_api_gateway_invocation_async(event),
481+
InferredSpanTags.INHERIT_LAMBDA_TAG: False,
482+
InferredSpanTags.IS_ASYNC_TAG: is_api_gateway_invocation_async(event),
488483
}
489484
request_time_epoch = event["requestContext"]["requestTimeEpoch"]
490485
args = {
486+
"service": domain,
491487
"resource": domain + path,
492488
"span_type": "http",
493489
}
@@ -504,17 +500,17 @@ def create_inferred_span_from_http_api_event(event, context):
504500
path = event["rawPath"]
505501
tags = {
506502
"operation_name": "aws.httpapi",
507-
"service.name": domain,
508503
"http.url": domain + path,
509504
"endpoint": path,
510505
"http.method": event["requestContext"]["http"]["method"],
511506
"resource_names": domain + path,
512507
"request_id": context.aws_request_id,
513-
SPAN_TYPE_TAG: SPAN_TYPE_INFERRED,
514-
IS_ASYNC_TAG: is_api_gateway_invocation_async(event),
508+
InferredSpanTags.INHERIT_LAMBDA_TAG: False,
509+
InferredSpanTags.IS_ASYNC_TAG: is_api_gateway_invocation_async(event),
515510
}
516511
request_time_epoch = event["requestContext"]["timeEpoch"]
517512
args = {
513+
"service": domain,
518514
"resource": domain + path,
519515
"span_type": "http",
520516
}
@@ -531,13 +527,13 @@ def create_inferred_span_from_sqs_event(event, context):
531527
queue_name = event_record["eventSourceARN"].split(":")[-1]
532528
tags = {
533529
"operation_name": "aws.sqs",
534-
"service.name": "sqs",
535530
"resource_names": queue_name,
536-
SPAN_TYPE_TAG: SPAN_TYPE_INFERRED,
537-
IS_ASYNC_TAG: True,
531+
InferredSpanTags.INHERIT_LAMBDA_TAG: False,
532+
InferredSpanTags.IS_ASYNC_TAG: True,
538533
}
539534
request_time_epoch = event_record["attributes"]["SentTimestamp"]
540535
args = {
536+
"service": "sqs",
541537
"resource": queue_name,
542538
"span_type": "web",
543539
}
@@ -554,16 +550,16 @@ def create_inferred_span_from_sns_event(event, context):
554550
topic_name = event_record["Sns"]["TopicArn"].split(":")[-1]
555551
tags = {
556552
"operation_name": "aws.sns",
557-
"service.name": "sns",
558553
"resource_names": topic_name,
559-
SPAN_TYPE_TAG: SPAN_TYPE_INFERRED,
560-
IS_ASYNC_TAG: True,
554+
InferredSpanTags.INHERIT_LAMBDA_TAG: False,
555+
InferredSpanTags.IS_ASYNC_TAG: True,
561556
}
562557
sns_dt_format = "%Y-%m-%dT%H:%M:%S.%fZ"
563558
timestamp = event_record["Sns"]["Timestamp"]
564559
dt = datetime.strptime(timestamp, sns_dt_format)
565560

566561
args = {
562+
"service": "sns",
567563
"resource": topic_name,
568564
"span_type": "web",
569565
}
@@ -580,14 +576,14 @@ def create_inferred_span_from_kinesis_event(event, context):
580576
stream_name = event_record["eventSourceARN"].split(":")[-1]
581577
tags = {
582578
"operation_name": "aws.kinesis",
583-
"service.name": "kinesis",
584579
"resource_names": stream_name,
585-
SPAN_TYPE_TAG: SPAN_TYPE_INFERRED,
586-
IS_ASYNC_TAG: True,
580+
InferredSpanTags.INHERIT_LAMBDA_TAG: False,
581+
InferredSpanTags.IS_ASYNC_TAG: True,
587582
}
588583
request_time_epoch = event_record["kinesis"]["approximateArrivalTimestamp"]
589584

590585
args = {
586+
"service": "kinesis",
591587
"resource": stream_name,
592588
"span_type": "web",
593589
}
@@ -604,14 +600,14 @@ def create_inferred_span_from_dynamodb_event(event, context):
604600
table_name = event_record["eventSourceARN"].split("/")[1]
605601
tags = {
606602
"operation_name": "aws.dynamodb",
607-
"service.name": "dynamodb",
608603
"resource_names": table_name,
609-
SPAN_TYPE_TAG: SPAN_TYPE_INFERRED,
610-
IS_ASYNC_TAG: True,
604+
InferredSpanTags.INHERIT_LAMBDA_TAG: False,
605+
InferredSpanTags.IS_ASYNC_TAG: True,
611606
}
612607
request_time_epoch = event_record["dynamodb"]["ApproximateCreationDateTime"]
613608

614609
args = {
610+
"service": "dynamodb",
615611
"resource": table_name,
616612
"span_type": "web",
617613
}
@@ -628,16 +624,16 @@ def create_inferred_span_from_s3_event(event, context):
628624
bucket_name = event_record["s3"]["bucket"]["name"]
629625
tags = {
630626
"operation_name": "aws.s3",
631-
"service.name": "s3",
632627
"resource_names": bucket_name,
633-
SPAN_TYPE_TAG: SPAN_TYPE_INFERRED,
634-
IS_ASYNC_TAG: True,
628+
InferredSpanTags.INHERIT_LAMBDA_TAG: False,
629+
InferredSpanTags.IS_ASYNC_TAG: True,
635630
}
636631
dt_format = "%Y-%m-%dT%H:%M:%S.%fZ"
637632
timestamp = event_record["eventTime"]
638633
dt = datetime.strptime(timestamp, dt_format)
639634

640635
args = {
636+
"service": "s3",
641637
"resource": bucket_name,
642638
"span_type": "web",
643639
}
@@ -653,16 +649,16 @@ def create_inferred_span_from_eventbridge_event(event, context):
653649
source = event["source"]
654650
tags = {
655651
"operation_name": "aws.eventbridge",
656-
"service.name": "eventbridge",
657652
"resource_names": source,
658-
SPAN_TYPE_TAG: SPAN_TYPE_INFERRED,
659-
IS_ASYNC_TAG: True,
653+
InferredSpanTags.INHERIT_LAMBDA_TAG: False,
654+
InferredSpanTags.IS_ASYNC_TAG: True,
660655
}
661656
dt_format = "%Y-%m-%dT%H:%M:%SZ"
662657
timestamp = event["time"]
663658
dt = datetime.strptime(timestamp, dt_format)
664659

665660
args = {
661+
"service": "eventbridge",
666662
"resource": source,
667663
"span_type": "web",
668664
}

datadog_lambda/wrapper.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
from datadog_lambda.constants import (
1414
XraySubsegment,
1515
TraceContextSource,
16-
IS_ASYNC_TAG,
16+
InferredSpanTags,
1717
)
1818
from datadog_lambda.metric import (
1919
flush_stats,
@@ -210,7 +210,10 @@ def _after(self, event, context):
210210
if status_code:
211211
self.inferred_span.set_tag("http.status_code", status_code)
212212

213-
if self.inferred_span.get_tag(IS_ASYNC_TAG) == "True" and self.span:
213+
if (
214+
self.inferred_span.get_tag(InferredSpanTags.IS_ASYNC_TAG) == "True"
215+
and self.span
216+
):
214217
self.inferred_span.finish(finish_time=self.span.start)
215218
else:
216219
self.inferred_span.finish()

0 commit comments

Comments
 (0)