diff --git a/aws/logs_monitoring/steps/enrichment.py b/aws/logs_monitoring/steps/enrichment.py index 12d34e063..fa366b0e0 100644 --- a/aws/logs_monitoring/steps/enrichment.py +++ b/aws/logs_monitoring/steps/enrichment.py @@ -54,11 +54,16 @@ def add_metadata_to_lambda_log(event, cache_layer): if not lambda_log_arn: return + # Function name is the seventh piece of the ARN + try: + function_name = lambda_log_arn.split(":")[6] + except IndexError: + logger.error(f"Failed to extract function name from ARN: {lambda_log_arn}") + return + # Set Lambda ARN to "host" event[DD_HOST] = lambda_log_arn - # Function name is the seventh piece of the ARN - function_name = lambda_log_arn.split(":")[6] tags = [f"functionname:{function_name}"] # Get custom tags of the Lambda function @@ -94,7 +99,10 @@ def add_metadata_to_lambda_log(event, cache_layer): tags = list(set(tags)) tags.sort() # Keep order deterministic - event[DD_CUSTOM_TAGS] = ",".join([event.get(DD_CUSTOM_TAGS)] + tags) + if custom_tags := event.get(DD_CUSTOM_TAGS): + event[DD_CUSTOM_TAGS] = custom_tags + ",".join(tags) + else: + event[DD_CUSTOM_TAGS] = ",".join(tags) def get_enriched_lambda_log_tags(log_event, cache_layer): @@ -164,7 +172,7 @@ def extract_ddtags_from_message(event): [ tag for tag in event[DD_CUSTOM_TAGS].split(",") - if not tag.startswith("service") + if not tag.startswith("service:") ] ) diff --git a/aws/logs_monitoring/tests/approved_files/TestLambdaFunctionEndToEnd.test_datadog_forwarder.approved.json b/aws/logs_monitoring/tests/approved_files/TestLambdaFunctionEndToEnd.test_datadog_forwarder.approved.json index 1f510b19b..f7a1f5fd5 100644 --- a/aws/logs_monitoring/tests/approved_files/TestLambdaFunctionEndToEnd.test_datadog_forwarder.approved.json +++ b/aws/logs_monitoring/tests/approved_files/TestLambdaFunctionEndToEnd.test_datadog_forwarder.approved.json @@ -11,7 +11,7 @@ }, "ddsource": "lambda", "ddsourcecategory": "aws", - "ddtags": "forwardername:inferred-spans-python-dev-initsender,forwarder_memorysize:10,forwarder_version:,,account_id:601427279990,aws_account:601427279990,creator:swf,env:prod,functionname:hello-dog-node-dev-hello12x,monitor:datadog,region:sa-east-1,service:hello,team:metrics", + "ddtags": "forwardername:inferred-spans-python-dev-initsender,forwarder_memorysize:10,forwarder_version:,account_id:601427279990,aws_account:601427279990,creator:swf,env:prod,functionname:hello-dog-node-dev-hello12x,monitor:datadog,region:sa-east-1,service:hello,team:metrics", "host": "arn:aws:lambda:sa-east-1:601427279990:function:hello-dog-node-dev-hello12x", "id": "35311576111948622874033876462979853992919938886093242368", "lambda": { @@ -33,7 +33,7 @@ }, "ddsource": "lambda", "ddsourcecategory": "aws", - "ddtags": "forwardername:inferred-spans-python-dev-initsender,forwarder_memorysize:10,forwarder_version:,,account_id:601427279990,aws_account:601427279990,creator:swf,env:prod,functionname:hello-dog-node-dev-hello12x,monitor:datadog,region:sa-east-1,service:hello,team:metrics", + "ddtags": "forwardername:inferred-spans-python-dev-initsender,forwarder_memorysize:10,forwarder_version:,account_id:601427279990,aws_account:601427279990,creator:swf,env:prod,functionname:hello-dog-node-dev-hello12x,monitor:datadog,region:sa-east-1,service:hello,team:metrics", "host": "arn:aws:lambda:sa-east-1:601427279990:function:hello-dog-node-dev-hello12x", "id": "35311576111948622874033876462979853992919938886093242369", "lambda": { @@ -55,7 +55,7 @@ }, "ddsource": "lambda", "ddsourcecategory": "aws", - "ddtags": "forwardername:inferred-spans-python-dev-initsender,forwarder_memorysize:10,forwarder_version:,,account_id:601427279990,aws_account:601427279990,creator:swf,env:prod,functionname:hello-dog-node-dev-hello12x,monitor:datadog,region:sa-east-1,service:hello,team:metrics", + "ddtags": "forwardername:inferred-spans-python-dev-initsender,forwarder_memorysize:10,forwarder_version:,account_id:601427279990,aws_account:601427279990,creator:swf,env:prod,functionname:hello-dog-node-dev-hello12x,monitor:datadog,region:sa-east-1,service:hello,team:metrics", "host": "arn:aws:lambda:sa-east-1:601427279990:function:hello-dog-node-dev-hello12x", "id": "35311576111948622874033876462979853992919938886093242370", "lambda": { @@ -77,7 +77,7 @@ }, "ddsource": "lambda", "ddsourcecategory": "aws", - "ddtags": "forwardername:inferred-spans-python-dev-initsender,forwarder_memorysize:10,forwarder_version:,,account_id:601427279990,aws_account:601427279990,creator:swf,env:prod,functionname:hello-dog-node-dev-hello12x,monitor:datadog,region:sa-east-1,service:hello,team:metrics", + "ddtags": "forwardername:inferred-spans-python-dev-initsender,forwarder_memorysize:10,forwarder_version:,account_id:601427279990,aws_account:601427279990,creator:swf,env:prod,functionname:hello-dog-node-dev-hello12x,monitor:datadog,region:sa-east-1,service:hello,team:metrics", "host": "arn:aws:lambda:sa-east-1:601427279990:function:hello-dog-node-dev-hello12x", "id": "35311576111948622874033876462979853992919938886093242371", "lambda": { @@ -99,7 +99,7 @@ }, "ddsource": "lambda", "ddsourcecategory": "aws", - "ddtags": "forwardername:inferred-spans-python-dev-initsender,forwarder_memorysize:10,forwarder_version:,,account_id:601427279990,aws_account:601427279990,creator:swf,env:prod,functionname:hello-dog-node-dev-hello12x,monitor:datadog,region:sa-east-1,service:hello,team:metrics", + "ddtags": "forwardername:inferred-spans-python-dev-initsender,forwarder_memorysize:10,forwarder_version:,account_id:601427279990,aws_account:601427279990,creator:swf,env:prod,functionname:hello-dog-node-dev-hello12x,monitor:datadog,region:sa-east-1,service:hello,team:metrics", "host": "arn:aws:lambda:sa-east-1:601427279990:function:hello-dog-node-dev-hello12x", "id": "35311576111948622874033876462979853992919938886093242372", "lambda": { @@ -121,7 +121,7 @@ }, "ddsource": "lambda", "ddsourcecategory": "aws", - "ddtags": "forwardername:inferred-spans-python-dev-initsender,forwarder_memorysize:10,forwarder_version:,,account_id:601427279990,aws_account:601427279990,creator:swf,env:prod,functionname:hello-dog-node-dev-hello12x,monitor:datadog,region:sa-east-1,service:hello,team:metrics", + "ddtags": "forwardername:inferred-spans-python-dev-initsender,forwarder_memorysize:10,forwarder_version:,account_id:601427279990,aws_account:601427279990,creator:swf,env:prod,functionname:hello-dog-node-dev-hello12x,monitor:datadog,region:sa-east-1,service:hello,team:metrics", "host": "arn:aws:lambda:sa-east-1:601427279990:function:hello-dog-node-dev-hello12x", "id": "35311576112305434797210366433244425485282312670188929029", "lambda": { @@ -143,7 +143,7 @@ }, "ddsource": "lambda", "ddsourcecategory": "aws", - "ddtags": "forwardername:inferred-spans-python-dev-initsender,forwarder_memorysize:10,forwarder_version:,,account_id:601427279990,aws_account:601427279990,creator:swf,env:prod,functionname:hello-dog-node-dev-hello12x,monitor:datadog,region:sa-east-1,service:hello,team:metrics", + "ddtags": "forwardername:inferred-spans-python-dev-initsender,forwarder_memorysize:10,forwarder_version:,account_id:601427279990,aws_account:601427279990,creator:swf,env:prod,functionname:hello-dog-node-dev-hello12x,monitor:datadog,region:sa-east-1,service:hello,team:metrics", "host": "arn:aws:lambda:sa-east-1:601427279990:function:hello-dog-node-dev-hello12x", "id": "35311576113197464605151591358905854216188247130428145670", "lambda": { @@ -165,7 +165,7 @@ }, "ddsource": "lambda", "ddsourcecategory": "aws", - "ddtags": "forwardername:inferred-spans-python-dev-initsender,forwarder_memorysize:10,forwarder_version:,,account_id:601427279990,aws_account:601427279990,creator:swf,env:prod,functionname:hello-dog-node-dev-hello12x,monitor:datadog,region:sa-east-1,service:hello,team:metrics", + "ddtags": "forwardername:inferred-spans-python-dev-initsender,forwarder_memorysize:10,forwarder_version:,account_id:601427279990,aws_account:601427279990,creator:swf,env:prod,functionname:hello-dog-node-dev-hello12x,monitor:datadog,region:sa-east-1,service:hello,team:metrics", "host": "arn:aws:lambda:sa-east-1:601427279990:function:hello-dog-node-dev-hello12x", "id": "35311576113197464605151591358905854216188247130428145671", "lambda": { @@ -187,7 +187,7 @@ }, "ddsource": "lambda", "ddsourcecategory": "aws", - "ddtags": "forwardername:inferred-spans-python-dev-initsender,forwarder_memorysize:10,forwarder_version:,,account_id:601427279990,aws_account:601427279990,creator:swf,env:prod,functionname:hello-dog-node-dev-hello12x,monitor:datadog,region:sa-east-1,service:hello,team:metrics", + "ddtags": "forwardername:inferred-spans-python-dev-initsender,forwarder_memorysize:10,forwarder_version:,account_id:601427279990,aws_account:601427279990,creator:swf,env:prod,functionname:hello-dog-node-dev-hello12x,monitor:datadog,region:sa-east-1,service:hello,team:metrics", "host": "arn:aws:lambda:sa-east-1:601427279990:function:hello-dog-node-dev-hello12x", "id": "35311576113197464605151591358905854216188247130428145672", "lambda": { @@ -209,7 +209,7 @@ }, "ddsource": "lambda", "ddsourcecategory": "aws", - "ddtags": "forwardername:inferred-spans-python-dev-initsender,forwarder_memorysize:10,forwarder_version:,,account_id:601427279990,aws_account:601427279990,creator:swf,env:prod,functionname:hello-dog-node-dev-hello12x,monitor:datadog,region:sa-east-1,service:hello,team:metrics", + "ddtags": "forwardername:inferred-spans-python-dev-initsender,forwarder_memorysize:10,forwarder_version:,account_id:601427279990,aws_account:601427279990,creator:swf,env:prod,functionname:hello-dog-node-dev-hello12x,monitor:datadog,region:sa-east-1,service:hello,team:metrics", "host": "arn:aws:lambda:sa-east-1:601427279990:function:hello-dog-node-dev-hello12x", "id": "35311576113197464605151591358905854216188247130428145673", "lambda": { @@ -231,7 +231,7 @@ }, "ddsource": "lambda", "ddsourcecategory": "aws", - "ddtags": "forwardername:inferred-spans-python-dev-initsender,forwarder_memorysize:10,forwarder_version:,,account_id:601427279990,aws_account:601427279990,creator:swf,env:prod,functionname:hello-dog-node-dev-hello12x,monitor:datadog,region:sa-east-1,service:hello,team:metrics", + "ddtags": "forwardername:inferred-spans-python-dev-initsender,forwarder_memorysize:10,forwarder_version:,account_id:601427279990,aws_account:601427279990,creator:swf,env:prod,functionname:hello-dog-node-dev-hello12x,monitor:datadog,region:sa-east-1,service:hello,team:metrics", "host": "arn:aws:lambda:sa-east-1:601427279990:function:hello-dog-node-dev-hello12x", "id": "35311576113197464605151591358905854216188247130428145674", "lambda": { @@ -253,7 +253,7 @@ }, "ddsource": "lambda", "ddsourcecategory": "aws", - "ddtags": "forwardername:inferred-spans-python-dev-initsender,forwarder_memorysize:10,forwarder_version:,,account_id:601427279990,aws_account:601427279990,creator:swf,env:prod,functionname:hello-dog-node-dev-hello12x,monitor:datadog,region:sa-east-1,service:hello,team:metrics", + "ddtags": "forwardername:inferred-spans-python-dev-initsender,forwarder_memorysize:10,forwarder_version:,account_id:601427279990,aws_account:601427279990,creator:swf,env:prod,functionname:hello-dog-node-dev-hello12x,monitor:datadog,region:sa-east-1,service:hello,team:metrics", "host": "arn:aws:lambda:sa-east-1:601427279990:function:hello-dog-node-dev-hello12x", "id": "35311576113643479509122203821736568581641214360547753995", "lambda": { @@ -275,7 +275,7 @@ }, "ddsource": "lambda", "ddsourcecategory": "aws", - "ddtags": "forwardername:inferred-spans-python-dev-initsender,forwarder_memorysize:10,forwarder_version:,,account_id:601427279990,aws_account:601427279990,creator:swf,env:prod,functionname:hello-dog-node-dev-hello12x,monitor:datadog,region:sa-east-1,service:hello,team:metrics", + "ddtags": "forwardername:inferred-spans-python-dev-initsender,forwarder_memorysize:10,forwarder_version:,account_id:601427279990,aws_account:601427279990,creator:swf,env:prod,functionname:hello-dog-node-dev-hello12x,monitor:datadog,region:sa-east-1,service:hello,team:metrics", "host": "arn:aws:lambda:sa-east-1:601427279990:function:hello-dog-node-dev-hello12x", "id": "35311576113643479509122203821736568581641214360547753996", "lambda": { @@ -297,7 +297,7 @@ }, "ddsource": "lambda", "ddsourcecategory": "aws", - "ddtags": "forwardername:inferred-spans-python-dev-initsender,forwarder_memorysize:10,forwarder_version:,,account_id:601427279990,aws_account:601427279990,creator:swf,env:prod,functionname:hello-dog-node-dev-hello12x,monitor:datadog,region:sa-east-1,service:hello,team:metrics", + "ddtags": "forwardername:inferred-spans-python-dev-initsender,forwarder_memorysize:10,forwarder_version:,account_id:601427279990,aws_account:601427279990,creator:swf,env:prod,functionname:hello-dog-node-dev-hello12x,monitor:datadog,region:sa-east-1,service:hello,team:metrics", "host": "arn:aws:lambda:sa-east-1:601427279990:function:hello-dog-node-dev-hello12x", "id": "35311576113643479509122203821736568581641214360547753997", "lambda": { @@ -319,7 +319,7 @@ }, "ddsource": "lambda", "ddsourcecategory": "aws", - "ddtags": "forwardername:inferred-spans-python-dev-initsender,forwarder_memorysize:10,forwarder_version:,,account_id:601427279990,aws_account:601427279990,creator:swf,env:prod,functionname:hello-dog-node-dev-hello12x,monitor:datadog,region:sa-east-1,service:hello,team:metrics", + "ddtags": "forwardername:inferred-spans-python-dev-initsender,forwarder_memorysize:10,forwarder_version:,account_id:601427279990,aws_account:601427279990,creator:swf,env:prod,functionname:hello-dog-node-dev-hello12x,monitor:datadog,region:sa-east-1,service:hello,team:metrics", "host": "arn:aws:lambda:sa-east-1:601427279990:function:hello-dog-node-dev-hello12x", "id": "35311576123455807396475678004012284621606493423179137038", "lambda": { @@ -341,7 +341,7 @@ }, "ddsource": "lambda", "ddsourcecategory": "aws", - "ddtags": "forwardername:inferred-spans-python-dev-initsender,forwarder_memorysize:10,forwarder_version:,,account_id:601427279990,aws_account:601427279990,creator:swf,env:prod,functionname:hello-dog-node-dev-hello12x,monitor:datadog,region:sa-east-1,service:hello,team:metrics", + "ddtags": "forwardername:inferred-spans-python-dev-initsender,forwarder_memorysize:10,forwarder_version:,account_id:601427279990,aws_account:601427279990,creator:swf,env:prod,functionname:hello-dog-node-dev-hello12x,monitor:datadog,region:sa-east-1,service:hello,team:metrics", "host": "arn:aws:lambda:sa-east-1:601427279990:function:hello-dog-node-dev-hello12x", "id": "35311576123478108141674208627153820339879141784685117455", "lambda": { @@ -363,7 +363,7 @@ }, "ddsource": "lambda", "ddsourcecategory": "aws", - "ddtags": "forwardername:inferred-spans-python-dev-initsender,forwarder_memorysize:10,forwarder_version:,,account_id:601427279990,aws_account:601427279990,creator:swf,env:prod,functionname:hello-dog-node-dev-hello12x,monitor:datadog,region:sa-east-1,service:hello,team:metrics", + "ddtags": "forwardername:inferred-spans-python-dev-initsender,forwarder_memorysize:10,forwarder_version:,account_id:601427279990,aws_account:601427279990,creator:swf,env:prod,functionname:hello-dog-node-dev-hello12x,monitor:datadog,region:sa-east-1,service:hello,team:metrics", "host": "arn:aws:lambda:sa-east-1:601427279990:function:hello-dog-node-dev-hello12x", "id": "35311576125685881916328740318165856448871329573777178640", "lambda": { @@ -385,7 +385,7 @@ }, "ddsource": "lambda", "ddsourcecategory": "aws", - "ddtags": "forwardername:inferred-spans-python-dev-initsender,forwarder_memorysize:10,forwarder_version:,,account_id:601427279990,aws_account:601427279990,creator:swf,env:prod,functionname:hello-dog-node-dev-hello12x,monitor:datadog,region:sa-east-1,service:hello,team:metrics", + "ddtags": "forwardername:inferred-spans-python-dev-initsender,forwarder_memorysize:10,forwarder_version:,account_id:601427279990,aws_account:601427279990,creator:swf,env:prod,functionname:hello-dog-node-dev-hello12x,monitor:datadog,region:sa-east-1,service:hello,team:metrics", "host": "arn:aws:lambda:sa-east-1:601427279990:function:hello-dog-node-dev-hello12x", "id": "35311576126131896820299352780996570814324296803896786961", "lambda": { @@ -407,7 +407,7 @@ }, "ddsource": "lambda", "ddsourcecategory": "aws", - "ddtags": "forwardername:inferred-spans-python-dev-initsender,forwarder_memorysize:10,forwarder_version:,,account_id:601427279990,aws_account:601427279990,creator:swf,env:prod,functionname:hello-dog-node-dev-hello12x,monitor:datadog,region:sa-east-1,service:hello,team:metrics", + "ddtags": "forwardername:inferred-spans-python-dev-initsender,forwarder_memorysize:10,forwarder_version:,account_id:601427279990,aws_account:601427279990,creator:swf,env:prod,functionname:hello-dog-node-dev-hello12x,monitor:datadog,region:sa-east-1,service:hello,team:metrics", "host": "arn:aws:lambda:sa-east-1:601427279990:function:hello-dog-node-dev-hello12x", "id": "35311576126131896820299352780996570814324296803896786962", "lambda": { diff --git a/aws/logs_monitoring/tests/approved_files/TestLambdaMetadataEnrichment.test_lambda_event_bad_arn.approved.json b/aws/logs_monitoring/tests/approved_files/TestLambdaMetadataEnrichment.test_lambda_event_bad_arn.approved.json new file mode 100644 index 000000000..da111f3d9 --- /dev/null +++ b/aws/logs_monitoring/tests/approved_files/TestLambdaMetadataEnrichment.test_lambda_event_bad_arn.approved.json @@ -0,0 +1,5 @@ +{ + "lambda": { + "arn": "bad_arn" + } +} diff --git a/aws/logs_monitoring/tests/approved_files/TestLambdaMetadataEnrichment.test_lambda_event_w_custom_tags_env.approved.json b/aws/logs_monitoring/tests/approved_files/TestLambdaMetadataEnrichment.test_lambda_event_w_custom_tags_env.approved.json new file mode 100644 index 000000000..9f25b1cc2 --- /dev/null +++ b/aws/logs_monitoring/tests/approved_files/TestLambdaMetadataEnrichment.test_lambda_event_w_custom_tags_env.approved.json @@ -0,0 +1,8 @@ +{ + "ddtags": "account_id:123456789012,aws_account:123456789012,env:customtags_env,functionname:my-function,region:us-east-1,service:my-function", + "host": "arn:aws:lambda:us-east-1:123456789012:function:my-function", + "lambda": { + "arn": "arn:aws:lambda:us-east-1:123456789012:function:my-function" + }, + "service": "my-function" +} diff --git a/aws/logs_monitoring/tests/approved_files/TestLambdaMetadataEnrichment.test_lambda_event_w_custom_tags_w_service.approved.json b/aws/logs_monitoring/tests/approved_files/TestLambdaMetadataEnrichment.test_lambda_event_w_custom_tags_w_service.approved.json new file mode 100644 index 000000000..0945d9a37 --- /dev/null +++ b/aws/logs_monitoring/tests/approved_files/TestLambdaMetadataEnrichment.test_lambda_event_w_custom_tags_w_service.approved.json @@ -0,0 +1,8 @@ +{ + "ddtags": "account_id:123456789012,aws_account:123456789012,functionname:my-function,region:us-east-1", + "host": "arn:aws:lambda:us-east-1:123456789012:function:my-function", + "lambda": { + "arn": "arn:aws:lambda:us-east-1:123456789012:function:my-function" + }, + "service": "my_service" +} diff --git a/aws/logs_monitoring/tests/approved_files/TestLambdaMetadataEnrichment.test_lambda_event_w_custom_tags_wo_service.approved.json b/aws/logs_monitoring/tests/approved_files/TestLambdaMetadataEnrichment.test_lambda_event_w_custom_tags_wo_service.approved.json new file mode 100644 index 000000000..0f2b09f2b --- /dev/null +++ b/aws/logs_monitoring/tests/approved_files/TestLambdaMetadataEnrichment.test_lambda_event_w_custom_tags_wo_service.approved.json @@ -0,0 +1,8 @@ +{ + "ddtags": "account_id:123456789012,aws_account:123456789012,functionname:my-function,region:us-east-1,service:customtags_service", + "host": "arn:aws:lambda:us-east-1:123456789012:function:my-function", + "lambda": { + "arn": "arn:aws:lambda:us-east-1:123456789012:function:my-function" + }, + "service": "customtags_service" +} diff --git a/aws/logs_monitoring/tests/approved_files/TestLambdaMetadataEnrichment.test_lambda_event_w_service.approved.json b/aws/logs_monitoring/tests/approved_files/TestLambdaMetadataEnrichment.test_lambda_event_w_service.approved.json new file mode 100644 index 000000000..0945d9a37 --- /dev/null +++ b/aws/logs_monitoring/tests/approved_files/TestLambdaMetadataEnrichment.test_lambda_event_w_service.approved.json @@ -0,0 +1,8 @@ +{ + "ddtags": "account_id:123456789012,aws_account:123456789012,functionname:my-function,region:us-east-1", + "host": "arn:aws:lambda:us-east-1:123456789012:function:my-function", + "lambda": { + "arn": "arn:aws:lambda:us-east-1:123456789012:function:my-function" + }, + "service": "my_service" +} diff --git a/aws/logs_monitoring/tests/approved_files/TestLambdaMetadataEnrichment.test_lambda_event_w_service_and_ddtags.approved.json b/aws/logs_monitoring/tests/approved_files/TestLambdaMetadataEnrichment.test_lambda_event_w_service_and_ddtags.approved.json new file mode 100644 index 000000000..7ad44fb7c --- /dev/null +++ b/aws/logs_monitoring/tests/approved_files/TestLambdaMetadataEnrichment.test_lambda_event_w_service_and_ddtags.approved.json @@ -0,0 +1,8 @@ +{ + "ddtags": "service:ddtags_serviceaccount_id:123456789012,aws_account:123456789012,functionname:my-function,region:us-east-1", + "host": "arn:aws:lambda:us-east-1:123456789012:function:my-function", + "lambda": { + "arn": "arn:aws:lambda:us-east-1:123456789012:function:my-function" + }, + "service": "my_service" +} diff --git a/aws/logs_monitoring/tests/approved_files/TestLambdaMetadataEnrichment.test_lambda_event_wo_service.approved.json b/aws/logs_monitoring/tests/approved_files/TestLambdaMetadataEnrichment.test_lambda_event_wo_service.approved.json new file mode 100644 index 000000000..0ae1d7e9e --- /dev/null +++ b/aws/logs_monitoring/tests/approved_files/TestLambdaMetadataEnrichment.test_lambda_event_wo_service.approved.json @@ -0,0 +1,8 @@ +{ + "ddtags": "account_id:123456789012,aws_account:123456789012,functionname:my-function,region:us-east-1,service:my-function", + "host": "arn:aws:lambda:us-east-1:123456789012:function:my-function", + "lambda": { + "arn": "arn:aws:lambda:us-east-1:123456789012:function:my-function" + }, + "service": "my-function" +} diff --git a/aws/logs_monitoring/tests/approved_files/TestLambdaMetadataEnrichment.test_non_lambda_event.approved.json b/aws/logs_monitoring/tests/approved_files/TestLambdaMetadataEnrichment.test_non_lambda_event.approved.json new file mode 100644 index 000000000..76d47699f --- /dev/null +++ b/aws/logs_monitoring/tests/approved_files/TestLambdaMetadataEnrichment.test_non_lambda_event.approved.json @@ -0,0 +1,3 @@ +{ + "lambda": {} +} diff --git a/aws/logs_monitoring/tests/test_enrichment.py b/aws/logs_monitoring/tests/test_enrichment.py index 79506862e..9544e257a 100644 --- a/aws/logs_monitoring/tests/test_enrichment.py +++ b/aws/logs_monitoring/tests/test_enrichment.py @@ -1,6 +1,12 @@ -import unittest import json + +import unittest +from unittest.mock import MagicMock + +from caching.cache_layer import CacheLayer +from approvaltests.approvals import verify_as_json from steps.enrichment import ( + add_metadata_to_lambda_log, extract_host_from_cloudtrails, extract_host_from_guardduty, extract_host_from_route53, @@ -153,5 +159,99 @@ def test_parse_source_route53(self): self.assertEqual(event["host"], "i-99999999") +class TestLambdaMetadataEnrichment(unittest.TestCase): + def test_empty_event(self): + cache_layer = CacheLayer("") + event = {} + add_metadata_to_lambda_log(event, cache_layer) + + self.assertEqual(event, {}) + + def test_non_lambda_event(self): + cache_layer = CacheLayer("") + event = {"lambda": {}} + add_metadata_to_lambda_log(event, cache_layer) + + verify_as_json(event) + + def test_lambda_event_bad_arn(self): + cache_layer = CacheLayer("") + event = {"lambda": {"arn": "bad_arn"}} + add_metadata_to_lambda_log(event, cache_layer) + verify_as_json(event) + + def test_lambda_event_wo_service(self): + cache_layer = CacheLayer("") + event = { + "lambda": { + "arn": "arn:aws:lambda:us-east-1:123456789012:function:my-function" + } + } + add_metadata_to_lambda_log(event, cache_layer) + verify_as_json(event) + + def test_lambda_event_w_custom_tags_wo_service(self): + cache_layer = CacheLayer("") + cache_layer._lambda_cache.get = MagicMock( + return_value=["service:customtags_service"] + ) + event = { + "lambda": { + "arn": "arn:aws:lambda:us-east-1:123456789012:function:my-function" + } + } + add_metadata_to_lambda_log(event, cache_layer) + verify_as_json(event) + + def test_lambda_event_w_custom_tags_w_service(self): + cache_layer = CacheLayer("") + cache_layer._lambda_cache.get = MagicMock( + return_value=["service:customtags_service"] + ) + event = { + "lambda": { + "arn": "arn:aws:lambda:us-east-1:123456789012:function:my-function" + }, + "service": "my_service", + } + add_metadata_to_lambda_log(event, cache_layer) + verify_as_json(event) + + def test_lambda_event_w_service(self): + cache_layer = CacheLayer("") + event = { + "lambda": { + "arn": "arn:aws:lambda:us-east-1:123456789012:function:my-function" + }, + "service": "my_service", + } + add_metadata_to_lambda_log(event, cache_layer) + verify_as_json(event) + + def test_lambda_event_w_service_and_ddtags(self): + cache_layer = CacheLayer("") + event = { + "lambda": { + "arn": "arn:aws:lambda:us-east-1:123456789012:function:my-function" + }, + "service": "my_service", + "ddtags": "service:ddtags_service", + } + add_metadata_to_lambda_log(event, cache_layer) + verify_as_json(event) + + def test_lambda_event_w_custom_tags_env(self): + cache_layer = CacheLayer("") + cache_layer._lambda_cache.get = MagicMock(return_value=["env:customtags_env"]) + event = { + "lambda": { + "arn": "arn:aws:lambda:us-east-1:123456789012:function:my-function" + }, + "ddtags": "env:none", + } + add_metadata_to_lambda_log(event, cache_layer) + verify_as_json(event) + + if __name__ == "__main__": unittest.main()