Skip to content

Commit 16eba03

Browse files
authored
Merge pull request #66 from DataDog/jordan.storms/add_resource_and_executedversion_to_enhanced_metrics
Add resource and executedversion to enhanced lambda metrics
2 parents 37d7d7c + 92a35b8 commit 16eba03

16 files changed

+205
-71
lines changed

.vscode/settings.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"python.pythonPath": "/usr/local/bin/python3"
3+
}

datadog_lambda/tags.py

Lines changed: 42 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,27 +25,48 @@ def tag_dd_lambda_layer(tags):
2525
return [dd_lambda_layer_tag]
2626

2727

28-
def parse_lambda_tags_from_arn(arn):
28+
def parse_lambda_tags_from_arn(lambda_context):
2929
"""Generate the list of lambda tags based on the data in the arn
3030
Args:
31-
arn (str): Lambda ARN.
32-
ex: arn:aws:lambda:us-east-1:123597598159:function:my-lambda[:optional-version]
31+
lambda_context: Aws lambda context object
32+
ex: lambda_context.arn = arn:aws:lambda:us-east-1:123597598159:function:my-lambda:1
3333
"""
34-
# Cap the number of times to split
35-
split_arn = arn.split(":")
34+
# Set up flag for extra testing to distinguish between a version or alias
35+
hasAlias = False
36+
# Cap the number of times to spli
37+
split_arn = lambda_context.invoked_function_arn.split(":")
3638

37-
# If ARN includes version / alias at the end, drop it
3839
if len(split_arn) > 7:
39-
split_arn = split_arn[:7]
40-
41-
_, _, _, region, account_id, _, function_name = split_arn
40+
hasAlias = True
41+
_, _, _, region, account_id, _, function_name, alias = split_arn
42+
else:
43+
_, _, _, region, account_id, _, function_name = split_arn
4244

43-
return [
45+
# Add the standard tags to a list
46+
tags = [
4447
"region:{}".format(region),
4548
"account_id:{}".format(account_id),
4649
"functionname:{}".format(function_name),
4750
]
4851

52+
# Check if we have a version or alias
53+
if hasAlias:
54+
# If $Latest, drop the $ for datadog tag convention. A lambda alias can't start with $
55+
if alias.startswith("$"):
56+
alias = alias[1:]
57+
# Versions are numeric. Aliases need the executed version tag
58+
elif not check_if_number(alias):
59+
tags.append("executedversion:{}".format(lambda_context.function_version))
60+
# create resource tag with function name and alias/version
61+
resource = "resource:{}:{}".format(function_name, alias)
62+
else:
63+
# Resource is only the function name otherwise
64+
resource = "resource:{}".format(function_name)
65+
66+
tags.append(resource)
67+
68+
return tags
69+
4970

5071
def get_runtime_tag():
5172
"""Get the runtime tag from the current Python version
@@ -60,9 +81,19 @@ def get_runtime_tag():
6081
def get_enhanced_metrics_tags(lambda_context):
6182
"""Get the list of tags to apply to enhanced metrics
6283
"""
63-
return parse_lambda_tags_from_arn(lambda_context.invoked_function_arn) + [
84+
return parse_lambda_tags_from_arn(lambda_context) + [
6485
get_cold_start_tag(),
6586
"memorysize:{}".format(lambda_context.memory_limit_in_mb),
6687
get_runtime_tag(),
6788
_format_dd_lambda_layer_tag(),
6889
]
90+
91+
92+
def check_if_number(alias):
93+
""" Check if the alias is a version or number. Python 2 has no easy way to test this like Python 3
94+
"""
95+
try:
96+
float(alias)
97+
return True
98+
except ValueError:
99+
return False

tests/integration/snapshots/logs/async-metrics_python27.log

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
START RequestId: XXXX Version: $LATEST
2-
{"e": XXXX, "m": "aws.lambda.enhanced.invocations", "t": ["region:us-east-1", "account_id:XXXX", "functionname:integration-tester-dev-async-metrics_python27", "cold_start:true", "memorysize:1024", "runtime:python2.7", "dd_lambda_layer:datadog-python27_2.XX.0"], "v": 1}
2+
{"e": XXXX, "m": "aws.lambda.enhanced.invocations", "t": ["region:us-east-1", "account_id:XXXX", "functionname:integration-tester-dev-async-metrics_python27", "resource:integration-tester-dev-async-metrics_python27", "cold_start:true", "memorysize:1024", "executedversion:$LATEST", "runtime:python2.7", "dd_lambda_layer:datadog-python27_2.XX.0"], "v": 1}
33
{"e": XXXX, "m": "hello.dog", "t": ["team:serverless", "role:hello", "dd_lambda_layer:datadog-python27_2.XX.0"], "v": 1}
44
{"e": XXXX, "m": "tests.integration.count", "t": ["test:integration", "role:hello", "dd_lambda_layer:datadog-python27_2.XX.0"], "v": 21}
55
END RequestId: XXXX
66
REPORT RequestId: XXXX Duration: XXXX ms Billed Duration: XXXX ms Memory Size: 1024 MB Max Memory Used: XXXX MB Init Duration: XXXX ms
77
XRAY TraceId: XXXX SegmentId: XXXX Sampled: true
88
START RequestId: XXXX Version: $LATEST
9-
{"e": XXXX, "m": "aws.lambda.enhanced.invocations", "t": ["region:us-east-1", "account_id:XXXX", "functionname:integration-tester-dev-async-metrics_python27", "cold_start:false", "memorysize:1024", "runtime:python2.7", "dd_lambda_layer:datadog-python27_2.XX.0"], "v": 1}
9+
{"e": XXXX, "m": "aws.lambda.enhanced.invocations", "t": ["region:us-east-1", "account_id:XXXX", "functionname:integration-tester-dev-async-metrics_python27", "resource:integration-tester-dev-async-metrics_python27", "cold_start:false", "memorysize:1024", "executedversion:$LATEST", "runtime:python2.7", "dd_lambda_layer:datadog-python27_2.XX.0"], "v": 1}
1010
{"e": XXXX, "m": "hello.dog", "t": ["team:serverless", "role:hello", "dd_lambda_layer:datadog-python27_2.XX.0"], "v": 1}
1111
{"e": XXXX, "m": "tests.integration.count", "t": ["test:integration", "role:hello", "dd_lambda_layer:datadog-python27_2.XX.0"], "v": 21}
1212
END RequestId: XXXX
1313
REPORT RequestId: XXXX Duration: XXXX ms Billed Duration: XXXX ms Memory Size: 1024 MB Max Memory Used: XXXX MB
1414
XRAY TraceId: XXXX SegmentId: XXXX Sampled: true
1515
START RequestId: XXXX Version: $LATEST
16-
{"e": XXXX, "m": "aws.lambda.enhanced.invocations", "t": ["region:us-east-1", "account_id:XXXX", "functionname:integration-tester-dev-async-metrics_python27", "cold_start:false", "memorysize:1024", "runtime:python2.7", "dd_lambda_layer:datadog-python27_2.XX.0"], "v": 1}
16+
{"e": XXXX, "m": "aws.lambda.enhanced.invocations", "t": ["region:us-east-1", "account_id:XXXX", "functionname:integration-tester-dev-async-metrics_python27", "resource:integration-tester-dev-async-metrics_python27", "cold_start:false", "memorysize:1024", "executedversion:$LATEST", "runtime:python2.7", "dd_lambda_layer:datadog-python27_2.XX.0"], "v": 1}
1717
{"e": XXXX, "m": "hello.dog", "t": ["team:serverless", "role:hello", "dd_lambda_layer:datadog-python27_2.XX.0"], "v": 1}
1818
{"e": XXXX, "m": "tests.integration.count", "t": ["test:integration", "role:hello", "dd_lambda_layer:datadog-python27_2.XX.0"], "v": 21}
1919
END RequestId: XXXX

tests/integration/snapshots/logs/async-metrics_python36.log

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
START RequestId: XXXX Version: $LATEST
2-
{"m": "aws.lambda.enhanced.invocations", "v": 1, "e": XXXX, "t": ["region:us-east-1", "account_id:XXXX", "functionname:integration-tester-dev-async-metrics_python36", "cold_start:true", "memorysize:1024", "runtime:python3.6", "dd_lambda_layer:datadog-python36_2.XX.0"]}
2+
{"m": "aws.lambda.enhanced.invocations", "v": 1, "e": XXXX, "t": ["region:us-east-1", "account_id:XXXX", "functionname:integration-tester-dev-async-metrics_python36", "resource:integration-tester-dev-async-metrics_python36", "cold_start:true", "memorysize:1024", "executedversion:$LATEST", "runtime:python3.6", "dd_lambda_layer:datadog-python36_2.XX.0"]}
33
{"m": "hello.dog", "v": 1, "e": XXXX, "t": ["team:serverless", "role:hello", "dd_lambda_layer:datadog-python36_2.XX.0"]}
44
{"m": "tests.integration.count", "v": 21, "e": XXXX, "t": ["test:integration", "role:hello", "dd_lambda_layer:datadog-python36_2.XX.0"]}
55
END RequestId: XXXX
66
REPORT RequestId: XXXX Duration: XXXX ms Billed Duration: XXXX ms Memory Size: 1024 MB Max Memory Used: XXXX MB Init Duration: XXXX ms
77
XRAY TraceId: XXXX SegmentId: XXXX Sampled: true
88
START RequestId: XXXX Version: $LATEST
9-
{"m": "aws.lambda.enhanced.invocations", "v": 1, "e": XXXX, "t": ["region:us-east-1", "account_id:XXXX", "functionname:integration-tester-dev-async-metrics_python36", "cold_start:false", "memorysize:1024", "runtime:python3.6", "dd_lambda_layer:datadog-python36_2.XX.0"]}
9+
{"m": "aws.lambda.enhanced.invocations", "v": 1, "e": XXXX, "t": ["region:us-east-1", "account_id:XXXX", "functionname:integration-tester-dev-async-metrics_python36", "resource:integration-tester-dev-async-metrics_python36", "cold_start:false", "memorysize:1024", "executedversion:$LATEST", "runtime:python3.6", "dd_lambda_layer:datadog-python36_2.XX.0"]}
1010
{"m": "hello.dog", "v": 1, "e": XXXX, "t": ["team:serverless", "role:hello", "dd_lambda_layer:datadog-python36_2.XX.0"]}
1111
{"m": "tests.integration.count", "v": 21, "e": XXXX, "t": ["test:integration", "role:hello", "dd_lambda_layer:datadog-python36_2.XX.0"]}
1212
END RequestId: XXXX
1313
REPORT RequestId: XXXX Duration: XXXX ms Billed Duration: XXXX ms Memory Size: 1024 MB Max Memory Used: XXXX MB
1414
XRAY TraceId: XXXX SegmentId: XXXX Sampled: true
1515
START RequestId: XXXX Version: $LATEST
16-
{"m": "aws.lambda.enhanced.invocations", "v": 1, "e": XXXX, "t": ["region:us-east-1", "account_id:XXXX", "functionname:integration-tester-dev-async-metrics_python36", "cold_start:false", "memorysize:1024", "runtime:python3.6", "dd_lambda_layer:datadog-python36_2.XX.0"]}
16+
{"m": "aws.lambda.enhanced.invocations", "v": 1, "e": XXXX, "t": ["region:us-east-1", "account_id:XXXX", "functionname:integration-tester-dev-async-metrics_python36", "resource:integration-tester-dev-async-metrics_python36", "cold_start:false", "memorysize:1024", "executedversion:$LATEST", "runtime:python3.6", "dd_lambda_layer:datadog-python36_2.XX.0"]}
1717
{"m": "hello.dog", "v": 1, "e": XXXX, "t": ["team:serverless", "role:hello", "dd_lambda_layer:datadog-python36_2.XX.0"]}
1818
{"m": "tests.integration.count", "v": 21, "e": XXXX, "t": ["test:integration", "role:hello", "dd_lambda_layer:datadog-python36_2.XX.0"]}
1919
END RequestId: XXXX

tests/integration/snapshots/logs/async-metrics_python37.log

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
START RequestId: XXXX Version: $LATEST
2-
{"m": "aws.lambda.enhanced.invocations", "v": 1, "e": XXXX, "t": ["region:us-east-1", "account_id:XXXX", "functionname:integration-tester-dev-async-metrics_python37", "cold_start:true", "memorysize:1024", "runtime:python3.7", "dd_lambda_layer:datadog-python37_2.XX.0"]}
2+
{"m": "aws.lambda.enhanced.invocations", "v": 1, "e": XXXX, "t": ["region:us-east-1", "account_id:XXXX", "functionname:integration-tester-dev-async-metrics_python37", "resource:integration-tester-dev-async-metrics_python37", "cold_start:true", "memorysize:1024", "executedversion:$LATEST", "runtime:python3.7", "dd_lambda_layer:datadog-python37_2.XX.0"]}
33
{"m": "hello.dog", "v": 1, "e": XXXX, "t": ["team:serverless", "role:hello", "dd_lambda_layer:datadog-python37_2.XX.0"]}
44
{"m": "tests.integration.count", "v": 21, "e": XXXX, "t": ["test:integration", "role:hello", "dd_lambda_layer:datadog-python37_2.XX.0"]}
55
END RequestId: XXXX
66
REPORT RequestId: XXXX Duration: XXXX ms Billed Duration: XXXX ms Memory Size: 1024 MB Max Memory Used: XXXX MB Init Duration: XXXX ms
77
XRAY TraceId: XXXX SegmentId: XXXX Sampled: true
88
START RequestId: XXXX Version: $LATEST
9-
{"m": "aws.lambda.enhanced.invocations", "v": 1, "e": XXXX, "t": ["region:us-east-1", "account_id:XXXX", "functionname:integration-tester-dev-async-metrics_python37", "cold_start:false", "memorysize:1024", "runtime:python3.7", "dd_lambda_layer:datadog-python37_2.XX.0"]}
9+
{"m": "aws.lambda.enhanced.invocations", "v": 1, "e": XXXX, "t": ["region:us-east-1", "account_id:XXXX", "functionname:integration-tester-dev-async-metrics_python37", "resource:integration-tester-dev-async-metrics_python37", "cold_start:false", "memorysize:1024", "executedversion:$LATEST", "runtime:python3.7", "dd_lambda_layer:datadog-python37_2.XX.0"]}
1010
{"m": "hello.dog", "v": 1, "e": XXXX, "t": ["team:serverless", "role:hello", "dd_lambda_layer:datadog-python37_2.XX.0"]}
1111
{"m": "tests.integration.count", "v": 21, "e": XXXX, "t": ["test:integration", "role:hello", "dd_lambda_layer:datadog-python37_2.XX.0"]}
1212
END RequestId: XXXX
1313
REPORT RequestId: XXXX Duration: XXXX ms Billed Duration: XXXX ms Memory Size: 1024 MB Max Memory Used: XXXX MB
1414
XRAY TraceId: XXXX SegmentId: XXXX Sampled: true
1515
START RequestId: XXXX Version: $LATEST
16-
{"m": "aws.lambda.enhanced.invocations", "v": 1, "e": XXXX, "t": ["region:us-east-1", "account_id:XXXX", "functionname:integration-tester-dev-async-metrics_python37", "cold_start:false", "memorysize:1024", "runtime:python3.7", "dd_lambda_layer:datadog-python37_2.XX.0"]}
16+
{"m": "aws.lambda.enhanced.invocations", "v": 1, "e": XXXX, "t": ["region:us-east-1", "account_id:XXXX", "functionname:integration-tester-dev-async-metrics_python37", "resource:integration-tester-dev-async-metrics_python37", "cold_start:false", "memorysize:1024", "executedversion:$LATEST", "runtime:python3.7", "dd_lambda_layer:datadog-python37_2.XX.0"]}
1717
{"m": "hello.dog", "v": 1, "e": XXXX, "t": ["team:serverless", "role:hello", "dd_lambda_layer:datadog-python37_2.XX.0"]}
1818
{"m": "tests.integration.count", "v": 21, "e": XXXX, "t": ["test:integration", "role:hello", "dd_lambda_layer:datadog-python37_2.XX.0"]}
1919
END RequestId: XXXX

tests/integration/snapshots/logs/async-metrics_python38.log

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
START RequestId: XXXX Version: $LATEST
2-
{"m": "aws.lambda.enhanced.invocations", "v": 1, "e": XXXX, "t": ["region:us-east-1", "account_id:XXXX", "functionname:integration-tester-dev-async-metrics_python38", "cold_start:true", "memorysize:1024", "runtime:python3.8", "dd_lambda_layer:datadog-python38_2.XX.0"]}
2+
{"m": "aws.lambda.enhanced.invocations", "v": 1, "e": XXXX, "t": ["region:us-east-1", "account_id:XXXX", "functionname:integration-tester-dev-async-metrics_python38", "resource:integration-tester-dev-async-metrics_python38", "cold_start:true", "memorysize:1024", "executedversion:$LATEST", "runtime:python3.8", "dd_lambda_layer:datadog-python38_2.XX.0"]}
33
{"m": "hello.dog", "v": 1, "e": XXXX, "t": ["team:serverless", "role:hello", "dd_lambda_layer:datadog-python38_2.XX.0"]}
44
{"m": "tests.integration.count", "v": 21, "e": XXXX, "t": ["test:integration", "role:hello", "dd_lambda_layer:datadog-python38_2.XX.0"]}
55
END RequestId: XXXX
66
REPORT RequestId: XXXX Duration: XXXX ms Billed Duration: XXXX ms Memory Size: 1024 MB Max Memory Used: XXXX MB Init Duration: XXXX ms
77
XRAY TraceId: XXXX SegmentId: XXXX Sampled: true
88
START RequestId: XXXX Version: $LATEST
9-
{"m": "aws.lambda.enhanced.invocations", "v": 1, "e": XXXX, "t": ["region:us-east-1", "account_id:XXXX", "functionname:integration-tester-dev-async-metrics_python38", "cold_start:false", "memorysize:1024", "runtime:python3.8", "dd_lambda_layer:datadog-python38_2.XX.0"]}
9+
{"m": "aws.lambda.enhanced.invocations", "v": 1, "e": XXXX, "t": ["region:us-east-1", "account_id:XXXX", "functionname:integration-tester-dev-async-metrics_python38", "resource:integration-tester-dev-async-metrics_python38", "cold_start:false", "memorysize:1024", "executedversion:$LATEST", "runtime:python3.8", "dd_lambda_layer:datadog-python38_2.XX.0"]}
1010
{"m": "hello.dog", "v": 1, "e": XXXX, "t": ["team:serverless", "role:hello", "dd_lambda_layer:datadog-python38_2.XX.0"]}
1111
{"m": "tests.integration.count", "v": 21, "e": XXXX, "t": ["test:integration", "role:hello", "dd_lambda_layer:datadog-python38_2.XX.0"]}
1212
END RequestId: XXXX
1313
REPORT RequestId: XXXX Duration: XXXX ms Billed Duration: XXXX ms Memory Size: 1024 MB Max Memory Used: XXXX MB
1414
XRAY TraceId: XXXX SegmentId: XXXX Sampled: true
1515
START RequestId: XXXX Version: $LATEST
16-
{"m": "aws.lambda.enhanced.invocations", "v": 1, "e": XXXX, "t": ["region:us-east-1", "account_id:XXXX", "functionname:integration-tester-dev-async-metrics_python38", "cold_start:false", "memorysize:1024", "runtime:python3.8", "dd_lambda_layer:datadog-python38_2.XX.0"]}
16+
{"m": "aws.lambda.enhanced.invocations", "v": 1, "e": XXXX, "t": ["region:us-east-1", "account_id:XXXX", "functionname:integration-tester-dev-async-metrics_python38", "resource:integration-tester-dev-async-metrics_python38", "cold_start:false", "memorysize:1024", "executedversion:$LATEST", "runtime:python3.8", "dd_lambda_layer:datadog-python38_2.XX.0"]}
1717
{"m": "hello.dog", "v": 1, "e": XXXX, "t": ["team:serverless", "role:hello", "dd_lambda_layer:datadog-python38_2.XX.0"]}
1818
{"m": "tests.integration.count", "v": 21, "e": XXXX, "t": ["test:integration", "role:hello", "dd_lambda_layer:datadog-python38_2.XX.0"]}
1919
END RequestId: XXXX

0 commit comments

Comments
 (0)