From e9656f732822bbf871dc61d3457040c2391760cf Mon Sep 17 00:00:00 2001 From: simlu Date: Fri, 25 Jul 2025 11:45:31 -0700 Subject: [PATCH] fix: now filtering cloudwatch logs --- src/logic/subscribe.js | 6 +++++- src/logic/util/lambda.js | 5 +++-- src/vars.js | 1 + .../subscribe/skipByTag.spec.json_recording.json | 2 +- .../subscribe/subscribe.spec.json_recording.json | 2 +- ...a_testingSubscribeCloudWatchLogGroupError_recording.json | 2 +- 6 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 src/vars.js diff --git a/src/logic/subscribe.js b/src/logic/subscribe.js index 4b3f72f4..26b642a7 100644 --- a/src/logic/subscribe.js +++ b/src/logic/subscribe.js @@ -1,6 +1,7 @@ import get from 'lodash.get'; import { logger } from 'lambda-monitor-logger'; import Lambda from './util/lambda.js'; +import { filterPattern } from '../vars.js'; const lambda = Lambda(); @@ -16,7 +17,10 @@ export default () => lambda const monitor = functions.find((f) => get(f, 'Tags.MONITOR', null) === '1'); const monitored = functions .filter((f) => get(f, 'Tags.MONITORED', null) !== '0') - .filter((f) => f.subscriptionFilters.every((e) => e.destinationArn !== monitor.FunctionARN)); + .filter((f) => f.subscriptionFilters.every((e) => ( + e.destinationArn !== monitor.FunctionARN + || e.filterPattern !== filterPattern + ))); return Promise.all(monitored.map((producer) => lambda.subscribeCloudWatchLogGroup(monitor, producer))); }).catch((e) => { if (e.name === 'ThrottlingException') { diff --git a/src/logic/util/lambda.js b/src/logic/util/lambda.js index b66fb7ba..13b3d99e 100644 --- a/src/logic/util/lambda.js +++ b/src/logic/util/lambda.js @@ -1,5 +1,6 @@ import get from 'lodash.get'; import aws from './aws.js'; +import { filterPattern } from '../../vars.js'; export default () => { const logGroupName = (fn) => `/aws/lambda/${fn.FunctionName}`; @@ -43,8 +44,8 @@ export default () => { const subscribeCloudWatchLogGroup = (monitor, producer) => aws .call('CloudWatchLogs:PutSubscriptionFilterCommand', { destinationArn: monitor.FunctionARN, - filterName: 'NoneFilter', - filterPattern: '', + filterName: 'NoneFilter', // existing name, can't really change + filterPattern, logGroupName: logGroupName(producer) }); diff --git a/src/vars.js b/src/vars.js new file mode 100644 index 00000000..ec16be87 --- /dev/null +++ b/src/vars.js @@ -0,0 +1 @@ +export const filterPattern = '-%^START RequestId: |^END RequestId: %'; diff --git a/test/lambda/__cassettes/subscribe/skipByTag.spec.json_recording.json b/test/lambda/__cassettes/subscribe/skipByTag.spec.json_recording.json index 5d38b764..ef6f7fc2 100644 --- a/test/lambda/__cassettes/subscribe/skipByTag.spec.json_recording.json +++ b/test/lambda/__cassettes/subscribe/skipByTag.spec.json_recording.json @@ -77,7 +77,7 @@ "destinationArn": "arn:aws:lambda:us-east-1:1234567890:function:lambda-function-one", "distribution": "ByLogStream", "filterName": "NoneFilter", - "filterPattern": "", + "filterPattern": "-%^START RequestId: |^END RequestId: %", "logGroupName": "/aws/lambda/lambda-function-two" } ] diff --git a/test/lambda/__cassettes/subscribe/subscribe.spec.json_recording.json b/test/lambda/__cassettes/subscribe/subscribe.spec.json_recording.json index b2aece47..dcd3c6c4 100644 --- a/test/lambda/__cassettes/subscribe/subscribe.spec.json_recording.json +++ b/test/lambda/__cassettes/subscribe/subscribe.spec.json_recording.json @@ -81,7 +81,7 @@ "body": { "destinationArn": "arn:aws:lambda:us-east-1:1234567890:function:lambda-function-one", "filterName": "NoneFilter", - "filterPattern": "", + "filterPattern": "-%^START RequestId: |^END RequestId: %", "logGroupName": "/aws/lambda/lambda-function-two" }, "status": 200, diff --git a/test/logic/util/lambda.spec.js__cassettes/testingLambda_testingSubscribeCloudWatchLogGroupError_recording.json b/test/logic/util/lambda.spec.js__cassettes/testingLambda_testingSubscribeCloudWatchLogGroupError_recording.json index f569c905..37d1b44a 100644 --- a/test/logic/util/lambda.spec.js__cassettes/testingLambda_testingSubscribeCloudWatchLogGroupError_recording.json +++ b/test/logic/util/lambda.spec.js__cassettes/testingLambda_testingSubscribeCloudWatchLogGroupError_recording.json @@ -6,7 +6,7 @@ "body": { "destinationArn": "FUNCTION_ARN", "filterName": "NoneFilter", - "filterPattern": "", + "filterPattern": "-%^START RequestId: |^END RequestId: %", "logGroupName": "/aws/lambda/FUNCTION_NAME" }, "status": 400,